AOSP 版本是
8.1.0
。
我有一个名为
Settings
的 Android 应用程序。我使用Android Studio进行开发并将其推入packages/apps/MySettings
。
像这样的目录
MySettings
├── AndroidManifest.xml
├── Android.mk
├── build.gradle
├── libs
├── res
└── src
Android.mk
这样
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := MySettings
LOCAL_MODULE_TAGS := optional
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := false
LOCAL_STATIC_JAVA_LIBRARIES := appcompat-1.1.0
LOCAL_STATIC_JAVA_LIBRARIES += BaseRecyclerViewAdapterHelper-2.9.46
LOCAL_STATIC_JAVA_LIBRARIES += constraintlayout-1.1.3
LOCAL_STATIC_JAVA_LIBRARIES += material-1.1.0
LOCAL_STATIC_JAVA_LIBRARIES += ZTextView-v1.0.2
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SRC_FILES := $(call all-java-files-under, src)
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := appcompat-1.1.0:/libs/appcompat-1.1.0.aar
LOCAL_AAPT_FLAGS += \
--auto-add-overlay \
--extra-packages androidx.appcompat
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += BaseRecyclerViewAdapterHelper-2.9.46:/libs/BaseRecyclerViewAdapterHelper-2.9.46.aar
LOCAL_AAPT_FLAGS += \
--auto-add-overlay \
--extra-packages com.chad.library
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += constraintlayout-1.1.3:/libs/constraintlayout-1.1.3.aar
LOCAL_AAPT_FLAGS += \
--auto-add-overlay \
--extra-packages androidx.constraintlayout.widget
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += material-1.1.0:/libs/material-1.1.0.aar
LOCAL_AAPT_FLAGS += \
--auto-add-overlay \
--extra-packages com.google.android.material
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += ZTextView-v1.0.2:/libs/ZTextView-v1.0.2.aar
LOCAL_AAPT_FLAGS += \
--auto-add-overlay \
--extra-packages cc.ibooker.ztextviewlib
LOCAL_MODULE_TAGS := optional
include $(BUILD_MULTI_PREBUILT)
build.gradle
这样
apply plugin: 'com.android.application'
dependencies {
// implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.1.0'
api 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46'
implementation 'com.github.zrunker:ZTextView:v1.0.2'
}
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.setting"
minSdkVersion 27
targetSdkVersion 27
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
}
}
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
sourceSets {
main.manifest.srcFile 'AndroidManifest.xml'
main.java.srcDirs = ['src']
main.aidl.srcDirs = ['src']
main.res.srcDirs = ['res']
}
}
我把上面5个aar文件放在libs目录下
当我
make
它时,如果存在 Android.mk 文件,我会收到错误
error: No resource identifier found for attribute 'layout_constraintStart_toStartOf' in package 'com.example.setting'
如果只有build.gradle存在,Android.mk不存在,make不会报错,但最终生成的ROM不会包含这个APP。
我在
frameworks/support/samples
目录下看到很多APP源码目录,他们有build.gradle
但是没有Android.mk
。
make
如何找到它们?
您正在不同的构建系统之间进行混合。 Gradle 用于构建常规 Android 应用程序,AOSP 不使用 Gradle,因此是否使用 build.gradle 进行编译无关紧要。 Android.mk 或 Android.bp 是 AOSP 用于构建系统指令的文件(使用旧的plane make 或新的 Bazel 格式)。
这就是为什么当您删除 Android.mk 时,AOSP 不会构建应用程序,并且不会将其包含在最终映像中。
因此,您需要关注使用 Android.mk 时遇到的显式构建错误 -
error: No resource identifier found for attribute 'layout_constraintStart_toStartOf' in package 'com.example.setting'
这意味着构建找不到约束布局(这不是 AOSP 源代码的一部分)。因此,要么切换到不同的布局(这真的是必须的吗?)或者包含 ConstraintLayour 源代码,或者将其构建为共享库。
我看到您将布局添加为 LOCAL_STATIC_JAVA_LIBRARIES 和 LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES,我认为您需要决定哪一个是您的策略,而不是两者:)这有点难以理解,但我想当您定义 LOCAL_STATIC_JAVA_LIBRARIES 时,构建系统可能是搜索源代码,而不是预构建版本,但没有找到。尝试将其删除并查看是否有效。也可能是您为预构建版本指定的路径错误。