我有一个现有的android应用程序,我想使用android.mk在aosp(android source树)内构建该应用程序。该应用使用未包含在AOSP源树(AFAIK)中的约束布局。我如何满足这种依赖性?包括其他支持LIB,例如Recyclerview,V4等,但没有相反的布局。
我应该下载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
cons:您必须使用mma
或mm -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文件。
这可以如下完成:
下载约束 - layout.aar和约束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