出處: https://blog.csdn.net/jack_liu_2008/article/details/49764131
工作中碰到需要在framework中调用第三方的jar包中的函数
在源码环境下,按照下面的步骤即可实现:
1 在源码frameworks/opt/中创建文件夹demo, 将第三方的demo.jar拷贝拷贝到该目录下,同时在该目录下创建Android.mk (参考android2.1)
LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := myjar:demo.jar
include $(BUILD_MULTI_PREBUILT)
“myjar” 只是一个标示名,可以用任意命名替换,该名称在下面步骤中会用到
2 将demo.jar编译到源码环境中
执行命令:mmm framework/opt/demo/
编译之后会生成
out/target/product/xxx/obj/JAVA_LIBRARIES/demo_intermediates/javalib.jar
3 在framework加入demo.jar,需要修改framework/base/Android.mk:
# Build ext.jar
# ============================================================
# NOTICE notes for non-obvious sections
# apache-http - covered by the Apache Commons section.
ext_dirs := \
../../external/nist-sip/java \
../../external/apache-http/src \
../../external/tagsoup/src \
../../external/libphonenumber/java/src
ext_src_files := $(call all-java-files-under,$(ext_dirs))
ext_res_dirs := \
../../external/libphonenumber/java/src
# ==== the library =========================================
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(ext_src_files)
LOCAL_NO_STANDARD_LIBRARIES := true
LOCAL_JAVA_LIBRARIES := core
LOCAL_JAVA_RESOURCE_DIRS := $(ext_res_dirs)
LOCAL_STATIC_JAVA_LIBRARIES := myjar 增加该行,myjar是步骤1中的标示名
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := ext
LOCAL_DX_FLAGS := --core-library
include $(BUILD_JAVA_LIBRARY)
4 将demo.jar编译到framework中
执行命令: mmm framework/base/
会更新3个系统jar包
out/target/product/xxx/system/framework/ext.jar
out/target/product/xxx/system/framework/framework.jar
out/target/product/xxx/system/framework/framework2.jar
需要注意:
编译的中间文件会存在下列目录中
out/target/common/obj/JAVA_LIBRARIES/demo_intermediates/
out/target/common/obj/JAVA_LIBRARIES/ext_intermediates/xxx
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/xxx
out/target/common/obj/JAVA_LIBRARIES/framework2_intermediates/xxx
out/target/product/xxx/obj/JAVA_LIBRARIES/demo_intermediates/javalib.jar
out/target/product/xxx/obj/JAVA_LIBRARIES/ext_intermediates/javalib.jar
out/target/product/xxx/obj/JAVA_LIBRARIES/framework_intermediates/javalib.jar
out/target/product/xxx/obj/JAVA_LIBRARIES/framework2_intermediates/javalib.jar
如果调试中不想打包第三方的Jar包时,需要手动删除上述目录/文件,再重新编译。
经过上述步骤,就可以在framework调用demo.jar包中函数了。