如何在AOSP项目中包含约束布局库

时间:2017-09-25 20:37:47

标签: android android-source

我有一个现有的Android应用程序,我想使用Android.mk在AOSP(android源代码树)中构建。该应用程序使用约束布局,该布局未包含在AOSP源代码树(AFAIK)中。 我怎样才能满足这种依赖性呢?包括其他支持库,例如recyclerview,v4等,但不包括约束布局。

我应该下载lib aar,如果是,我该如何添加/包含它? 或者我应该获取源代码(在哪里下载?)并在源代码树中的某处构建它?

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

有几种方法可以解决您的问题。

<强> 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/并添加到您的{ {1}}类似于:

Android.mk

如果你不能使它工作(我还没有遇到这个问题,but he did):

  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 mma制作代码,或者使用mm -B作为开发的第二个构建系统。第二个选项可行,但要建立完整版本并使用gradle内置.apk目录,您必须使用out/构建它。

第3。添加ConstraintLayout

如果您想要使用约束布局的多个应用程序,可以将其作为预编译的make添加为新的库模块。 可以在'vendor / yourname / libs&#39;中的某个地方或者&#39; your_dir_name / libs&#39;分别。 它类似于添加预先构建的.aar(我没有像这样添加任何.apk,因此我没有对此进行测试,并且可能包含错误!):

.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/的好主题:https://wladimir-tm4pda.github.io/porting/build_cookbook.html

答案 1 :(得分:0)

这可以按照以下步骤完成

  1. 下载constraint-layout.aar和constraint-layout-solve.jar并将这些文件放在lib文件夹中。

  2. 将以下内容添加到您的Android.mk文件中

    LOCAL_STATIC_JAVA_LIBRARIES + =约束布局 LOCAL_STATIC_JAVA_AAR_LIBRARIES + =约束布局求解器

    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES:=约束布局:libs / constraint-layout.aar

    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES:=约束-放置-求解器:libs / constraint-layout-solver.jar

答案 2 :(得分:0)

https://stackoverflow.com/a/46414919/9237859是正确的,但应使用LOCAL_STATIC_JAVA_AAR_LIBRARIES代替LOCAL_STATIC_JAVA_LIBRARIES,因为约束布局是aar文件。

答案 3 :(得分:0)

从Android 9.0开始,无需在.aar的项目中分别添加.jarconstraint-layout。我们可以使用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

更多详细的答案:How to use constraint-layout during AOSP build without including external .aar and .jar