Как включить .aar в AOSP с android.mk - PullRequest
0 голосов
/ 27 июня 2018

Мне нужно собрать приложение с android.mk в дереве сборки aosp. У меня есть пользовательская библиотека .arr, которая находится в следующей папке apps / libs / mylib.aar

Кто-нибудь может сказать мне, как включить aar в сборку Android AOS. Я уже попробовал следующие методы, описанные здесь Ссылка Stackoverflow для сборки aosp с .aar lib

Android.mk выглядит как

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

Я проверил разные подходы для создания одного и того же.

1 Ответ

0 голосов
/ 21 ноября 2018

Я знаю, что опоздал, но все же стоит поделиться этой информацией. LOCAL_STATIC_JAVA_AAR_LIBRARIES поддержка AAPT2 была прервана в какой-то момент. Поэтому, даже если вы добавите свою библиотеку, как описано выше, ресурсы из aar не будут связаны.

из истории мерзавцев AOSP:

30 октября 2014 г. Добавить поддержку предварительно созданных AAR. Aars были распакованы в /.../ промежуточные * каталоги и связаны с модулями AOS.

5 декабря 2015 г. Поддержка для сборки с AAPT2 Как вы можете видеть в core / android_manifest.mk: 26 , связывать распакованные файлы aars больше не нужно, поскольку AAPT2 поддерживает прямое соединение с массивами.

Но, к сожалению, они не были правильно добавлены как --extra-packages.

Ошибка была исправлена ​​в android-p-preview-5 .

Если вы все еще разрабатываете для Android 8 или 8.1, пожалуйста, добавьте эти изменения вручную или выберите их в своем дереве. Отлично сработало для меня.

UPD 2018-11-28

Точные шаги, чтобы исправить это для Android 8.1 и ранее:

1) исправление cherry-pick 5 дек. 2015 г. Поддержка для сборки с AAPT2 из aosp

2) в build / core / prebuilt_internal.mk: 593 добавить параметр --auto-add-overlay

$(my_res_package): PRIVATE_AAPT_FLAGS := --static-lib --no-static-lib-packages --auto-add-overlay

3) Поскольку RenderScript был реорганизован намного позже, вы должны явно определить свой модуль aar:

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)

Отказ от ответственности: это довольно хакерский обходной путь, который сработал для меня. Из-за нехватки времени и срочной необходимости поддержки старых версий клиентов, я мог пропустить некоторые варианты использования.

...