AOSP 8.1.0环境下基于Gradle构建自定义Settings应用的问题咨询
问题解答
1. 带Android.mk时出现ConstraintLayout资源属性错误
这个错误是因为AOSP的Make构建系统(Android.mk)不会自动处理aar依赖的资源,layout_constraintStart_toStartOf是ConstraintLayout特有的属性,你的libs目录里虽然有对应的aar,但Android.mk没配置正确的依赖和资源合并规则。解决办法:
- 在Android.mk中添加
LOCAL_STATIC_JAVA_AAR_LIBRARIES,把libs下的5个aar都列进去,示例:LOCAL_STATIC_JAVA_AAR_LIBRARIES += constraintlayout lib1 lib2 lib3 lib4 lib5 - 配置AAPT的资源搜索路径,将aar中的资源目录纳入,或者用
LOCAL_RESOURCE_DIR指定应用资源和所有aar的资源路径,示例:LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \ $(LOCAL_PATH)/libs/constraintlayout/res \ # 依次添加其他aar的res路径 - 为每个aar声明预构建模块,比如在同目录下为每个aar添加单独的声明块:
include $(CLEAR_VARS) LOCAL_MODULE := constraintlayout LOCAL_SRC_FILES := libs/constraintlayout.aar include $(PREBUILT_AAR)
2. 仅保留build.gradle时编译通过但ROM无应用
AOSP默认以Make作为顶层构建系统,纯Gradle模块不会自动被纳入ROM镜像打包流程。要让应用出现在ROM里,需要:
- 在对应设备的device.mk文件(比如
device/<厂商>/<机型>/device.mk)中添加:PRODUCT_PACKAGES += MySettings - 在AOSP根目录的
settings.gradle中,将你的应用模块纳入Gradle项目:include ':packages:apps:MySettings' - 确保应用的
build.gradle使用AOSP兼容的配置,比如指定和AOSP 8.1匹配的compileSdkVersion,使用com.android.application插件。
3. frameworks/support/samples的应用仅靠build.gradle被Make识别的原因
这些sample应用是Android Support Library的一部分,通过AOSP的顶层构建脚本被纳入了构建体系:
- 在
frameworks/support/settings.gradle中,已经通过include语句将这些sample模块添加到Gradle项目中; - AOSP的Make系统会触发Gradle构建Support Library相关模块,对应的makefile(比如
frameworks/support/Android.mk)会调用Gradle任务,将这些samples的构建产物纳入整体流程; - 这些samples大多依赖Support Library的核心模块,Make系统在构建核心库时会自动关联处理它们的构建。
内容的提问来源于stack exchange,提问作者天枢破军
相关产品推荐
相关产品推荐

