史上第一款AOSP开发的IDE (支持Java/Kotlin/C++/Jni/Native/Shell/Python)-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
ASFP Study
史上第一款AOSP开发的IDE 支持Java/Kotlin/C++/Jni/Native/Shell/Python
类似于Android Studio可用于开发Android系统源码。
Android studio for platform简称asfp(爱上富婆)。
背景&下载&使用
背景
由于Android系统源码过于庞大比如Android14源代码就有400G了。
做AOSP开发的小伙伴都经常受困于改代码的工具此前主流的IDE主要有
-
通过idgen 生成对应的android.ipr和android.iml文件然后用Android Studio加载整个源码。
弊端很明显文件权限问题很消耗资源很卡没法编译Gradle定时作妖
-
通过AIDEGen给对应的模块编译然后使用Idea加载具有跳转和补全的作用。
使用复杂繁琐没法编译貌似也不支持kt
-
用Eclipse加载源码模块倒入framework.jar等库。
UI跟不上时代使用困难
-
使用Source Insight/Visual Code/Sublime的工具进行裸开发借助其他IDE完成部分语法校验和补全工作。
没有补全功能优点是不那么吃系统资源
基本情况
现在google官方推出了系统开发专用版本Android Studio for Platform应该能解决大部分安卓系统开发从业者的烦恼。
先说一下大体情况
-
优点
- 可以加载你关注的几个模块支持单独编译有自己的Soong build system。
- 支持多款语言的跳转/补全/派生关系。
- 支持灵活的文本搜索文件搜索灵活配置JetBrain家族的特性很熟悉的味道。
- 支持单点调试但是必须base官方源码和官方镜像
-
缺点
- 目前仅支持Linux系统可以在Ubuntu下使用
- 对电脑配置要求也有点高
- 对于JNI C++的跳转还有说欠缺
Let’s get started!
下载
https://developer.android.com/studio/platform?hl=zh-cn
目前只支持Ubuntu会自动识别操作系统类型如果非Ubuntu会显示不可用。
以我的理解以后也不会支持Windows搞android系统开发的都懂。
如果你不方便下载资源我已经上传到
网盘
百度网盘
链接https://pan.baidu.com/s/1g82vNLN2jFH3dWrS2gY_Pg?pwd=asfp
提取码asfp
CSDN下载
https://download.csdn.net/download/dengtonglong/88516673
入门
google官方教学视频教程地址 https://www.bilibili.com/video/BV1U
-
如果您尚未安装 Repo请按照安装 Repo 中的说明操作。
关于repo想了解深入一些可以参考这篇文章
https://blog.csdn.net/dengtonglong/article/details/133365006?spm=1001.2014.3001.5502
-
如果您尚未初始化并同步 Repo 检出分支请按照初始化 Repo 客户端中的说明操作。
现在大部分android源码项目都是通过repo来管理也是官方推荐的方式。
-
下载 ASfP到Ubuntu。
-
安装 ASfP
sudo dpkg -i /path/to/asfp-2023.1.1.19-linux.deb
-
安装完asfp后默认在这个目录下
/opt/android-studio-for-platform/bin/studio.sh
也可以制作桌面图标
[Desktop Entry] Version=1.0 Encoding=UTF-8 Name=Android Studio Exec=/opt/android-studio-for-platform/bin/studio.sh TryExec=/opt/android-studio-for-platform/bin/studio.sh Comment=Android Studio For Platform Terminal=false Categories=Qt;Development; Icon=/opt/android-studio-for-platform/bin/studio.png Type=Application
也可以将这个安装目录mv到你常用的目录。
-
通过以下方式导入项目
可以选择主题风格
指向您的 Repo 检出目录
指定
lunch
目标然后选择要构建的模块
-
点击完成您的项目将开始同步。
-
像新建工程ide设置添加模块、依赖配置文件存储路径这些是和JetBrain其他软件一样的操作甚至快捷键都一样熟悉的配方。
用惯了Android Studio的人应该对工程师来讲这个不陌生。
编译
第一次加入项目会自动编译由于我加入的代码包含一些定制化还有test目录经常出问题编译到了99%大体也算完成了。
本质上编译指令是
Syncing targets: [frameworks/base]
Preparing for sync...
Updating MAX_ARG_STRLEN to 131072
Generating Soong artifacts...
/bin/bash -c "source build/envsetup.sh && lunch xxxx-userdebug && echo ANDROID_PRODUCT_OUT=$ANDROID_PRODUCT_OUT && refreshmod"
including device/mediatek/build/vendorsetup.sh
refreshmod应该很强大
编译完会生成各种项目配置iml文件
dependencies.iml
依赖的配置目录
frameworks.base.iml
源代码的配置目录
frameworks.base-gen.iml
源代码产生的文件的目录
编译之后会生成各种中间版本的jar,
这些classes.jar其实和平时编译生成在out目录下的是一样的。
frameworks.base.core生成的classes.jar
- core-android-libraries
所有dependencies的classes.jar
- dependencies-jars
frameworks.base生成的classes.jar
- frameworks.base-jars
虽然说ASFP支持soong编译但不咋好用是项目实践中还是建议用m/mm/mmm编译调试
配置
项目配置位置
体验特性
特性是可以提供便利的。
Java Kotlin跳转 补全 派生关系
-
支持java跳转 补全 派生关系
查看哪些地方调用了
-
支持kotlin跳转 补全 派生关系
-
支持java和kotlin相互跳转
可自行尝试。
-
scratch功能
当写android源码比如一些复杂的计算字符串处理一些数据处理的算法需要通过java代码或kt代码验证它的语法和运行。
这个时候scratch功能就非常有用了。
点击创建scratch
创建一个scratch类
点击绿色箭头直接运行
运行成功
JNI跳转
我以com/android/server/alarm/AlarmManagerService.java为例
发现setKernelTime这个native方法并不能跳转到对应的jni方法这个有点违背某些博客大V的说法。
替换的方法可以用ctrl+shift+R查找
Native语言支持
在Native环境可以进行补全这个已经非常好了帮我们解决了写native代码的一大困扰
C/C++语言支持
添加servicemanager模块貌似很多红色报点我觉得C和C++份依赖于整个环境缺这缺那的不可能跑的通的。
所以提示 需要加入对应的环境如果是专职作内核开发的小伙伴可以尝试调通。
但是支持代码补全这个已经非常好了。
所以建议大量开发C C++代码建议转战clion。
C++也支持scratch
可以试验C++代码运行的语法和可行性。
Python语言支持
安装python的插件即可。
Shell语言支持
直接点击绿色箭头即可运行本质上用的是bash运行的。
mk/bp支持
不支持这两个语法但是检测到修改会提示让你重编。
单点调试体验
理论上单点调试的环境要求比较严格需要用官方代码+官方镜像
我尝试在我本地代码上调试最后失败告终。
出现“debug info can be unavailable”的错误需要关闭运行的AS。
最后都没办法成功单点调试以后有机会再实验吧
体验小结
简要给出我个人的使用体验并不代表官方。
跳转 | 补全 | 关系 | |
---|---|---|---|
java | Y | Y | Y |
kt | Y | Y | Y |
C/C++ | N | Y | N |
JNI/Native | N | Y | N |
Python | Y | Y | Y |
Shell | Y | Y | N/A |
mk/bp | N | N | N |
- 非常适合做Framework开发的小伙伴也就是手机厂中的系统组
- 如果公司有自己的组件加入到其中也是可以兼容实现跳转和补全
- 希望加强C C++ native的开发体验也许是可以调好的如果专职作某块的开发肯定可以把linux C那套集成
- 建议再观望观望等更加稳定的版本出来
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |