10

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

4

3 回答 3

14

您应该将以下块添加到您的 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 满足到清单文件中。

于 2015-12-30T18:49:02.827 回答
8

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 package name}。你会得到两个 R 文件。他们有一些内容。一个是主包,一个是aar包。

于 2016-04-18T08:17:54.607 回答
2

我的安卓.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))
于 2019-02-15T09:26:04.690 回答