Как использовать компоновку с ограничениями во время сборки AOSP без включения внешних .aar и .jar

Я пытаюсь создать свое приложение для Android на основе Java, построив его как модуль внутри источника AOSP. Мое приложение использует android.support.constraint.ConstraintLayout. Но я не нашел прямого способа включить зависимость "ограничение-макет" в свой Android.mk.

Я поместил свой проект в AOSP_ROOT/packages/apps и попробовал с этим Android.mk:

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

LOCAL_MODULE_TAGS := optional
LOCAL_PRIVILEGED_MODULE := true                 
LOCAL_PACKAGE_NAME := MyApp
LOCAL_PRIVATE_PLATFORM_APIS := true

LOCAL_SRC_FILES := $(call all-java-files-under, java) 
LOCAL_MANIFEST_FILE := AndroidManifest.xml

LOCAL_AAPT_FLAGS := \
    --auto-add-overlay \
    --extra-packages android.support.constraint

LOCAL_STATIC_JAVA_LIBRARIES := \
    android-common \
    android-support-v4 \
    android-support-constraint-layout-solver

LOCAL_STATIC_JAVA_AAR_LIBRARIES := \
    android-support-constraint-layout

include $(BUILD_PACKAGE)

Но это приводит к ошибке сборки:

ниндзя: ошибка: 'out / target / common / obj / JAVA_LIBRARIES / android-support-constraint-layout_intermediates / aar / classes.jar', требуется 'out / target / common / obj / APPS / MyApp_intermediates / AndroidManifest.xml', отсутствует и нет известного правила, чтобы сделать это 20:57:54 ниндзя потерпел неудачу с: статус выхода 1

Насколько я понимаю, он ищет classes.jar, который может быть построен из файла .aar, но его нет. Однако ответ здесь решает проблему: Как включить библиотека компоновки ограничений в проекте AOSP

Но проблема в том, что этот ответ предлагает добавить внешние constraint-layout.aar и constraint-layout-solver.jar в каталог моего проекта libs.

Мой вопрос: можно ли добавить поддержку constraint-layout в мой проект, используя встроенную библиотеку внутри AOSP, без добавления внешних .aar и .jar в мой проект?


person UmFraWJ1bCBJc2xhbQ    schedule 25.07.2020    source источник


Ответы (1)


В любом случае, я нашел решение. Нет необходимости включать constraint-layout в проект libs в качестве дополнительной библиотеки.

Чтобы решить проблему, в Android.mk нам нужно добавить одну дополнительную строку:

LOCAL_USE_AAPT2 := true

А также используйте LOCAL_STATIC_ANDROID_LIBRARIES вместо LOCAL_STATIC_JAVA_AAR_LIBRARIES.

Это рабочий Android.mk:

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

LOCAL_MODULE_TAGS := optional
LOCAL_PRIVILEGED_MODULE := true                 
LOCAL_PACKAGE_NAME := MyApp
LOCAL_PRIVATE_PLATFORM_APIS := true

LOCAL_USE_AAPT2 := true

LOCAL_SRC_FILES := $(call all-java-files-under, java) 
LOCAL_MANIFEST_FILE := AndroidManifest.xml

LOCAL_AAPT_FLAGS := \
    --auto-add-overlay \
    --extra-packages android.support.constraint

LOCAL_STATIC_ANDROID_LIBRARIES:= \
    android-support-constraint-layout

LOCAL_STATIC_JAVA_LIBRARIES := \
    android-common \
    android-support-v4 \
    android-support-constraint-layout-solver

include $(BUILD_PACKAGE)
person UmFraWJ1bCBJc2xhbQ    schedule 25.07.2020