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 引用

相关推荐
2401_8858850416 分钟前
开发视频短信接口好开发吗?图文视频短信接口对接教程
android·音视频
千码君20161 小时前
kotlin:Jetpack Compose 给APP添加声音(点击音效/背景音乐)
android·开发语言·kotlin·音效·jetpack compose
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.2 小时前
MySQL半同步复制与GTID实战详解
android·mysql·adb
用户41659673693553 小时前
深度解码:记一次视频时间戳(PTS)异常导致的播放故障排查
android
Ww.xh3 小时前
Android Studio AI插件推荐
android studio
大白菜和MySQL4 小时前
linux系统环境常用命令
android·linux·adb
Ehtan_Zheng5 小时前
彻底告别 AndroidX 依赖:如何在 KMP 中构建 100% 复用的 UI 逻辑层?
android
Hello小赵5 小时前
C语言如何自定义链接库——编译与调用
android·java·c语言
IT枫斗者6 小时前
构建具有执行功能的 AI Agent:基于工作记忆的任务规划与元认知监控架构
android·前端·vue.js·spring boot·后端·架构
用户69371750013846 小时前
XChat 为什么选择 Rust 语言开发
android·前端·ios