史上第一款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主要有:

  1. 通过idgen 生成对应的android.ipr和android.iml文件,然后用Android Studio加载整个源码。

    弊端很明显,文件权限问题,很消耗资源,很卡,没法编译,Gradle定时作妖

  2. 通过AIDEGen给对应的模块编译,然后使用Idea加载,具有跳转和补全的作用。

    使用复杂繁琐,没法编译,貌似也不支持kt

  3. 用Eclipse加载源码模块,倒入framework.jar等库。

    UI跟不上时代,使用困难

  4. 使用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

image-20231108224251683

image-20231108224330263

目前只支持Ubuntu,会自动识别操作系统类型,如果非Ubuntu会显示不可用。

以我的理解,以后也不会支持Windows,搞android系统开发的都懂。

如果你不方便下载资源,我已经上传到

网盘:

百度网盘:

链接:https://pan.baidu.com/s/1g82vNLN2jFH3dWrS2gY_Pg?pwd=asfp 
提取码:asfp

CSDN下载:

https://download.csdn.net/download/dengtonglong/88516673

image-20231023120651551

入门

google官方教学视频教程地址: https://www.bilibili.com/video/BV1U

  1. 如果您尚未安装 Repo,请按照安装 Repo 中的说明操作。

    关于repo,想了解深入一些,可以参考这篇文章:

    https://blog.csdn.net/dengtonglong/article/details/133365006?spm=1001.2014.3001.5502

  2. 如果您尚未初始化并同步 Repo 检出分支,请按照初始化 Repo 客户端中的说明操作。

    现在大部分android源码项目都是通过repo来管理,也是官方推荐的方式。

  3. 下载 ASfP到Ubuntu。

  4. 安装 ASfP:

    sudo dpkg -i /path/to/asfp-2023.1.1.19-linux.deb

  5. 安装完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
    

    image-20231108165501869

    也可以将这个安装目录,mv到你常用的目录。

  6. 通过以下方式导入项目:

    可以选择主题风格:

    image-20231107182239873

    image-20231107182536908

    指向您的 Repo 检出目录

    指定 lunch 目标

    然后选择要构建的模块

    image-20231107183116309

  7. 点击完成,您的项目将开始同步。

  8. 像新建工程,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应该很强大!

image-20231108092959039

编译完,会生成各种项目配置iml文件

dependencies.iml

依赖的配置目录

frameworks.base.iml

源代码的配置目录

frameworks.base-gen.iml

源代码产生的文件的目录

image-20231108102839175

编译之后,会生成各种中间版本的jar,

这些classes.jar其实和平时编译生成在out目录下的是一样的。

image-20231108172411187

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编译调试!

配置

项目配置位置:

image-20231108103909927

image-20231108104925002

体验特性

特性是可以提供便利的

Java Kotlin跳转 补全 派生关系

  • 支持java跳转 补全 派生关系

    查看哪些地方调用了:

    image-20231108093617436

  • 支持kotlin跳转 补全 派生关系

    image-20231108104033476

  • 支持java和kotlin相互跳转

    可自行尝试。

  • scratch功能

当写android源码,比如一些复杂的计算,字符串处理,一些数据处理的算法,需要通过java代码或kt代码验证它的语法和运行。

这个时候,scratch功能就非常有用了。

点击创建scratch

image-20231108174349402

创建一个scratch类

image-20231108100426729

点击绿色箭头,直接运行:

image-20231108100518523

运行成功!

image-20231108100624168

JNI跳转

我以com/android/server/alarm/AlarmManagerService.java为例,

发现setKernelTime这个native方法并不能跳转到对应的jni方法,这个有点违背某些博客大V的说法。

image-20231108100130378

替换的方法,可以用ctrl+shift+R查找

image-20231108100101965

Native语言支持

在Native环境,可以进行补全,这个已经非常好了,帮我们解决了写native代码的一大困扰:

image-20231108113459863

C/C++语言支持

添加servicemanager模块,貌似很多红色报点,我觉得C和C++份依赖于整个环境,缺这缺那的,不可能跑的通的。

所以提示 需要加入对应的环境,如果是专职作内核开发的小伙伴,可以尝试调通。

image-20231108105127375

image-20231108095757328

但是支持代码补全,这个已经非常好了。

image-20231108175204604

所以建议大量开发C C++代码,建议转战clion。

image-20231108105149878

C++也支持scratch

image-20231108105332754

image-20231108105450772

可以试验C++代码运行的语法和可行性。

Python语言支持

image-20231108174759835

image-20231108175826022

安装python的插件即可。

Shell语言支持

直接点击绿色箭头即可运行,本质上用的是bash运行的。

image-20231108114344688

mk/bp支持

不支持这两个语法,但是检测到修改,会提示让你重编。

image-20231108114842773

单点调试体验

理论上,单点调试的环境要求比较严格,需要用官方代码+官方镜像;

我尝试在我本地代码上调试,最后失败告终。

image-20231108094500252

image-20231108094522417

image-20231108094635353

image-20231108094730166

image-20231108095114798

出现“debug info can be unavailable”的错误,需要关闭运行的AS。

image-20231108095546936

image-20231108095735584

最后都没办法成功单点调试,以后有机会再实验吧!

体验小结

简要给出我个人的使用体验,并不代表官方。

跳转补全关系
javaYYY
ktYYY
C/C++NYN
JNI/NativeNYN
PythonYYY
ShellYYN/A
mk/bpNNN
  • 非常适合做Framework开发的小伙伴,也就是手机厂中的系统组
  • 如果公司有自己的组件,加入到其中,也是可以兼容,实现跳转和补全
  • 希望加强C C++ native的开发体验,也许是可以调好的,如果专职作某块的开发,肯定可以把linux C那套集成
  • 建议再观望观望,等更加稳定的版本出来!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

标本传送设备物联网应用案例|蓝蜂物联网一体化方案

标本传送设备物联网应用案例 标本传输系统被大量应用到现代医院场景中,系统各个设备的运行情况直接影响到整个医院系统的正常稳定,所以对于标本传输系统的实时监控和及时运维是维持医院稳定和规避风险的重中之重。 针对标本传输系统应用过程中的数据统…

Unity | Shader(着色器)和material(材质)的关系

一、前言 在上一篇文章中 【精选】Unity | Shader基础知识(什么是shader)_unity shader_菌菌巧乐兹的博客-CSDN博客 我们讲了什么是shader,今天我们讲一下shder和material的关系 二、在unity中shader的本质 unity中,shader就…

python应用程序图标的设置(任务栏)

在cmd中输入以下内容 pyinstaller -F -w -i 图标路径 py文件路径

微服务概念

微服务 微服务是什么 In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource A…

python+requests接口自动化测试

原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自动化框架,使用的是java语言,但对于一个学java&…

Mysql 和 Redis 数据如何保持一致

先阐明一下Mysql和Redis的关系:Mysql是数据库,用来持久化数据,一定程度上保证数据的可靠性;Redis是用来当缓存,用来提升数据访问的性能。 关于如何保证Mysql和Redis中的数据一致(即缓存一致性问题&#xf…

【数据结构初阶】算法的时间复杂度和空间复杂度

各位读者老爷好!现在鼠鼠我呀来浅谈一下数据结构初阶中的一个知识点:算法的时间复杂度和空间复杂度,希望对你有所帮助。 在浅谈时间复杂度和空间复杂度之前,咱们可以来了解一下一下几个概念: 1.什么是数据结构 数据结…

2022年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 有n个按名称排序的商品,使用对分查找法搜索任何一商品,最多查找次数为5次,则n的值可能为?()(2分) A.5 B.15 C.30 D.35 答案:C 答案解析:对分查找最多查找次数m与个数之间n的…

如何设计一个网盘系统的架构

1. 概述 现代生活中已经离不开网盘,比如百度网盘。在使用网盘的过程中,有没有想过它是如何工作的?在本文中,我们将讨论如何设计像百度网盘这样的系统的基础架构。 2. 系统需求 2.1. 功能性需求 用户能够上传照片/文件。用户能…

C/C++输出硬币翻转 2021年6月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C硬币翻转 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C硬币翻转 2021年6月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 假设有N个硬币(N为不大于5000的正整数),从1…

ElasticSearch7.x - HTTP 操作 - 查询文档操作

查询索引下的所有文档 http://192.168.254.101:9200/shopping/_search 条件查询 请求路径上添加条件:http://192.168.254.101:9200/shopping/_search?q=category:小米 请求体上添加条件:http://192.168.254.101:9200/shopping/_search 请求体内容 {"query" :{&qu…

带你走进Cflow (三)·控制符号类型分析

目录 ​编辑 1、控制符号类型 1.1 语法类 1.2 符号别名 1.3 GCC 初始化 1、控制符号类型 有人也许注意到了输出中奇怪的现象:函数_exit 丢失了,虽然它在源文件中被printdir 调用了两次。这是因为默认情况下 cflow 忽略所有的一下划线开头的符号…

启动Hbase出现报错

报错信息:slave1:head: cannot open/usr/local/hbase-2.3.1/bin/../logs/hbasewanggiqi-regionserver-slavel.out’ for reading: No such file or direslave2: head: cannot open/usr/local/hbase-2.3.1/bin/../logs/hbasewangqiqi-regionserver-slave2.out’ for …

docker-compose安装es以及ik分词同义词插件

目录 1 前言 2 集成利器Docker 2.1 Docker环境安装 2.1.1 环境检查 2.1.2 在线安装 2.1.3 离线安装 2.2 Docker-Compose的安装 2.2.1 概念简介 2.2.2 安装步骤 2.2.2.1 二进制文件安装 2.2.2.2 离线安装 2.2.2.3 yum安装 3 一键安装ES及Kibana 3.1 yml文件的编写…

Linux imu6ull驱动- led

一、GPIO模块结构 开始来啃手册了,打开我们的imx6ull手册。本章我们编写的是GPIO的,打开手册的第28章,这一章就有关于IMX6ULL 的 GPIO 模块结构。 mx6ull一共有5 组 GPIO(GPIO1~GPIO5) GPIO1 有 32 个引脚&…

C语言之文件操作(详解版)

不知不觉我们已经学到C语言的文件操作部分了,这部分内容其实很有意思,因为它可以直接把我们代码中的数据写入硬盘,而不是我们关掉这个程序,代码就没有了,让我们开始学习吧! 目录 1.为什么使用文件 2.什么…

Adobe ME下载、Media Encoder下载

Media Encoder 2021 是一款可以帮助Adobepremiere pro和Adobe After Effects的用户使用集成视频编码器进行创作的视频和音频编码软件。Media Encoder 2021 mac新版本中针对上一个版本进行了多方面的改进与优化,提升了软件的性能与支持文件格式提升,有需要…

从零开始搭建React+TypeScript+webpack开发环境-基于lerna的webpack项目工程化改造

项目背景 在实际项目中,我们的前端项目往往是一个大型的Webpack项目,结构较为复杂。项目根目录下包含了各种配置文件、源代码、以及静态资源,整体布局相对扁平。Webpack的配置文件分散在不同的部分,包括入口文件、输出目录、加载…

文本生成高精准3D模型,北京智源AI研究院等出品—3D-GPT

北京智源AI研究院、牛津大学、澳大利亚国立大学联合发布了一项研究—3D-GPT,通过文本问答方式就能创建高精准3D模型。 据悉,3D-GPT使用了大语言模型的多任务推理能力,通过任务调度代理、概念化代理和建模代理三大模块,简化了3D建模的开发流程…

C++ | 继承和多态

目录 继承 继承的概念及用法 继承的作用域 向上转型和向下转型 继承过程中的默认生成函数 菱形继承及其解决方案 - 虚继承 虚继承的原理 - 虚基类表 继承和组合 多态 虚函数 多态的定义及使用 纯虚函数与抽象类 多态的原理 小点补充 虚表的位置 父类指针new一个…