APK中引用第三方库文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了APK中引用第三方库文件相关的知识,希望对你有一定的参考价值。
注意以下操作是在源码中进行,即修改android.mk,并非借助IDE(AndroidStudio)的情形。
引用第三方JAR包
1,在源Android.mk里面加参数,使其编译为JAR包,然后mm编译
...
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
include $(BUILD_JAVA_LIBRARY)
...
2,提取class.jar选用
把common下面的jar包文件(out\target\common\obj\JAVA_LIBRARIES\xxxx_intermediates\class.jar)放到APP的目录中
3,在APK中添加引用第三方JAR包
在APK的编译目录中,添加libs/xxx.jar文件。并修改其Android.mk
..
LOCAL_STATIC_JAVA_LIBRARIES = xxx
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xxx:libs/xxx.jar #实际目录
include $(BUILD_MULTI_PREBUILT)
...
另外,如果JAR包已经编译进系统目录,比如system/framework/framework.jar,引用该文件只需要在Android.mk
LOCAL_JAVA_LIBRARIES := framework
相当于动态链接使用。
引用第三方AAR文件
何为aar文件,aar包与jar包类似,区别就是aar文件包含Android的资源文件,如:布局、样式、图片等,如果按照源码中jar的引用方式会遇到编译不过的问题,提示找不到相关的资源文件。我们知道,就framework.jar是在frameworks/base/Android.mk定义编译的
...
LOCAL_MODULE := framework
include $(BUILD_JAVA_LIBRARY)
...
但framework里面引用很多资源文件,却编译成framework-res.apk,这是在frameworks/base/core/res/Android.mk定义的。
...
LOCAL_PACKAGE_NAME := framework-res
include $(BUILD_PACKAGE)
...
但有些情况,需要把jar文件和资源文件打包成一起,即为aar文件,Android.mk一般这样编写
1,编写源AAR文件,修改Android.mk如下
TODO
2,提取AAR文件
同样是在out/target/common目录下提取。
3,在APK的Android.mk添加第三方AAR
创建libs/xxx.arr文件,修改Android.mk如下
...
LOCAL_AAPT_FLAGS += --auto-add-overlay \
--extra-packages xxx
LOCAL_STATIC_JAVA_AAR_LIBRARIES:= xxx
...
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += xxx:libs/xxx.aar
include $(BUILD_MULTI_PREBUILT)
引用第三方SO
第一种情况,符合JNI规范的SO
这种SO,是符合JNI规范,JAVA文件可直接调用。
这种情况,一般会提供一个libxxx_jni.so和一个NativeXxx.java的静态类。这个静态类会直接通过Syste.LoadLibrary(“xxx_jni”)来调用Native的文件,而自己的静态方法即为JAVA文件,可以直接调用。
第二种情况,不符合JNI规范的SO
这种SO即为普通C++或者C编译的so库文件,如果让JAVA文件直接调用,需要对其进行JNI封装。
这种情况一般提供一个libxxx.so和一个xxx.头文件
注:示例请参考前面文章Android JNI分析的分析。
以上是关于APK中引用第三方库文件的主要内容,如果未能解决你的问题,请参考以下文章
解决未能加载文件或程序集“Newtonsoft.Json ...."或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)(代码片段