as-aosp 工程简介¶
工程地址:as-aosp
此as工程可以快速的导入aosp framework(包含java/native)、 aosp 系统app、 国内某些厂商扩展的fwk代码;
比 idegen(android.ipr和android.iml) 方案还快,并且“联想”也很方便。
支持IDE¶
- Android Studio
- IntelliJ IDEA
- CLion
IDEA 只支持 java 模块。
CLion 只支持 native 模块,直接打开 aosp-native 后,需要改 aosp-native/CMakeLists.txt 里 set(ANDROID_ROOT ${BUILD_NATIVE_ROOT})
对比 asfp 优缺点¶
as-asop | asfp | |
---|---|---|
Author | Solo | |
发布时间 | 2022下半年 | 2023下半年 |
支持平台 | linux、macos、win | linux |
Android Studio 版本 | 任意版本 | 特殊版本,即asfp版本 |
IDEA 版本 | 任意版本(仅Java模块) | 不支持IDEA |
CLion 版本 | 任意版本(仅native模块) | 不支持CLion |
以下代码支持跳转、提示 | java、kotlin、c、c++ | java、kotlin、c、c++ |
需要编译 | 否 | 是 |
需要完整代码 | 否 | 是 |
首次加载耗时 | 根目录只有部分模块代码,加载几分钟; 根目录包含所有aosp代码,加载1.5h左右 |
代码已全编译,加载1h左右; 代码未全编译,编译时间+加载1h左右 |
UI | 无UI,通过改脚本来实现功能,自定义度高 | 有UI,可通过界面添加模块(依赖每个模块的android.bp,无法自定义) |
下面以cpp代码为例,演示代码的跳转以及提示、补全。
跳转¶
提示、补全¶
使用教程¶
更新到 6.x 版本默认就可跳转系统源码
编译¶
此工程无法编译framework.jar或者services.jar,请使用aosp推荐的编译方式。
global_scripts 工程里的 gs_android_build.sh 脚本实现了很多模块编译的快捷键。
可以单独下载这个脚本并放到环境变量里,或者是用整个 global_scripts 实现插件化的方案【详情可以参考该工程的README】。
版本¶
as-aosp经历了两年多的更新,每次更新都是根据自己的需求。
5.x.x 打算再次对 c/c++ 模块进行大改,自己本地验证大改后 vs 也能丝滑使用。
6.x.x¶
优化加载速度¶
不打开c++模块加载时间从10分钟变成2-3分钟(同一台电脑,同一份工程测试)。
Java模块¶
Android模块改成Java模块,加载完成后直接跳转源码,无需再执行删除 sdk 的任务。
新增版本号¶
工程中新增一个 VERSION 文件配置版本号,用作调试以及升级提示。
5.x.x¶
scrjars¶
-
aidl
支持 aidl 跳转 -
R.java
支持 R 跳转
android sdk¶
适配新版 android studio,实现自动删除恢复 android.jar ,丝滑调整源码。
PlatformBase¶
不特指aosp中的哪个模块,而是android 平台一些基础的代码都放在这个模块里。
car¶
- car
相关模块都放到 car 文件夹下
aosp-cmake¶
- CMakeLists.txt
根据 Android.bp/Android.mk 生成 CMakeLists.txt
ext¶
git 忽略 ext ,方便同步代码的同时也方便个人定制化
文件夹结构调整¶
-
aosp-modules
system server、framework-res、aosp 其他模块 -
aosp-car
aosp car 模块 -
aosp-cts
aosp cts 模块
4.0.0¶
Car¶
-
新增 CarSystemUI
-
新增 CarSettings
移除/调整¶
-
移除 Java 模块下的 JNI 脚本
-
移除 Wifi
-
framework 、services 包含 Wifi 相关(保持跟原生一致)
CTS¶
- CtsWindowManagerDeviceTestCases
- CtsInputTestCases
CTS 相关的模块都放到 cts 文件夹下
4开头版本主要是提供车机的两个模块,供其他车机模块参考。
3.x 版本想要解决 【解决 Java 模块 包含 JNI 时,JNI代码无法跳转问题】,经过一段时间研究后,无法解决。
后续打算大改版 native 模块,所以暂时不在 Java 模块下提供 JNI,而是打算刚才使用 native 都单独一个模块。
基于这点,也没必要提供老版本的 【生成 cmakelist 脚本】
3.2.1¶
移除/调整¶
-
移除 BUILD_APPLICATION
-
移除根目录下的 native 模块
-
把所有 native 模块都放在 aosp-native ,并通过 add_subdirectory() 方式添加子模块
-
解决 Java 模块 包含 JNI 时,JNI代码无法跳转问题
-
提供 生成 cmakelist 脚本
最初的 BUILD_APPLICATION 确实是用了编译 test app,但目前功能已经改版;不需要编译 test app 了,并且这个工程无法编译 aosp 模块,为了不引起歧义,故删除。
2.1.0¶
java模块¶
-
Framework: framework.jar
-
Services: services.jar
-
FrameworkRes: framework-res.apk
-
SystemUI: SystemUI.apk
-
SystemUIPluginLib: SystemUIPluginLib.jar
-
Settings: Settings.apk
-
SettingsLib: SettingsLib.aar
-
SettingsProvider: SettingsProvider.apk
-
CarFramework: CarFramework
-
CarServices: CarServices.apk
-
Connectivity: 包括Tethering、nearby、netd相关的源码
-
Wifi: wifi相关的源码
-
ExtServices: ExtServices.apk
在 1.x.x 的基础上完善更多功能。
native模块¶
-
AndroidRuntime: libandroid_runtime.so
-
AndroidServices: libandroid_servers.so
-
InputFlinger: inputflinger模块
-
SurfaceFlinger: surfaceflinger模块
-
NeuralNetworks: 封装tensorflow源码
-
TensorFlow: google的tensorflow源码
aidl¶
- 支持 aidl 编译成 java
1.x.x¶
-
Framework: framework.jar
-
Services: services.jar
-
FrameworkRes: framework-res.apk
-
SystemUI: SystemUI.apk
-
SystemUIPluginLib: SystemUIPluginLib.jar
-
Settings: Settings.apk
-
SettingsLib: SettingsLib.aar
-
SettingsProvider: SettingsProvider.apk
-
CarFramework: CarFramework
-
CarServices: CarServices.apk
-
Connectivity: 包括Tethering、nearby、netd相关的源码
-
Wifi: wifi相关的源码
-
ExtServices: ExtServices.apk
-
多个手机厂商的 Framework 、Services、Ext-Framework 、Ext-Services 等
后话¶
此工程包含的 miui、flyme、oppo、vivo 等配置 不涉及任何这几家公司的代码,所以并没有泄露任何公司的代码!
分享此工程的目的是为了android系统工程师能提高工作效率!请勿小事化大!
此工程拆封成很多分支,默认是 aosp 分支。切分支有惊喜[狗头]。
即时讨论¶
- 添加微信,入群与小伙伴交流: