如何在 AOSP 中使用 gradle 构建 Android 应用?

问题描述 投票:0回答:1

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
如何找到它们?

android gradle android-source aar
1个回答
0
投票

您正在不同的构建系统之间进行混合。 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 时,构建系统可能是搜索源代码,而不是预构建版本,但没有找到。尝试将其删除并查看是否有效。也可能是您为预构建版本指定的路径错误。

查看这个answer,以及这个关于将 ConstraintLayout 集成到 AOSP 的 answer

© www.soinside.com 2019 - 2024. All rights reserved.