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

相关推荐
啦啦9117142 小时前
安卓手机/平板/TV版 Rotation强制横屏显示工具!免ROOT可用!再推荐突破手机限制的3款神器
android·智能手机·电脑
汤面不加鱼丸3 小时前
flutter实践:混合app在部分android旧机型上显示异常
android·flutter
_李小白4 小时前
【Android FrameWork】延伸阅读:ActivityManagerService启动Activity
android
用户41659673693554 小时前
Android 媒体库高效扫描器:基于协程与 `ContentObserver` 的 `FileScanner`
android
Arenaschi4 小时前
Android中的release下面的包有什么左右和debug 的包有什么区别
android
stevenzqzq4 小时前
android recyclerview缓存2_四级缓存机制
android·spring boot·缓存
用户69371750013845 小时前
Kotlin 函数详解:命名参数与默认参数值
android·后端·kotlin
卓修武K5 小时前
Android系统BUG:修改线程名目标错乱问题探究
android
二流小码农6 小时前
鸿蒙开发:支持自定义组件的跑马灯
android·ios·harmonyos