如何在AOSP项目中引入约束布局库

5
我有一个现有的Android应用程序,我想使用Android.mk在AOSP(Android源代码树)中构建它。该应用程序使用了约束布局,但是约束布局不包含在AOSP源代码树中(据我所知)。如何满足这个依赖关系?其他支持库已经包括,例如recyclerview、v4等,但没有约束布局。
我应该下载lib aar吗?如果是的话,如何添加/包含它?还是应该获取源代码(从哪里下载?)并在源代码树的某个地方构建它?
非常感谢您的帮助。
4个回答

7

有多种方法可以解决你的问题。

1. 添加预编译的 .apk

您不需要将源代码放在 AOSP 树中。 只需添加您的 .apk 文件,将其放置在 packages/apps/YourAppvendor/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

Cons: 您需要使用make(通过mma或mm-B)构建代码,或者将gradle作为第二个构建系统进行开发。第二个选项可以工作,但要建立完整的构建并在out/目录中构建您的.apk,您需要使用make进行构建。
3. 添加约束布局
如果您想要有多个应用程序使用约束布局,您可以将其作为新的库模块添加为预编译的.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


约束布局 AAR 文件可以在这里找到:https://mvnrepository.com/artifact/com.android.support.constraint/constraint-layout/1.0.2 - Matt

3

从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文件


2

1
这可以通过以下步骤完成:
  1. 下载constraint-layout.aar和constraint-layout-solve.jar文件,并将这些文件放入lib文件夹中。

  2. 将以下内容添加到您的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接