将定制的java包引入到android系统中
来源:互联网 发布:公司网络一会断一会好 编辑:程序博客网 时间:2024/05/16 09:59
开发环境
主机:ubuntu
android机:android 4.3
CPU:MSM8610
一般行业定制机器或者某些品牌会定制自己的jar包,那么如何将其引入android系统中,作为全局包呢?如果只是引入第三方已做好的jar包,来开发应用,请见我的博客另一篇文章 “Android开发小问题集”。
现以开发中引入系统级扫描开发包为例。要做的其实有4个地方。
1、jar模块及权限xml
Android.mk中需要处理2个模块:指定编译barcode.jar这个模块,还要指定拷贝一个权限xml到系统的/system/etc/permisson中。
Android.mk完整如下
LOCAL_PATH :=$(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES :=$(call all-subdir-java-files)LOCAL_MODULE := barcodeinclude $(BUILD_JAVA_LIBRARY)#MAKE_XMLinclude $(CLEAR_VARS)LOCAL_MODULE := barcode.xmlLOCAL_MODULE_CLASS :=ETCLOCAL_MODULE_TAGS := optionalLOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissionsLOCAL_SRC_FILES := $(LOCAL_MODULE)include $(BUILD_PREBUILT)barcode.xml完整如下
<?xml version="1.0" encoding="UTF-8"?><permissions><libraryname="barcode"file="/system/framework/barcode.jar" /></permissions>其中xml中的name为xml的文件名,file为copy后jar所在系统的完整路径
2、加入系统集成编译
因前面2个module指定的tags是optional,所以要在板子mk配置中加入指定的编译,编译配置文件在msm8x12\device\qcom\msm8610中的msm8610.mk中加入前面LOCAL_MODULE指定的名字,这样在lunch编译msm8610板子的时候,这2个模块才会编进Android系统,其他的如msm8974,ti\panda的板子都不会去编译,达到模块可配置化的灵活编译。
msm8610.mk加入编译的模块如下,关于模块编译相关可参见我的博客“Android.mk常用笔记”和“Android开发小问题集”中的“自定义编译模块”
//.........
# barcodePRODUCT_PACKAGES += \barcode \barcode.xml
//........
当然你也可以偷懒,将tags直接设置为eng或者user,这样所有eng或者user版本都会去编译,缺少不同板子配置的灵活性。
3、init.rc环境变量中加入jar
init.rc如下
#....
# setup the global environment export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin export LD_LIBRARY_PATH /vendor/lib:/system/lib export ANDROID_BOOTLOGO 1 export ANDROID_ROOT /system export ANDROID_ASSETS /system/app export ANDROID_DATA /data export ANDROID_STORAGE /storage export ASEC_MOUNTPOINT /mnt/asec export LOOP_MOUNTPOINT /mnt/obb export BOOTCLASSPATH /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/telephony-msim.jar:<span style="color:#3366ff;">/system/framework/barcode.jar</span>
#....
4、dex_preopt.mk加入jar
dex_preopt.mk如下
##################################### TODO: replace it with device's BOOTCLASSPATHDEXPREOPT_BOOT_JARS := core:core-junit:bouncycastle:ext:framework:telephony-common:voip-common:mms-common:android.policy:services:apache-xml:telephony-msim:keypad:touch:misc:ScannerAPI:<span style="color:#3366ff;">barcode</span>ifneq ($(strip $(TARGET_ADDITIONAL_BOOTCLASSPATH)),)DEXPREOPT_BOOT_JARS := $(DEXPREOPT_BOOT_JARS):$(TARGET_ADDITIONAL_BOOTCLASSPATH)endif
0 0
- 将定制的java包引入到android系统中
- 如何将jar包引入到web app libraries中
- 将jar包引入到指定的文件夹下
- Android 如何将定制的Launcher成为系统中唯一的Launcher
- Android 如何将定制的Launcher成为系统中唯一的Launcher
- Android 如何将定制的Launcher成为系统中唯一的Launcher
- 定制Android系统开发之八——实现从JNI到Java的回调
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法) 详解
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法) 详解
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法) 详解
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
- android中引入第三方包,编译通过,但运行的时候报 java.lang.NoClassDefFoundError
- svn出错:Error: File or directory '.' is out of date; try updating(
- CGI和FastCGI的区别
- Android:最火的快速开发框架XUtils
- 被覆写的方法不能为private
- 关于pdf文件如何合并的方法
- 将定制的java包引入到android系统中
- 使用Proxy和InvocationHandler实现代理器模式 实现spring aop
- C++与Flex之间socket通信policy-file-request解决方案
- 最大子列和问题(20)
- C++实现单例的例子(备忘录)
- iOS 7.0之后的UILabel左上,右下显示
- Mysql Left Join Where On
- iOS8 launch image的设置方法
- 寒假项目1-动态链表体验(改造)(3)