关于将自定义jar添加到android framework里面小结

---将原java类文件放到framework下面,通过源码编译生成系统jar包:

由于项目中,客户要求将jar添加到framework里,以便所有的apk都可以调用这个jar。新手上路,一路茫然,网上查看了一些资料,各有不同,也许是android版本不一样的原因,里面有些文件修改的地方不同,下面是我自己总结各方资料,然后结合4.2.2版本的做法,仅供参考:

1.首先,在framework/base/下面建一个文件夹,名字可以随便取,但语义最好能够和jar相关,看了一目了然。(这里我定义一个文件夹:test)

2.在新建的文件夹(这里用test代替)里新建一个java文件夹,一个mk文件;mk、文件要自己写这里给个sample:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE:= 你定义的模块名字 比如:self.test.support
include $(BUILD_JAVA_LIBRARY)

3.在java文件夹中,添加目录结构及jar包命名空间的结构:如com.test.support.那么就要在java文件夹下添加com文件夹,然后在com文件夹下添加test文件夹,以此类推;添加完目录结构后,就将要添加的jar的java类文件放到最后一个文件夹中,对java命令编译的人一看就知道什么意思了。

4.在android/build/target/product目录下的generic_no_telephony.mk文件中PRODUCT_PACKAGES := \后面追加你定义的模块名字如“ self.test.support \“,不然android整体编译时不会自动去编译你定义的那个模块的。

5. 在android/build/target/product目录下的base.mk文件中PRODUCT_PACKAGES += \后面也同样追加你定义的模块名字如“ self.test.support \“;

在android/build/core目录下的pathmap.mk中的FRAMEWORKS_BASE_SUBDIRS := \后面追加你在base目录下添加的那个文件夹名 (见步骤一 如:test \)

6.在你要调用的apk的mk文件里添加LOCAL_JAVA_LIBRARIES :=   self.test.support ,同时在apk的mainifest.xml文件中添加 <uses-library android:name=" self.test.support " android:required="false"/>

最后 make clean //这步可以不执行,不然整个系统都要重新编 时间太长
 make update-api //这步要执行 
 make

---如果已编译好的jar放到framework下面:

1.将jar放到android/frameworks/ex/common 自己定义的一个libs文件夹下,因为原始jar包是java包并且关联一些so文件,所以需要重新打包成android 的jar包,所以要修改commom下的android.mk文件

LOCAL_PATH := $(call my-dir)


# Note: the source code is in java/, not src/, because this code is also part of
# the framework library, and build/core/pathmap.mk expects a java/ subdirectory.

include $(CLEAR_VARS)
LOCAL_MODULE := android-common
LOCAL_SDK_VERSION := 8

LOCAL_STATIC_JAVA_LIBRARIES += 第三方jar包的名字 (不含.jar后缀)\

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += 第三方jar包的名字 :libs/XXX.jar


#以下是关联的so文件,与jar放置在相同目录
LOCAL_SHARED_LIBRARIES := liblocSDK4 \
libsmartdialer_oem_module \
libsmartdialernet_oem_module \
libstlport_shared \


#开机加载相关,此文件需要另行添加,具体见下文
LOCAL_MODULE :=android.common.xml //这里定义的xml文件要自己在common下添加内容如下:


//android.commom.xml

<permissions>
<library name="android-common" //android-common:定义的
file="/system/framework/android-common.jar" /> //编译后生成的
</permissions>


LOCAL_SRC_FILES := \
     $(call all-java-files-under, java) \
     $(call all-logtags-files-under, java)
include $(BUILD_STATIC_JAVA_LIBRARY)


# Include this library in the build server's output directory
$(call dist-for-goals, droidcore, $(LOCAL_BUILT_MODULE):android-common.jar)


# Build the test package
# we can't build the test for apps only build, because android.test.runner is not unbundled yet.
ifeq ($(TARGET_BUILD_APPS),)
include $(call all-makefiles-under, $(LOCAL_PATH))
endif


后面的步骤和第一部分介绍的将类文件添加到framework下生成jar的方法相同。

以上只是个人在项目中的解决方案,仅供参考。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值