Android 11 SystemUI 导入 Android studio 编译打包过程

0x00 AOSP环境准备

编译 AOSP 过程略,可以参考 mirrors.tuna.tsinghua.edu.cn/help/AOSP/

首先你要有一台 ubuntu 电脑或者虚拟机作为编译服务器,需要注意的是你的网络要流畅,否则同步的过程可能会比较痛苦(别问我为何会知道)。如果你是 APP 开发者可能 Mac 操作会比较顺手,可以通过 vscode 来连接你的 ubuntu 服务器。

本文使用的分支是 android-11.0.0_r9,硬件环境是 Pixel 5 手机

0x01 获取SystemUI源码

SystemUI 源码的目录在 aosp/frameworks/base/packages/SystemUI,将这个目录拷贝到你的工作目录后就可以开始项目改造了,主要的思想是添加 build.gradle 文件和相关库依赖。注意这一步需要保证 gradle 的版本不要太高,并且各个依赖库( aar 或者 jar )的版本尽可能保持一致。

使用 Android Studio 打开 SystemUI 目录

1. 配置 Gradle 版本为6.7.1

测试时发现使用 6.5 版本也是可以的。

2. 配置 Java 版本为1.8

0x02 添加相关依赖库

1. Jar 包依赖

  • framework.jar aosp/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes-header.jar

  • core-all.jar

    aosp/out/soong/.intermediates/libcore/core-all/android_common/javac/core-all.jar

  • SystemUI-statsd.jar

    aosp/out/soong/.intermediates/frameworks/base/packages/SystemUI/shared/SystemUI-statsd/android_common/javac/SystemUI-statsd.jar

  • SystemUISharedLib.jar

    aosp/out/soong/.intermediates/frameworks/base/packages/SystemUI/shared/SystemUISharedLib/android_common/javac/SystemUISharedLib.jar

  • SystemUI-proto.jar

    aosp/out/soong/.intermediates/frameworks/base/packages/SystemUI/SystemUI-proto/android_common/javac/SystemUI-proto.jar

  • SystemUI-tags.jar

    aosp/out/soong/.intermediates/frameworks/base/packages/SystemUI/SystemUI-tags/android_common/javac/SystemUI-tags.jar

  • libprotobuf-java-nano.jar

    aosp/out/soong/.intermediates/external/protobuf/libprotobuf-java-nano/android_common/javac/libprotobuf-java-nano.jar

  • WindowManager-Shell.jar

    aosp/out/soong/.intermediates/frameworks/base/libs/WindowManager/Shell/WindowManager-Shell/android_common/javac/WindowManager-Shell.jar

2. AAR 依赖

  • preference-1.2.0-alpha01.aar

    aosp/prebuilts/sdk/current/androidx/m2repository/androidx/preference/preference/1.2.0-alpha01/preference-1.2.0-alpha01.aar

  • asynclayoutinflater-1.1.0-alpha01.aar

    aosp/prebuilts/sdk/current/androidx/m2repository/androidx/asynclayoutinflater/asynclayoutinflater/1.1.0-alpha01/asynclayoutinflater-1.1.0-alpha01.aar

3. 源码模块依赖

  • SettingsLib 模块

    aosp/frameworks/base/packages/SettingsLib

  • WifiTrackerLib 模块 aosp/frameworks/opt/net/wifi/libs/WifiTrackerLib

0x03 语言文件处理

这里把 product 为 tv、device 以及 tablet 的 key 删除掉,使用 AI 写了一个 python 脚本进行处理。

可以查看本项目中 remove-lang.py 文件

0x04 签名文件

aosp/build/target/product/security 提取 platform.pk8platform.x509.pem 签名文件

bash 复制代码
# 将 platform.pk8 转成 platform.pem
openssl pkcs8 -in platform.pk8 -inform DER -out platform.pem -nocrypt
# 使用 platform.x509.pem 和 platform.pem 生成 platform.p12 并设置别名 platform 密码为 android
openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12 -name platform -password pass:android
# 生成最终的 platform.jks
keytool -importkeystore -deststorepass android -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android

或者使用 github.com/getfatday/k... 工具可以更加便捷生成签名文件

0x05 打包

修改下 StatusBar,添加下 Log

./gradlew assembleRelease

安装运行

bash 复制代码
adb root
adb remount
adb push build/outputs/apk/release/SystemUI.apk /system/system_ext/priv-app/SystemUI/SystemUI.apk

adb reboot
#adb shell stop
#adb shell start

0x06 项目地址

0x07 引用

相关推荐
xiangzhihong82 小时前
使用Universal Links与Android App Links实现网页无缝跳转至应用
android·ios
车载应用猿3 小时前
基于Android14的CarService 启动流程分析
android
没有了遇见4 小时前
Android 渐变色实现总结
android
雨白6 小时前
Jetpack系列(四):精通WorkManager,让后台任务不再失控
android·android jetpack
mmoyula8 小时前
【RK3568 驱动开发:实现一个最基础的网络设备】
android·linux·驱动开发
sam.li9 小时前
WebView安全实现(一)
android·安全·webview
移动开发者1号9 小时前
Kotlin协程超时控制:深入理解withTimeout与withTimeoutOrNull
android·kotlin
程序员JerrySUN10 小时前
RK3588 Android SDK 实战全解析 —— 架构、原理与开发关键点
android·架构
移动开发者1号10 小时前
Java Phaser:分阶段任务控制的终极武器
android·kotlin
哲科软件19 小时前
跨平台开发的抉择:Flutter vs 原生安卓(Kotlin)的优劣对比与选型建议
android·flutter·kotlin