《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,查看断点 这样,我们就可以针对某个具体的页面,或者功能调试了!!!

相关推荐
Gary Studio5 小时前
Android AIDL HAL工程结构示例
android
y = xⁿ6 小时前
MySQL八股知识合集
android·mysql·adb
andr_gale7 小时前
04_rc文件语法规则
android·framework·aosp
祖国的好青年8 小时前
VS Code 搭建 React Native 开发环境(Windows 实战指南)
android·windows·react native·react.js
黄林晴8 小时前
警惕!AGP 9.2 别只改版本号,R8 规则与构建链路全线收紧
android·gradle
小米渣的逆袭8 小时前
Android ADB 完全使用指南
android·adb
儿歌八万首8 小时前
Jetpack Compose Canvas 进阶:结合 animateFloatAsState 让自定义图形动起来
android·动画·compose
zhangphil9 小时前
Android Page 3 Flow读sql数据库媒体文件,Kotlin
android·kotlin
神探小白牙10 小时前
echarts,3d堆叠图
android·3d·echarts