android studio build debug ASOP
debug 配置
- cpu 最低6核12 推荐8核16
- 内存 最少32G, 推荐64G
- 硬盘:SSD 最少512G 推荐1T
源码目录结构:
frameworks/ :包含 Android 系统框架的代码。
libcore/ :包含 Android 核心库 (Libcore) 的代码。
packages/ :包含 Android 系统内置应用程序和服务的代码。
sdk/ :包含 Android 软件开发工具包 (SDK) 的代码和工具。
system/ :包含 Android 系统服务和应用程序的代码。
hardware/ :包含 Android 硬件抽象层 ( HAL ) 的代码。
kernel/ :包含 Linux 内核 的代码。
art/:包含 Android 运行时 (ART) 的代码。
bionic/:包含 Android C 库 (Bionic) 的代码。
bootable/:包含 Android 启动相关的代码。
build/:包含 Android 编译系统的代码和配置文件。
cts/:包含 Android 兼容性测试套件 (CTS) 的代码和测试用例。
dalvik/:包含 Dalvik 虚拟机的代码。
development/:包含 Android 开发工具和示例代码。
device/:包含设备树和硬件相关的代码。
docs/:包含 Android 系统文档和开发者指南。
external/:包含 Android 系统使用的外部开源项目的代码。
libnativehelper/:包含 Android JNI 帮助库的代码。
ndk/:包含 Android Native Development Kit (NDK) 的代码和工具。
out/:包含 Android 编译系统生成的临时文件和输出文件。
pdk/:包含 Android 兼容性测试套件 (CTS) 的 Java API。
prebuilts/:包含预编译的二进制文件和工具链。
tools/:包含 Android 开发工具和实用程序的代码。
安装JDK
Ubuntu下JDK安装
#更新库
apt update
#查看jdk版本
apt search openjdk
#安装jdk
apt install openjdk-11-jdk
#查看已存在安装版本的jdk
update-alternatives --list java
#选择要使用的版本
update-alternatives --config java
#查看java编译器版本
update-alternatives --list javac
#更改java编译器版本
update-alternatives --config javac
#查看版本
java -version
生成android.ipr文件
cd ~/aosp
source build/envsetup.sh
lunch aosp_oriole-userdebug
make idegen -j16
编译完成后有idegen.jar生成 [100% 5/5] Install out/host/linux-x86/framework/idegen.jar
./development/tools/idegen/idegen.sh
android.ipr 和android.iml文件
若出现Couldn't find idegen.jar. Please run make first.则需要执行
source build/envsetup.sh
mmm development/tools/idegen/
然后再执行
//改成可读可写,否则,在更改一些项目配置的时候可能会出现无法保存的情况
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
修改anroid.iml
搜索 excludeFolder,把下面的内容加进去
<excludeFolder url="file://$MODULE_DIR$/./external/emma" />
<excludeFolder url="file://$MODULE_DIR$/./external/jdiff" />
<excludeFolder url="file://$MODULE_DIR$/out/eclipse" />
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/external/bluetooth" />
<excludeFolder url="file://$MODULE_DIR$/external/chromium" />
<excludeFolder url="file://$MODULE_DIR$/external/icu4c" />
<excludeFolder url="file://$MODULE_DIR$/external/webkit" />
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs" />
<excludeFolder url="file://$MODULE_DIR$/prebuilt" />
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/kernel" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/test" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
或设置:
Project Structure -> Modules, 可快速去除某些模块, 其中红色代码Exclueded选项(即代表已删除的目录),
打开 android.ipr
打开Android Studio,File->open,选择需要导入工程根目录下的android.ipr文件
关联源码跳转
-
配置JDK/SDK
- 调试源码
- 跳转源码
- 排除非SDK代码的跳转
-
JDK(Java Development Kit)Java编译器、标准库
-
Android SDK(Android Software Development Kit)Android工具和库
-
classpath 是指包含 Java 类文件的目录列表。编译器会在 classpath 中查找所需要的类文件。
-
sourcepath 是指包含 Java 源文件的目录列表。编译器可以使用 sourcepath 中的源文件来调试 Java 代码。
新建JDK(No Libraries)
- File->Projects Structure->SDKs,新建JDK并任取一个名字,
- 清空Classpath、Sourcepath、Annotations、Documentation Paths
- JDK home path 选择/usr/bin/jvm/java-8-jdk-amd64
配置SDK
Project Structure -> SDKs, 选中Android API 34 Platform, 然后选择其Java SDK为前面新建的JDK(No Libraries)
配置SDK
- Project Structure -> SDKs, 选中Android API 34 Platform, (版本不要太低),
- Java SDK栏选择刚刚新建的JDK,清空Classpath,Sourcepath,Annotations,Documentation Paths
- Android SDK home path 目前不知道作用,选 /home/username/Android/Sdk
product中选Android API 34 Platform
在product中选Android API 34 Platform
建立依赖
Modules -> android -> Dependencies
- 删除Android API 25 Platform之外的所有依赖
- 然后点击下图绿色的+号来选择Jars or directories,添加frameworks, 也可添加其他的源码.
下图便是添加后的结果图:
Apply -> OK
在线调试
frameworks各大核心服务运行在system_server进程,
在调试器上名字为system_process,通过如下操作attach到我们要调试的目标进程,
同理, 要调试其他app进程也是这个方式.
测试debug
首先需要设置断点, 一旦进入断点便会停下来, 可以查看当时各个线程/变量值. 关于调试下一步等快捷键, 只需点击Tools即可看到.
断点1 设置电源中
SettingsBaseActivity.java文件中
void onCreate
打断点
运行 Setting 应用在 IDE attach 到 setting 进程
然后打开设置中的电源,就可以debug了.
断点 2
ActivityTaskManagerService.java中的startActivityAsUser
任意启动一个app都会运行断点
更多断点知识:https://juejin.cn/post/7349446682826948617
其他知识点
类型 | eng | userdebug | user |
---|---|---|---|
ro.debuggable | 1 | 1 | 0 |
ro.kernel.android.checkjni | 1 | 0 | 0 |
ro.secure | 0 | 0 | 1 |
adb(默认状态) | 1 | 1 | 0 |