Android.mk中的aar支持

11

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

可以在Android.mk中包含aar库。可以使用LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES和LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES_ARCHIVE来指定aar库。
3个回答

15

您应该将以下代码块添加到您的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要求。

请注意,还需要满足库所需的minSdkVersion要求,请在您的清单文件中进行设置。

返回:

请确保在您的清单文件中满足库所需的minSdkVersion要求。


1
我怀疑这个能否使用aar中的资源。 - Juude
有关于这个的解决方案吗? - bitristan
根据Google AOSP构建系统的实现,当您使用LOCAL_STATIC_JAVA_AAR_LIBRARIES而不是LOCAL_STATIC_JAVA_LIBRARIES时,唯一的区别在于资源。它将资源放在一边,并在包链接阶段将它们与您的包资源组合在一起。 - Kostiantyn Luzan
3
给其他人的提示- 请查看下面@qhdwangnan的答案,单独看这个答案是不足以解决问题的。 - bluefalcon
@SoulaimenK,你能提供你的Android.mk文件吗?也许你漏掉了什么东西? - Kostiantyn Luzan
显示剩余2条评论

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包名}。 你将得到两个R文件。它们具有相同的内容。一个的包名是主包,另一个是aar包。

有没有人有解决方案,可以在设置LOCAL_USE_AAPT:= true的情况下包含AAR库和资源? - Keith
有关如何在aar文件中使用资源的任何想法吗? - Ranjith KP
@qhdwangnan,您能否提供一个Android.mk文件的示例以便更好地理解... - Gowthaman M

3

我的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))

你使用了LOCAL_PREBUILT_STATIC_AAR_LIBRARIES - 这个变量不存在,在我的例子中使用了LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES。 - Kostiantyn Luzan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接