如何在 AOSP 项目中包含约束布局库
How to include constraint layout library in an AOSP project
我有一个现有的 android 应用程序,我想使用 Android.mk 在 AOSP(android 源代码树)中构建它。该应用程序使用 AOSP 源代码树 (AFAIK) 中未包含的约束布局。
我怎样才能满足这种依赖?包括其他支持库,例如 recyclerview、v4 等,但不包括约束布局。
我应该下载 lib aar 吗?如果是,我该如何 add/include?
或者我应该获取源代码(从哪里下载?)并在源代码树中的某处构建它?
在此先感谢您的帮助。
有多种方法可以解决您的问题。
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)
万一你不能让它工作(我没遇到过这个问题,but he did):
LOCAL_STATIC_JAVA_LIBRARIES := libconstraint-layout
include $(BUILD_PACKAGE)
其他,最后
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libconstraint-layout:libs/constraint-layout.aar
缺点:您必须使用 mma
或 mm -B
的 make 来构建您的代码,或者将 gradle
作为您的第二个开发构建系统。第二个选项可行,但要建立完整构建并在 out/
目录中构建 .apk
,您必须使用 make
.
构建它
3。添加 ConstraintLayout
如果您想要多个使用约束布局的应用程序,您可以将其作为预编译的新库模块添加 .aar
。
可以分别位于 'vendor/yourname/libs' 或 'your_dir_name/libs' 中的某处。
它类似于添加预构建的 .apk
:
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
这可以按如下方式完成:
下载 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
是正确的,除了应该使用 LOCAL_STATIC_JAVA_AAR_LIBRARIES
而不是 LOCAL_STATIC_JAVA_LIBRARIES
,因为约束布局是一个 aar 文件。
从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
更详细的回答:
我有一个现有的 android 应用程序,我想使用 Android.mk 在 AOSP(android 源代码树)中构建它。该应用程序使用 AOSP 源代码树 (AFAIK) 中未包含的约束布局。 我怎样才能满足这种依赖?包括其他支持库,例如 recyclerview、v4 等,但不包括约束布局。
我应该下载 lib aar 吗?如果是,我该如何 add/include? 或者我应该获取源代码(从哪里下载?)并在源代码树中的某处构建它?
在此先感谢您的帮助。
有多种方法可以解决您的问题。
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)
万一你不能让它工作(我没遇到过这个问题,but he did):
LOCAL_STATIC_JAVA_LIBRARIES := libconstraint-layout
include $(BUILD_PACKAGE)
其他,最后
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libconstraint-layout:libs/constraint-layout.aar
缺点:您必须使用 mma
或 mm -B
的 make 来构建您的代码,或者将 gradle
作为您的第二个开发构建系统。第二个选项可行,但要建立完整构建并在 out/
目录中构建 .apk
,您必须使用 make
.
3。添加 ConstraintLayout
如果您想要多个使用约束布局的应用程序,您可以将其作为预编译的新库模块添加 .aar
。
可以分别位于 'vendor/yourname/libs' 或 'your_dir_name/libs' 中的某处。
它类似于添加预构建的 .apk
:
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
这可以按如下方式完成:
下载 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
LOCAL_STATIC_JAVA_AAR_LIBRARIES
而不是 LOCAL_STATIC_JAVA_LIBRARIES
,因为约束布局是一个 aar 文件。
从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
更详细的回答: