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



我有一个现有的android应用程序,我想使用android.mk在aosp(android source树)内构建该应用程序。该应用使用未包含在AOSP源树(AFAIK)中的约束布局。我如何满足这种依赖性?包括其他支持LIB,例如Recyclerview,V4等,但没有相反的布局。

我应该下载lib aar,如果是,我该如何添加/包括它?还是我应该得到源(在哪里下载?)并在源树中的某个地方构建它?

事先感谢您的任何帮助。

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

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:您必须使用mmamm -B制造或将gradle作为您的第二个开发系统来构建代码。第二个选项将起作用,但要建立完整的构建并要在out/目录中内置.apk,则必须使用make构建。

3。添加ConstraintLayout

如果您想拥有几个使用约束布局的应用程序,则可以将其添加为新的库模块,作为预编译的.aar。可以分别在"供应商/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

另外,您可以在prebuilds/中添加ConstraintLayout.aar,因为它最终将有一天会在那里。

关于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构建过程中使用约束 - 不包括外部.aar和.jar和.jar

https://stackoverflow.com/a/46414919/9237859是正确的,除非使用LOCAL_STATIC_JAVA_AAR_LIBRARIES代替LOCAL_STATIC_JAVA_LIBRARIES,因为Condaintaint-layout是AAR文件。

<</p> <</p <</p <<//div>

这可以如下完成:

  1. 下载约束 - layout.aar和约束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