Android 10(Q)SystemUI 导入 AndroidStudio 调试编译

环境:

aosp 10.0 源码

android studio 版本 2024.1.1

gradle 6.5 不确定这个版本是否要调整

以前一直在源码的环境下编译和调试,现要用AS独立编译和调试,在网上看了很多帖子,貌似作用不是很大。

求助在这方面有经验的同学指点一二

目前在网上寻找的方法目录结构如下:

因Android 9 与 Android 10 区别的问题,不确定这种目录结构是否正确。5个moudel下面只有build.gradle配置了,下面什么都没放。

SystemUI中Android.bp如下:

java_library {
    name: "SystemUI-proto",

    srcs: ["src/**/*.proto"],

    proto: {
        type: "nano",
    },
}

java_library {
    name: "SystemUI-tags",
    srcs: ["src/com/android/systemui/EventLogTags.logtags"],
}

android_library {
    name: "SystemUI-core",
    srcs: [
        "src/**/*.kt",
        "src/**/*.java",
        "src/**/I*.aidl",
    ],
    resource_dirs: [
        "res-keyguard",
        "res",
    ],
    static_libs: [
        "SystemUIPluginLib",
        "SystemUISharedLib",
        "SettingsLib",
        "androidx.legacy_legacy-support-v4",
        "androidx.recyclerview_recyclerview",
        "androidx.preference_preference",
        "androidx.appcompat_appcompat",
        "androidx.mediarouter_mediarouter",
        "androidx.palette_palette",
        "androidx.legacy_legacy-preference-v14",
        "androidx.leanback_leanback",
        "androidx.slice_slice-core",
        "androidx.slice_slice-view",
        "androidx.slice_slice-builders",
        "androidx.arch.core_core-runtime",
        "androidx.lifecycle_lifecycle-extensions",
        "androidx.dynamicanimation_dynamicanimation",
        "androidx-constraintlayout_constraintlayout",
        "iconloader_base",
        "SystemUI-tags",
        "SystemUI-proto",
        "dagger2-2.19",
        "jsr330"
    ],
    manifest: "AndroidManifest.xml",

    libs: [
        "telephony-common",
    ],

    aaptflags: [
        "--extra-packages",
        "com.android.keyguard",
    ],

    plugins: ["dagger2-compiler-2.19"],
}

android_library {
    name: "SystemUI-tests",
    manifest: "tests/AndroidManifest.xml",
    resource_dirs: [
        "tests/res",
        "res-keyguard",
        "res",
    ],
    srcs: [
        "tests/src/**/*.kt",
        "tests/src/**/*.java",
        "src/**/*.kt",
        "src/**/*.java",
        "src/**/I*.aidl",
    ],
    static_libs: [
        "SystemUIPluginLib",
        "SystemUISharedLib",
        "SettingsLib",
        "androidx.legacy_legacy-support-v4",
        "androidx.recyclerview_recyclerview",
        "androidx.preference_preference",
        "androidx.appcompat_appcompat",
        "androidx.mediarouter_mediarouter",
        "androidx.palette_palette",
        "androidx.legacy_legacy-preference-v14",
        "androidx.leanback_leanback",
        "androidx.slice_slice-core",
        "androidx.slice_slice-view",
        "androidx.slice_slice-builders",
        "androidx.arch.core_core-runtime",
        "androidx.lifecycle_lifecycle-extensions",
        "androidx.dynamicanimation_dynamicanimation",
        "androidx-constraintlayout_constraintlayout",
        "SystemUI-tags",
        "SystemUI-proto",
        "metrics-helper-lib",
        "androidx.test.rules", "hamcrest-library",
        "mockito-target-inline-minus-junit4",
        "testables",
        "truth-prebuilt",
        "dagger2-2.19",
        "jsr330"
    ],
    libs: [
        "android.test.runner",
        "telephony-common",
        "android.test.base",
    ],
    aaptflags: [
        "--extra-packages",
        "com.android.keyguard:com.android.systemui",
    ],
    plugins: ["dagger2-compiler-2.19"],
}

android_app {
    name: "SystemUI",
    static_libs: [
        "SystemUI-core",
    ],
    resource_dirs: [],

    platform_apis: true,
    product_specific: true,
    certificate: "platform",
    privileged: true,

    optimize: {
        proguard_flags_files: ["proguard.flags"],
    },

    libs: [
        "telephony-common",
    ],

    dxflags: ["--multi-dex"],
    aaptflags: [
        "--extra-packages",
        "com.android.keyguard",
    ],
    required: ["privapp_whitelist_com.android.systemui"],

}

// Only used for products that are shipping legacy Recents
android_app {
    name: "SystemUIWithLegacyRecents",
    overrides: [
        "SystemUI",
    ],

    platform_apis: true,
    certificate: "platform",
    privileged: true,

    dxflags: ["--multi-dex"],
    aaptflags: [
        "--extra-packages",
        "com.android.keyguard",
    ],
    optimize: {
        proguard_flags_files: ["proguard.flags", "legacy/recents/proguard.flags"],
    },

    static_libs: [
        "SystemUI-core",
    ],
    libs: [
        "telephony-common",
    ],

    srcs: [
        "legacy/recents/src/**/*.java",
        "legacy/recents/src/**/I*.aidl",
    ],
    resource_dirs: [
        "legacy/recents/res",
    ],

    manifest: "legacy/recents/AndroidManifest.xml",
}

寻求各位同学的帮助!!!十分感谢,后续成功了,会无偿分享出来。
 

### 将 Android SystemUI 源码导入 Android Studio 并正确配置环境 #### 一、准备工作 为了成功将 Android SystemUI 源码迁移到 Android Studio 中并作为可调试的项目运行,需要完成一系列前期准备。首先确认已安装最新版本的 Android Studio 和 JDK,并设置好 NDK 支持[^1]。 #### 二、模块划分与创建 根据现有文档说明,SystemUI 的源码结构较为复杂,因此需要将其拆分为多个独立模块以便于管理。具体来说,通常会划分为以下几个主要模块: - **Keyguard**: 对应 `com.android.keyguard` 包名。 - **Plugins**: 对应 `com.android.systemui.plugins` 包名。 - **Shared**: 对应 `com.android.systemui.shared` 包名。 - **SettingsLib**: 对应 `com.android.settingslib` 包名。 每个模块对应一个单独的 `AndroidManifest.xml` 文件,这是基于原始项目的构建脚本 `Android.mk` 所决定的逻辑分割方式[^2]。 #### 三、删除不必要的测试文件 在迁移过程中,建议移除所有与单元测试相关的目录及其内容(即 `test` 和 `androidTest`),因为这些部分可能依赖特定的 AOSP 构建工具链,在纯 Android Studio 环境下无法正常工作。此操作可以通过简单的批量命令实现[^3]。 #### 四、Gradle 配置调整 由于目标是兼容旧版支持库而非使用最新的 androidx 库体系,需修改全局 Gradle 属性文件 (`gradle.properties`) 如下所示: ```properties android.useAndroidX=false android.enableJetifier=false ``` 同时清空各子模块内的默认依赖项声明区域 (位于各自的 build.gradle 文件中的 dependencies 块),仅保留必要的基础组件定义。 #### 五、资源拷贝同步 最后一步是从原生 AOSP 工程复制所需的全部 Java/Kotlin 源代码以及关联资源至新建立好的各个 module 下对应的 src/main/java 或者 res 子路径当中去。 通过上述流程即可初步达成将整个 Android SystemUI 移植到现代 IDE 上面的目标,从而方便后续进一步定制化开发或者深入研究其内部机制的工作开展起来更加便捷高效。 ```python # 示例 Python 脚本用于自动化处理某些重复劳动环节(非必需) import os def remove_tests(root_dir): """Recursively removes all test directories.""" for dirpath, dirs, files in os.walk(root_dir): if 'tests' in dirs or 'androidTests' in dirs: try: os.rmdir(os.path.join(dirpath,'tests')) os.rmdir(os.path.join(dirpath,'androidTests')) except Exception as e: print(f"Error removing {dirpath}: {e}") remove_tests('/path/to/systemui') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值