将定制的java包引入到android系统中

开发环境

主机: 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 := optional

LOCAL_SRC_FILES :=$(call all-subdir-java-files)
LOCAL_MODULE := barcode
include $(BUILD_JAVA_LIBRARY)


#MAKE_XML
include $(CLEAR_VARS)
LOCAL_MODULE :=  barcode.xml
LOCAL_MODULE_CLASS :=ETC
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
barcode.xml完整如下
<?xml version="1.0" encoding="UTF-8"?>
<permissions>
	<library
		name="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开发小问题集”中的“自定义编译模块”

//.........
# barcode
PRODUCT_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 BOOTCLASSPATH
DEXPREOPT_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

根据该处注释说用init.rc中的BOOTCLASSPATH来覆盖,他们具体什么关系我还没去了解,反正2处都加上肯定不会错。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值