我应该下载lib aar吗?如果是的话,如何添加/包含它?还是应该获取源代码(从哪里下载?)并在源代码树的某个地方构建它?
非常感谢您的帮助。
有多种方法可以解决你的问题。
1. 添加预编译的 .apk
您不需要将源代码放在 AOSP 树中。
只需添加您的 .apk
文件,将其放置在 packages/apps/YourApp
、vendor/yourname/packages/apps/YourApp
或甚至是 your_dir_name/packages/apps/YourApp
中,并为构建系统创建一个 Android.mk
文件来确定您的应用程序。
Android.mk
的格式如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := YourApplication # your .apk name
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
优点:您可以使用gradle
构建项目。
2. 将源代码添加到AOSP
如果您仍想将源代码放置在packages/apps
中并在那里构建它,您可以将ConstrainsLayout
放置到项目的libs/
目录中,并向Android.mk
添加以下内容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# List of static libraries to include in the package
LOCAL_STATIC_JAVA_LIBRARIES := constraint-layout
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK
LOCAL_PACKAGE_NAME := YourApplication
# Tell it to build an APK
include $(BUILD_PACKAGE)
如果您无法使其工作(我没有遇到这个问题,但他遇到了:点击这里):
LOCAL_STATIC_JAVA_LIBRARIES := libconstraint-layout
include $(BUILD_PACKAGE)
其他内容,最后
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libconstraint-layout:libs/constraint-layout.aar
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := constraint-layout
LOCAL_SRC_FILES := $(LOCAL_MODULE).aar
LOCAL_MODULE_SUFFIX := .aar
include $(BUILD_PREBUILT)
接下来,在您的应用程序的Android.mk
中,您需要添加:
LOCAL_STATIC_JAVA_LIBRARIES := constraint-layout
作为替代,您可以将 ConstraintLayout
的 .aar
添加到 prebuilds/
,因为它最终将在某一天出现在那里。
关于 Android.mk
有一个好的主题: https://wladimir-tm4pda.github.io/porting/build_cookbook.html
从Android 9.0开始,在项目中使用constraint-layout
时,不需要分别添加.aar
和.jar
。我们可以使用AOSP中内置的constraint-layout
库。
我们需要在Android.mk
中添加一行额外的代码:
LOCAL_USE_AAPT2 := true
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages android.support.constraint
LOCAL_STATIC_ANDROID_LIBRARIES += android-support-constraint-layout
LOCAL_STATIC_JAVA_LIBRARIES += android-support-constraint-layout-solver
更详细的答案请参考:如何在AOSP构建过程中使用constraint-layout,而不包含外部的.aar和.jar文件
https://dev59.com/MaXja4cB1Zd3GeqPRnYe#46414919 是正确的,除了应该使用 LOCAL_STATIC_JAVA_AAR_LIBRARIES
而不是 LOCAL_STATIC_JAVA_LIBRARIES
,因为 constraint-layout 是一个 aar 文件。
下载constraint-layout.aar和constraint-layout-solve.jar文件,并将这些文件放入lib文件夹中。
将以下内容添加到您的Android.mk
文件中
LOCAL_STATIC_JAVA_AAR_LIBRARIES += constraint-layout
LOCAL_STATIC_JAVA_LIBRARIES += constraint-layout-solver
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := constraint-layout:libs/constraint-layout.aar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := constraint-layput-solver:libs/constraint-layout-solver.jar