天天看點

Android.mk引用aar檔案

正文:

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

國内的相關論壇也有同行遇到相同的問題,不過相關的解決方案并沒有,不過在stackoverflow有相關的解決方案,網址如下:

aar-support-in-android-mk: http://stackoverflow.com/questions/31205856/aar-support-in-android-mk

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進機器卻不起作用。

Android AAPT and Overlay: http://blog.csdn.net/sunny09290/article/details/20943261

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

另外一點是在make檔案中可以指定具體的manifest檔案:

LOCAL_MANIFEST_FILE := <manifest file path>

參考連結:

Android AAPT and Overlay: http://blog.csdn.net/sunny09290/article/details/20943261

aar-support-in-android-mk: http://stackoverflow.com/questions/31205856/aar-support-in-android-mk

Android4.4 Makefile屬性:LOCAL_AAPT_FLAGS的使用: http://blog.csdn.net/visionliao/article/details/43233743

繼續閱讀