Android.mk 中的 aar 支持

aar support in Android.mk

我现在正在做 android 自定义 ROM 开发。 aosp 的构建系统基于 Android.mk,但我想包含一些 aar 库,是否可以在 Android.mk 中包含 aar 库?

您应该将以下块添加到您的 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)

另请注意将库要求的 minSdkVersion 满足您的清单文件。

Kostiantyn Luzan 的回答有问题。编译后,aar 中的资源会添加到我的主包的R 文件中,但不会添加到aar 包的R 文件中。比如aar的包名是my.aar,主工程的包名是my.main。 aar 有一个名为 "string_in_aar" 的字符串。编译后,字符串id是my.main.R.string_in_aar而不是my.aar.R.string_in_aar。这使得 apk 崩溃,因为 aar 中的代码使用 my.aar.R.string_in_aar.

解决方法是使用: LOCAL_AAPT_FLAGS += --extra-packages {aar 包名称}。 您将获得两个 R 文件。他们有一些内容。一个是主包,一个是aar包。

我的Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat
LOCAL_STATIC_JAVA_LIBRARIES += android-common

LOCAL_SRC_FILES := $(call all-java-files-under, app/src)

LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/app/src/main/res
LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/appcompat/res

LOCAL_MANIFEST_FILE :=  app/src/main/AndroidManifest.xml

LOCAL_PACKAGE_NAME := PackageName

LOCAL_SDK_VERSION := current

LOCAL_PROGUARD_FLAG_FILES := app/proguard-rules.pro

LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat
LOCAL_AAPT_FLAGS += --extra-packages com.exp.librairy

LOCAL_STATIC_JAVA_AAR_LIBRARIES := explibrairy

include $(BUILD_PACKAGE)

#Build aar libs
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_AAR_LIBRARIES := explibrairy:project/build/outputs/aar/explibrairy-debug.aar
include $(BUILD_MULTI_PREBUILT)

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