史上第一款AOSP开发的IDE (支持Java/Kotlin/C++/Jni/Native/Shell/Python)
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 131072Generating 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那套集成
- 建议再观望观望,等更加稳定的版本出来!
相关文章:
史上第一款AOSP开发的IDE (支持Java/Kotlin/C++/Jni/Native/Shell/Python)
ASFP Study 史上第一款AOSP开发的IDE (支持Java/Kotlin/C/Jni/Native/Shell/Python) 类似于Android Studio,可用于开发Android系统源码。 Android studio for platform,简称asfp(爱上富婆)。 背景&下载&使用 背景 由…...
GCC + Vscode 搭建 nRF52xxx 开发环境
在 Windows 下使用 GCC Vscode 搭建 nRF52xxx 开发环境 ...... by 矜辰所致前言 最近有遇到项目需求,需要使用到 Nordic 的 nRF52xxx 芯片,还记得当初刚开始写博文的时候的写的 nRF52832 学习笔记,现在看当时笔记毫无逻辑可言,…...
Linux应用开发基础知识——Framebuffer 应用编程(四)
前言: 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。Frame 是帧的意 思,buffer 是缓冲的意思,这意味着 Framebuffer 就是一块内存,里面保存着 一帧图像。Framebuffer 中保存着一帧图像的每一个像素颜色值,假设…...
智安网络|数据库入门秘籍:通俗易懂,轻松掌握与实践
在现代信息化时代,数据库已成为我们日常生活和工作中不可或缺的一部分。然而,对于非专业人士来说,数据库这个概念可能很抽象,难以理解。 一、什么是数据库? 简单来说,数据库是一个存储和管理数据的系统。它…...
EXCEL中安装多个vsto插件,插件之间互相影响功能,怎么解决
在 Excel 中安装多个 VSTO 插件,并且这些插件之间存在互相影响的情况下,可以采取以下措施来解决问题: 1. **隔离插件功能:** - 确保每个 VSTO 插件都有清晰的功能和责任范围,避免不同插件之间的功能重叠。这可以通…...
Java枚举
枚举类 概念 Java中的枚举(Enumeration)是一种特殊的数据类型,它是一种包含固定常量的类型。枚举是一种更加类型安全和更易维护的方式来定义常量,它包含了一组命名的值。 enum Weekday {MONDAY, TUESDAY, WEDNESDAY, THURSDAY,…...
基于MATLAB的关节型六轴机械臂轨迹规划仿真
笛卡尔空间下的轨迹规划,分为直线轨迹规划和圆弧轨迹规划,本文为笛卡尔空间下圆弧插值法的matlab仿真分析 目录 1 实验目的 2 实验内容 2.1标准D-H参数法 2.2实验中使用的Matlab函数 3 全部代码 4 仿真结果 1 实验目的 基于机器人学理论知识&…...
双11狂欢最后一天
大家好,本年度双11即将到来,为了答谢大家多年来的支持及更广泛的推广VBA的应用,“VBA语言専功”在此期间推出巨大优惠:此期间打包购买VBA技术资料实行半价优惠。 1:面向对象:学员及非学员 2:打…...
YOLOX: Exceeding YOLO Series in 2021(2021.8)
文章目录 AbstractIntroduction介绍前人的工作提出问题解决 YOLOXYOLOX-DarkNet53Implementation detailsYOLOv3 baselineDecoupled headStrong data augmentationAnchor-freeMulti positivesSimOTAEnd-to-end YOLOOther BackbonesModified CSPNet in YOLOv5Tiny and Nano dete…...
HBuilderX 运行Android App项目至雷电模拟器
一、下载安装HBuilderX HBuildeX官网 安装最新的正式版,或者点击历史版本查看更多版本;【ps:Alpha版本为开发版,功能更多,但是也不稳定,属于测试版本】 直接将压缩包解压,运行HBuildeX即可。 二…...
Java进阶(JVM调优)——阿里云的Arthas的使用 安装和使用 死锁查找案例,重新加载案例,慢调用分析
前言 JVM作为Java进阶的知识,是需要Java程序员不断深度和理解的。 本篇博客介绍JVM调优的工具阿里云的Arthas的使用,安装和使用,命令的使用案例;死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案…...
续:将基于Nasm汇编的打字小游戏,移植到DOSBox
续:将基于Nasm汇编的打字小游戏,移植到DOSBox 文章目录 续:将基于Nasm汇编的打字小游戏,移植到DOSBox前情提要细说1 编译2 程序入口3 定位段 运行体验 前情提要 上一篇:【编程实践】黑框框里的打字小游戏,但…...
外部访问K8S集群内部的kafka集群服务
不许转载 kafka 部署 把 kafka 部署到 k8s 后,我们肯定是通过 service 从 k8s 外部访问 kafaka。这里的 service 要么是 NodePort, 要么是 LoadBalancer 类型。我们使用的方式是 LoadBalancer。 我们先看下面这张图,这是 kafka 在集群中的网…...
AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘解决办法
在TensorFlow2环境下执行1.X版本的代码时报错: AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘ 当然第一时间想到的是利用 如下代码 来解决问题(大部分情况都是这样), tf.compat.v1但是又出现以下报错 Att…...
物奇平台耳机恢复出厂设置功能实现
是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙音频,DSP音频项目核心开发资料, 物奇平台耳机恢复出厂设置功能实现 一 需求 1 耳机接收到充电盒长按12S指令后触发, 2 接收到…...
RFID携手制造业升级,为锂电池生产带来前所未有的可靠性
应用背景 随着科技的发展和全球化的推进,产品的生产过程越来越复杂,且对品质的要求也越来越高。在锂电池生产领域,由于其高能量密度、长寿命和环保特性,已被广泛应用于电动汽车、储能系统等领域。然而,锂电池的安全性和…...
【星海出品】flask (四) 三方工具使用
学习的灵魂是公社,学习的目标是人民自治.学习是非暴力革命方式的社会改革.学习是人民对抗资本剥夺的文明方式.学习失败了,就如同巴黎公社失败了一样.但是它为今后进行成功的社会改革指明了正确的方向.学习的逻辑并不复杂,一句话,必须让知识数量与知识价值基本吻合.管理学习也不…...
MongoDB 索引
类似关系型数据库,mongodb也建立自己的一套索引机制和查询优化方法。本文简单介绍mongodb的索引。后续文章讲详细介绍索引的操作,监控和查询优化方法等。 索引 索引,是一组按照特殊结构排列的,方便检索的数据。索引中保存了集合…...
[Hive] INSERT OVERWRITE DIRECTORY要注意的问题
在使用Hive的INSERT OVERWRITE语句时,需要注意以下问题: 数据覆盖:INSERT OVERWRITE语句会覆盖目标目录中的数据。因此,在执行该语句之前,请确保目标目录为空或者你希望覆盖的数据已经不再需要。数据格式:…...
刚柔相济铸伟业 ——访湖南顺新金属制品科技有限公司董事长张顺新
时代在变,唯初心不改。 精致、谦虚、谨慎、儒雅、温和——他就是张顺新,湖南顺新金属制品科技有限公司、湖南顺新供应链管理有限公司董事长,民建长沙市委常委,民建湖南省环资委副主任,省、市民建企联会常务副会长&…...
收藏!20款AI必备工具,小白也能快速上手搭建大模型应用
文章介绍了20款AI产品经理必须掌握的工具,涵盖应用搭建平台(如Dify、Coze)、开发框架(如LangChain)、智能体平台(如Manus、OpenClaw)、AI编程工具(如Bolt.new、Claude Codeÿ…...
MusicFree:如何通过插件化架构打造终极免费音乐播放器体验
MusicFree:如何通过插件化架构打造终极免费音乐播放器体验 【免费下载链接】MusicFree 插件化、定制化、无广告的免费音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/mu/MusicFree 你是否厌倦了广告满天飞的音乐应用?是否受够了VIP歌…...
别再死记硬背了!用这5个真实UI案例,彻底搞懂HarmonyOS Flex布局的alignItems
别再死记硬背了!用这5个真实UI案例,彻底搞懂HarmonyOS Flex布局的alignItems 每次看到Flex布局的alignItems属性,你是不是也和我一样,对着文档里的Start、Center、End、Stretch、Baseline这几个选项发愁?明明每个单词都…...
5G网络邻区同步与测量:从信号捕获到智能切换的实战解析
1. 5G邻区同步的核心流程解析 当你的手机从地铁站走到写字楼时,能保持视频通话不中断,背后正是邻区同步在发挥作用。这个过程就像搬家时先摸清新社区环境:要找到最近的超市(同步信道)、了解社区公告栏(广播…...
3步搞定B站视频下载:开源神器BilibiliDown实战全攻略
3步搞定B站视频下载:开源神器BilibiliDown实战全攻略 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi…...
别再盲目重启dockerd!Docker守护进程网络栈内存泄漏(OOMKilled频发)的48小时根因追踪实录
第一章:Docker 网络优化Docker 默认的 bridge 网络在高并发、低延迟或跨主机通信场景下常面临性能瓶颈,包括 NAT 开销、iptables 规则膨胀、DNS 解析延迟及容器间网络隔离粒度不足等问题。优化 Docker 网络需从驱动选择、网络拓扑设计、内核参数调优和运…...
Linux文件系统 dentry cache 机制与性能优化探秘
1. 从文件路径到磁盘数据:dentry cache的核心作用 当你敲下ls /home/user/docs命令时,系统如何在毫秒内完成这个看似简单的操作?背后正是Linux的dentry cache(目录项缓存)在默默发力。这个机制就像城市里的路标系统&am…...
从VGG到RepVGG:为什么说BN层是模型‘瘦身’和推理加速的关键拼图?
从VGG到RepVGG:BN层融合如何重塑模型推理效率 在计算机视觉模型的进化历程中,VGG网络以其规整的卷积堆叠结构成为经典,而RepVGG则通过结构重参数化技术将模型推理效率推向新高度。当我们剖析这些架构的性能飞跃时,会发现一个看似平…...
终极微信管理方案:5个Python脚本让你的微信工作流效率翻倍
终极微信管理方案:5个Python脚本让你的微信工作流效率翻倍 【免费下载链接】wechat-toolbox WeChat toolbox(微信工具箱) 项目地址: https://gitcode.com/gh_mirrors/we/wechat-toolbox 还在为繁琐的微信联系人管理而烦恼吗࿱…...
YOLOv8进阶:全局多头自注意力MHSA融合实战,性能超越主流注意力机制
1. 为什么需要全局多头自注意力机制 在目标检测任务中,小目标检测和复杂背景下的识别一直是难点问题。传统的卷积神经网络(CNN)由于感受野有限,难以捕捉长距离依赖关系。我曾在实际项目中遇到过这样的情况:在无人机航拍图像中,那些…...
