我有一个现有的Android应用程序,我想使用Android.mk在AOSP(android源代码树)中构建。该应用程序使用约束布局,该布局未包含在AOSP源代码树(AFAIK)中。 我怎样才能满足这种依赖性呢?包括其他支持库,例如recyclerview,v4等,但不包括约束布局。
我应该下载lib aar,如果是,我该如何添加/包含它? 或者我应该获取源代码(在哪里下载?)并在源代码树中的某处构建它?
提前感谢您的帮助。
答案 0 :(得分:4)
有几种方法可以解决您的问题。
<强> 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/
并添加到您的{ {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)
这可以按照以下步骤完成
下载constraint-layout.aar和constraint-layout-solve.jar并将这些文件放在lib文件夹中。
将以下内容添加到您的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
的项目中分别添加.jar
和constraint-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