1. 程式人生 > >Android.mk引用aar檔案

Android.mk引用aar檔案

正文:

最近遇到一個問題,在更改Android的系統應用時,要引用一個aar檔案。之前引用的主要是jar包,而aar檔案包含Android的資原始檔,如:佈局、樣式、圖片等,如果按照原始碼中jar的引用方式會遇到編譯不過的問題,提示找不到相關的資原始檔。

LOCAL_STATIC_JAVA_AAR_LIBRARIES:= <aar alias>
.
.
.
include $(BUILD_PACKAGE)

include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := <aar alias>:libs/<lib
file>.aar include $(BUILD_MULTI_PREBUILT)

其中,LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := <aar alias>:libs/<lib file>.aar 也可以如下面這樣寫:

include $(CLEAR_VARS)
LOCAL_MODULE := <aar alias>
LOCAL_SRC_FILES := <lib file>.aar
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_SUFFIX
:= $(COMMON_JAVA_PACKAGE_SUFFIX) LOCAL_BUILT_MODULE_STEM := javalib.jar include $(BUILD_PREBUILT)

這裡主要是LOCAL_STATIC_JAVA_AAR_LIBRARIES,剩下的和jar包大同小異,注意在manifest檔案裡minSdkVersion要滿足aar檔案的要求。

搜尋Android原始碼,也可以發現:

#LOCAL_STATIC_JAVA_AAR_LIBRARIES are special LOCAL_STATIC_JAVA_LIBRARIES
LOCAL_STATIC_JAVA_LIBRARIES := (

strip(LOCAL_STATIC_JAVA_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES))

這一步完成後,程式碼可以順利編譯過了,不過在執行apk時如果使用到aar檔案裡面的資源可能會crash,所以還需要加上以下語句:

LOCAL_AAPT_FLAGS := \
  --auto-add-overlay \
  --extra-packages <aar package name>

關於LOCAL_AAPT_FLAGS,可以參考以下網址,在開發Android系統應用時可能會遇到和這個相關的一些小坑,比如修改完相關程式碼後,push進機器卻不起作用。

這裡把相關aar檔案的資源打包到我們的apk裡,apk即可正常執行。

另外一點是在make檔案中可以指定具體的manifest檔案:
LOCAL_MANIFEST_FILE := <manifest file path>

參考連結: