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 :=( (LOCAL_STATIC_JAVA_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES))strip
這一步完成後,程式碼可以順利編譯過了,不過在執行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>