源码编译:Android.mk关联AAR和Jar文件

本文详细介绍了在Android.mk文件中如何正确配置静态Java库和aar包,包括如何指定真实的jar和aar包路径,以及如何关联这些库到项目中。

LOCAL_STATIC_JAVA_LIBRARIES := android-support-v7-appcompat \
eventbus\
custom-core\
demo-gson\
rxjava \
ofilm-commonipc\
okhttp3\
logging\
okio\
retrofit\
adapter\
converter\
rxclasses\
reactive\
converter-gson

LOCAL_STATIC_JAVA_AAR_LIBRARIES := widgetLibs \
h5sdk \
httpsdk


LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := custom-core:app/libs/core-3.3.0.jar \
                                        demo-gson:app/libs/gson-2.7.jar \
                                        rxjava:app/libs/rxjava-2.2.9.jar \
                                        okhttp3:app/libs/okhttp-3.11.0.jar\
                                        logging:app/libs/logging-interceptor-3.11.0.jar\
                                        okio:app/libs/okio-1.14.0.jar\
                                        retrofit:app/libs/retrofit-2.4.0.jar\
                                        adapter:app/libs/adapter-rxjava2-2.4.0.jar\
                                        converter:app/libs/converter-gson-2.4.0.jar\
                                        rxclasses:app/libs/classes.jar\
                                        reactive:app/libs/reactive-streams-1.0.2.jar\
                                        converter-gson:app/libs/converter-gson-2.4.0.jar \
                                        widgetLibs:app/libs/WidgetLibs-release.aar \
                                        h5sdk:app/libs/h5sdk.aar \
                                        httpsdk:app/libs/httpsdk.aar

include $(BUILD_MULTI_PREBUILT)
include $(call all-makefiles-under, $(LOCAL_PATH))

在android.mk文件中,LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES 变量下加入真实的jar包和aar的全路径,然后对每个jar和aar包关联一个源码编译的包名,LOCAL_STATIC_JAVA_LIBRARIES变量下加入jar包,LOCAL_STATIC_JAVA_AAR_LIBRARIES变量下加入aar包,这样就关联了jar包和aar包!

 

 

 

 

 

### 如何在 Android.mk 文件中正确配置并引入 aar 文件Android.mk 文件中引入 aar 文件,需要通过特定的配置来确保 aar 文件中的资源、Java 代码以及 so 文件能够被正确打包到最终的 APK 中。以下是具体的实现方法注意事项: #### 1. 配置 `LOCAL_STATIC_JAVA_AAR_LIBRARIES` 在 Android.mk 文件中,使用 `LOCAL_STATIC_JAVA_AAR_LIBRARIES` 变量来指定需要引入的 aar 文件[^2]。例如: ```makefile LOCAL_STATIC_JAVA_AAR_LIBRARIES := mylibrary ``` 这里的 `mylibrary` 是 aar 文件的名称(不包含 `.aar` 后缀)。需要确保 aar 文件已经放置在正确的目录下,并且通过 `include $(BUILD_MULTI_PREBUILT)` 来预构建该库。 #### 2. 预构建 aar 文件 为了使 aar 文件能够被识别,需要在 Android.mk 文件中添加预构建步骤。以下是一个完整的示例: ```makefile include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := mylibrary:libs/mylibrary.aar include $(BUILD_MULTI_PREBUILT) ``` 上述代码中,`mylibrary` 是 aar 文件的名称,`libs/mylibrary.aar` 是 aar 文件的实际路径。通过这种方式,系统会将 aar 文件识别为一个预构建的静态 Java 库。 #### 3. 确保资源文件被正确打包 aar 文件通常包含资源文件(如 XML 文件、图片等),这些资源需要通过 `LOCAL_RESOURCE_DIR` 变量进行配置。例如: ```makefile LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res ``` 如果 aar 文件本身带有资源,则需要确保这些资源不会被忽略。可以通过检查 aar 文件的 `R.txt` 文件来验证资源是否正确加载。 #### 4. 处理 so 文件 如果 aar 文件中包含 so 文件,需要特别注意这些文件是否会被正确打包到 APK 中。通常情况下,so 文件位于 aar 文件的 `jni` 目录下。可以通过以下方式确保 so 文件被正确处理: - 在 Android.mk 文件中添加 `LOCAL_SRC_FILES` 或 `LOCAL_PREBUILT_LIBS` 来显式声明 so 文件的位置。 - 如果 so 文件未被打包,可以尝试手动复制 so 文件到项目的 `libs` 目录下,并通过以下方式引入: ```makefile include $(CLEAR_VARS) LOCAL_MODULE := mynative LOCAL_SRC_FILES := libs/armeabi-v7a/libmynative.so include $(PREBUILT_SHARED_LIBRARY) ``` #### 5. 示例完整配置 以下是一个完整的 Android.mk 文件示例,展示了如何引入 aar 文件及其资源 so 文件: ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mynative LOCAL_SRC_FILES := libs/armeabi-v7a/libmynative.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_STATIC_JAVA_AAR_LIBRARIES := mylibrary LOCAL_MODULE_TAGS := optional LOCAL_CERTIFICATE := platform LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res LOCAL_PACKAGE_NAME := MyApplication include $(BUILD_PACKAGE) include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := mylibrary:libs/mylibrary.aar include $(BUILD_MULTI_PREBUILT) ``` #### 注意事项 - 确保 aar 文件的路径正确无误。 - 如果 aar 文件依赖其他 jar 文件或 so 文件,需要单独引入这些依赖[^4]。 - 某些情况下,可能需要调整 `build.gradle` 文件以支持 aar 文件的引入[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值