首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AOSP中加入.aar与android.mk

如何在AOSP中加入.aar与android.mk
EN

Stack Overflow用户
提问于 2018-06-27 09:10:38
回答 1查看 4.8K关注 0票数 4

我需要在aosp构建树中使用android.mk构建一个应用程序。我随身带了一个定制的.arr库,它驻留在下面的文件夹app/libs/mylib.aar中

任何人都可以告诉我如何将aar包含在android构建中。我已经尝试了以下方法,在这里描述用.aar库构建aosp的Stackoverflow链接

Android.mk看起来就像

代码语言:javascript
复制
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS  := optional
LOCAL_PACKAGE_NAME := sample
LOCAL_CERTIFICATE  := platform

# SRC files
#=====================================================================
LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/aidl
LOCAL_SRC_FILES := $(call all-java-files-under, src) \
                   $(call all-Iaidl-files-under, aidl)

# RES files
#=====================================================================
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_RESOURCE_DIR +=prebuilts/sdk/current/extras/constraint-layout/res
LOCAL_RESOURCE_DIR +=frameworks/support/v7/appcompat/res
LOCAL_RESOURCE_DIR +=frameworks/support/design/res
LOCAL_RESOURCE_DIR +=frameworks/support-v4/res

LOCAL_MANIFEST_FILE :=AndroidManifest.xml
LOCAL_USE_AAPT2 := true
LOCAL_PROGUARD_ENABLED := disabled

# static .aar files
#=====================================================================
LOCAL_STATIC_JAVA_AAR_LIBRARIES:= mylib.aar

#Adding aapt packages
#=====================================================================
LOCAL_AAPT_FLAGS := --auto-add-overlay

LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat 
LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.recyclerview
LOCAL_AAPT_FLAGS += --extra-packages android.support.annotations
LOCAL_AAPT_FLAGS += --extra-packages android.support.v4
LOCAL_AAPT_FLAGS += --extra-packages android.support.design
LOCAL_AAPT_FLAGS += --extra-packages com.sample.mylib

#Include Static libraries
#=====================================================================
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v7-appcompat
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v7-recyclerview
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-gridlayout
LOCAL_STATIC_JAVA_LIBRARIES += android-support-annotations
LOCAL_STATIC_JAVA_LIBRARIES += android-support-design
LOCAL_STATIC_JAVA_LIBRARIES += gson
LOCAL_STATIC_JAVA_LIBRARIES += zxing
LOCAL_STATIC_JAVA_LIBRARIES += picasso

#Set out path
#=====================================================================
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_APPS)

#For build the application package
#=====================================================================
include $(BUILD_PACKAGE)

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := mylib:libs/mylib.aar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += gson:libs/gson-2.8.1.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += zxing:libs/core-3.3.3.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += picasso:libs/picasso.jar

include $(BUILD_MULTI_PREBUILT)

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

我检查了不同的方法来构建相同的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-21 12:34:38

我知道我已经太迟了,但还是值得分享这些信息。LOCAL_STATIC_JAVA_AAR_LIBRARIES对AAPT2的支持在一定程度上被破坏。因此,即使您将库添加到上面的数据库中,aar的资源也不会链接。

来自AOSP的git历史:

2014年10月30日,增加对预先构建的AAR的支持。 Aars被解压到out/./中间层* and中,并链接到aosp模块。

正如您在2015年12月5日支持使用AAPT2进行构建中所看到的,链接未打包的aars不再是必要的,因为AAPT2支持直接链接到数组中。

但不幸的是,它们没有正确地作为--extra-packages添加。

这个bug是用安卓-p预览-5修复的。

如果您还在为Android8或8.1开发,请手动添加这些更改,或者在树中选择它们。对我来说是完美的。

UPD 2018-11-28

修复Android8.1及更早版本的确切步骤:

1)支持使用aosp的AAPT2构建

( 2)在build/core/预置内部. in中:593添加参数-自动添加-覆盖

代码语言:javascript
复制
$(my_res_package): PRIVATE_AAPT_FLAGS := --static-lib --no-static-lib-packages --auto-add-overlay

3)由于RenderScript后来被重构,您必须明确地定义您的aar模块:

代码语言:javascript
复制
include $(CLEAR_VARS)
LOCAL_MODULE := my-library-module
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := my-library-module.aar
# Provide resources directory in order to compile them, enable AAPT2 for this module
LOCAL_RESOURCE_DIR := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MODULE),,COMMON)/aar/res)
LOCAL_USE_AAPT2 := true
# if LOCAL_RENDERSCRIPT_TARGET_API >= 21, resources won't get compiled. Shouldn't affect anything else
LOCAL_RENDERSCRIPT_TARGET_API := 20
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX)
LOCAL_BUILT_MODULE_STEM := javalib.jar
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)

免责声明:--这是一个对我有用的讨厌的解决办法。由于缺乏时间和迫切需要支持旧的客户端版本,我可能错过了一些用例。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51058787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档