《Framework 开发》3、开发工具及命令行知识装备

1、AIDEGen

AIDEGen 是 google 推出的一个工具,用于方便开发者使用 IDE 来查看和修改系统源码。

AIDEGen + Android Studio 非常适合用于阅读与修改 Android 系统 Java 代码。

使用 AIDEGen 之前我们需要做一些准备工作:

编译 sdk:

bash 复制代码
cd aosp
source build/envsetup.sh
lunch sdk-eng
# 或者 #lunch sdk-userdebug # or #lunch sdk-user make sdk
make sdk

ps:如果自己的磁盘够,建议用上面的 make sdk,这样不容易出问题;但是磁盘有限的话,可以使用下面的方式:

↓↓↓↓↓↓省硬盘空间方式 start↓↓↓↓↓↓

bash 复制代码
#安装 Python 3.9 (系统不改变默认 Python)

Ubuntu 22.04 默认没有 3.9,需要用 deadsnakes PPA:

sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install python3.9 python3.9-venv python3.9-distutils -y
# `python3.9-venv` 是创建虚拟环境必需的
# `python3.9-distutils` 是 pip 安装依赖
# 创建 Python 3.9 虚拟环境 
python3.9 -m venv ~/aidegen-venv
# 激活环境:
source ~/aidegen-venv/bin/activate
# 此时虚拟环境里的 python 就是 3.9:
python --version
# 输出 Python 3.9.x
# 安装兼容 protobuf
pip install --upgrade pip
pip install protobuf==3.19.4
# protobuf 3.19.4 在 Python 3.9 下与 aidegen / Soong 兼容,不会报 `MutableMapping` 错误。

# 运行 aidegen,确保虚拟环境激活,然后运行:
cd aosp
source ~/aosp/build/envsetup.sh
lunch aosp_x86_64-eng
aidegen packages/apps/Launcher3 -p ~/android-studio/bin/studio.sh
 
 
# 使用完毕退出虚拟环境
deactivate

这样,就把python3.9的虚拟环境创建好,并且调试通了

后续只需要使用下方的命令即可:

bash 复制代码
# **测试**
source ~/aidegen-venv/bin/activate
source ~/aosp/build/envsetup.sh
lunch aosp_x86_64-eng
aidegen packages/apps/Launcher3 -p  studio.sh

↑↑↑↑↑↑省硬盘空间方式 end↑↑↑↑↑↑

2、VScode

我们可以使用 vscode 中的 file -> open folder 选择我们的系统源码目录,即可打开整个系统源码。 另外为了使我们的 vscode 更好用更好看,通常我们会安装一下一些插件:

  • C/C++ Extension Pack
  • Extension Pack for Java
  • Makefile Tools
  • RC Script language
  • Android System Tools
  • Android Studio Color Theme

3、find + grep 命令使用

Android 系统源码繁杂,通常我们通过 find 命令来查找我们关心的文件。使用 find + grep 命令查找我们关心的文件内容。

  • 找文件,比如 service_manager.c
arduino 复制代码
find . -name "service_manager.c" 
./frameworks/native/cmds/servicemanager/service_manager.c
  • 找文件内容,找 recyclerview 库
bash 复制代码
find . -name "Android.bp" | xargs grep "name: \".*recyclerview.*\"" 
输出:
./prebuilts/sdk/current/androidx/Android.bp: name: "androidx.recyclerview_recyclerview-selection-nodeps", 
./prebuilts/sdk/current/androidx/Android.bp: name: "androidx.recyclerview_recyclerview-selection", 
./prebuilts/sdk/current/androidx/Android.bp: name: "androidx.recyclerview_recyclerview-nodeps", 
./prebuilts/sdk/current/androidx/Android.bp: name:"androidx.recyclerview_recyclerview", ./prebuilts/sdk/current/support/Android.bp: name: "android-support-recyclerview-selection-nodeps", 
./prebuilts/sdk/current/support/Android.bp: name: "android-support-recyclerview-selection", 
./prebuilts/sdk/current/support/Android.bp: name: "android-support-v7-recyclerview-nodeps", 
./prebuilts/sdk/current/support/Android.bp: name: "android-support-v7-recyclerview",

4、通过第一步中的编译 sdk后,再来配置 Android Studio

① 首先,选择我们的目标 Product:

bash 复制代码
# 进入aosp目录后,再执行
source build/envsetup.sh 
lunch aosp_x86_64-eng

② 打开系统模块,我们以 Settings 为例:

bash 复制代码
# Settings 可以更换为其他模块名 or 模块存在的路径,即可打开其他模块 
# -i 表示使用ide,s 表示 Android Studio
aidegen Settings -i s 

如果出现了如下问题:

arduino 复制代码
AttributeError: module 'collections' has no attribute 'MutableMapping'

原因是 Python 3.10 及以上版本中常见的问题。原因是:在 Python 3.10+ 中,collections.MutableMapping 被移到了 collections.abc.MutableMapping,旧写法会报错。而我们用到的 aidegen 或者 protobuf 版本还在用旧的写法。

解决方法

创建 Python 3.9 虚拟环境(推荐)

这样不会影响系统 Python,环境干净:

bash 复制代码
cd ~/aosp
python3.9 -m venv venv39
source venv39/bin/activate
pip install --upgrade pip
pip install protobuf

再把 Android Studio 放到 /opt 目录下 。 我这里用的是android studio 2021 redirector.gvt1.com/edgedl/andr...

接着在虚拟环境里直接运行:

css 复制代码
aidegen Settings -i s

进入

等待片刻:

点击 configure

点击ok。

然后,点 File 菜单下的 project structure,配置 jdk 和 sdk

点击 SDKS:

添加 jdk,配置上 aosp 内的jdk9

bash 复制代码
prebuilts/jdk/jdk9/linux-x86

然后再添加 sdk,配置上我们上面 make 好的 sdk(API 29)

bash 复制代码
out/host/linux-x86/sdk/sdk/android-sdk_eng.用户名_linux-x86

然后为了区分这个是咱们专门编译 aosp 的 sdk,给他改个名字

点击ok,保存之后,再次进入 project structure, 给 priject 配置 sdk

选择咱们的专用 sdk

点击 apply;

然后接着设置 modules 的 sdk,如下图所示,dependencies-Settings的Module SDK保持就好:

然后点击 modules ,再点击 Settings(咱们要调试的系统 app),选择 dependencies,配置上我们的专属 sdk:

点击apply,到此,android studio的环境就配置好了。

未完待续。。。

退出虚拟环境:

复制代码
deactivate

后续操作步骤:

bash 复制代码
source build/envsetup.sh 
lunch aosp_x86_64-eng
source venv39/bin/activate
#比如说加载 settings
aidegen Settings -i s
#打开studio后做自己的调试工作
#最后退出虚拟环境
deactivate

5、开启emulator,并调试

① 同样,在这样的环境中去打开 emulator

bash 复制代码
source build/envsetup.sh 
lunch aosp_x86_64-eng
source venv39/bin/activate
emlator

② 打开 Settings 应用的主 Activity

通过清单文件判断主 Activity 大致是这个,打上断点

③打开调试窗口

选择 Settings 应用,然后点击调试按钮

然后直接敲上 setting 就定位到了。

点击ok,此时就打开了 Settings 应用的调试。

④ 打开emulator,上滑,找到 Settings 应用,打开

此时,Settings 应用会停在空白页面,再打开我们的 android studio,查看断点 这样,我们就可以针对某个具体的页面,或者功能调试了!!!

相关推荐
皮皮宋吖4 分钟前
皮皮宋渗透日记 11|文件包含漏洞全解析:LFI/RFI/ 伪协议 / 绕过 / 防御
android·安全
阿拉斯攀登10 分钟前
【无人售货柜・RK+YOLO】篇 6:安卓端落地!RK3576 + 安卓系统,YOLO RKNN 模型实时推理保姆级教程
android·人工智能·yolo·目标跟踪·瑞芯微·嵌入式驱动
只能是遇见34 分钟前
ERROR 1524 (HY000) Plugin ‘mysql_native_password‘ is not loaded
android·数据库·mysql
helloworddm1 小时前
第一篇:设计模式在 Android 视频播放器中的实战应用
android·设计模式·音视频
恋猫de小郭1 小时前
Android 禁止侧载将正式实施,需要等待 24 小时冷静期
android·flutter·harmonyos
idealzouhu1 小时前
【Kotlin】 数据流完全指南:冷流、热流与 Android 实战
android·开发语言·kotlin
有位神秘人1 小时前
Android中Mvvm+Retrofit的常用网络架构记录
android·网络·retrofit
常利兵1 小时前
Android 字体字重设置:从XML到Kotlin的奇妙之旅
android·xml·kotlin
hnlgzb2 小时前
kotlin安卓app中,当一个类继承ViewModel类的时候,这个类是想干什么?
android·开发语言·kotlin
zh_xuan2 小时前
Android compose测试数据双向绑定
android·compose