SystemUI导入AndroidStudio(查看源码,不能编译运行)

一、新建工程

以下是以Android 10版本为例,首先我们要新建一个无Activity的项目,然后将app的build.gradle中的targetSdk和compilesdk更改为29

二、建立module

(SystemUI源码中的一些无关的资源已删除),分析分件,有几个AndroidManifest.xml就有几个Module 通过打开文件观察,可以看到一共有4个文件里面有AndroidManifest.xml文件。

即legacy、plugin、pluginc_core、shared,所以我们需要添加4个Module

然后建立module的时候要注意看AndroidManifest.xml里面的package来创建包名,以plugin为例,就表明module的name为plugin,package为com.android.systemui.plugins

注意要选择Android Library

然后将对应的文件移进去,将AndroidManifest.xml文件去进行替换,以plugin为例,目录结构如下

三、移动src目录文件跟res、res-keyguard文件

同样的将源码中的src文件跟res、res-keyguard文件移动至如下位置,并替换AndroidManifest.xml文件

四、Module的依赖

将四个全部勾选上,然后点击OK

五、framework.jar的导入

framework 的 jar 包如果是旧版本的话可以在以下路径中找到

bash 复制代码
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates 

新版本的话可以看以下路径

csharp 复制代码
Android 9/10:
out/soong/.intermediates/frameworks/base/framework/android_common/combined/framework.jar

Android 11:
out/soong/.intermediates/frameworks/base/framework-minus-apex/android_common/combined/framework-minus-apex.jar

将 framework_intermediates 目录下的 classes.jar 拷贝到 jar 目录中,命名为:framework.jar

然后将framework复制到项目中如下图:

在app下的build.gradle里面添加代码

scss 复制代码
gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        Set<File> fileSet = options.bootstrapClasspath.getFiles()
        List<File> newFileList = new ArrayList<>();
        //JAVA语法,可连续调用,输入参数建议为相对路径
        newFileList.add(new File("libs/framework/framework.jar"))
        //最后将原始参数添加
        newFileList.addAll(fileSet)
        options.bootstrapClasspath = files(
                newFileList.toArray()
        )
    }
}

别忘了要点击导入jar包!!!

六、导入res-keyguard资源

同样的在app下的build.gradle里面添加代码

css 复制代码
sourceSets {
    main {
        res.srcDirs += "src/main/res-keyguard"
    }
}

添加多个项目可以这样写

css 复制代码
sourceSets { 
    main {
    res.srcDirs += ['src/main/res-keyguard',     'src/main/res-keyguard',    'src/main/res-product',    'src/main/res_bak'] 
    } 
 }

七、导入静态包

查看Android.bp文件,一般static_libs下的库都位于 out\target\common\obj\JAVA_LIBRARIES

  • 导入SettingsLib

jar包位于\out\target\common\obj\JAVA_LIBRARIES\SettingsLib_intermediates

  • 导入inject

位于\out\target\common\obj\JAVA_LIBRARIES\dialer-javax-inject-target_intermediates

  • 导入dagger2

位于\out\target\common\obj\JAVA_LIBRARIES\dialer-dagger2-target_intermediates

...按需导入

总结

这种操作知识方便我们去查看代码,如果要编译运行的话还远远不够,我这边一编译,报错很多,有时间再去改

相关推荐
jinanwuhuaguo8 分钟前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
千码君20162 小时前
Trae:一些关于flutter和 go前后端开发构建的分享
android·flutter·gradle·android-studio·trae·vibe code
重生之我是Java开发战士5 小时前
【MySQL】事务 & 用户与权限管理
android·数据库·mysql
怣疯knight7 小时前
Windows不安装 Android Studio如何打包安卓软件
android·windows·android studio
ke_csdn7 小时前
从Java演变到Kotlin下的jet pack
android
wenzhangli78 小时前
在低代码设计中践行 Harness Engineering
android·低代码·rxjava
xingpanvip9 小时前
星盘接口开发文档:组合三限盘接口指南
android·开发语言·前端·python·php·lua
TechMix9 小时前
【fkw学习笔记】Android 13 AOSP 源码添加系统预置应用实战指南
android·笔记·学习
云起SAAS9 小时前
私域直播系统UniApp源码 多商户商城+直播带货 微信小程序+H5+安卓iOS
android·微信小程序·uni-app·私域直播系统
空中海10 小时前
01. 安卓逆向基础、环境搭建与授权
android