Android Studio源码导入与调试
从事Android开发都需要涉及到Android源码的阅读,特别是系统应用或者Framework开发,读代码的时间远远比写代码的时间更多。
一、 生成iml与ipr
在Android Studio中导入AOSP源码,需要利用以下配置文件:
- android.iml AS工程配置文件,记录项目所包含的module、依赖关系、SDK版本等。
- android.ipr AS导入配置文件,记录工程的具体配置,代码以及依赖的lib等信息。
在完成了AOSP的编译后,接下来可以在AOSP源码中生成上述配置文件,依次执行:
#配置环境 source build/envsetup.sh lunch #选择好target #编译idegen mmm development/tools/idegen/ #生成ipr与iml文件 development/tools/idegen/idegen.sh
执行上述指令后,回到AOSP根目录中生成android.iml
与android.ipr
文件。此时可以直接利用Android Studio
打开android.ipr
文件就可以直接完成导入。
配置android.iml
第一次导入需要的时间会非常长,如果电脑配置不是很好,不建议全部导入,可以选择性导入需要的模块。此时可以修改android.iml文件,可以自定义只加载哪些模块。在android.iml中搜索excludeFolder
,根据需要去除掉不需要导入的模块,如只需要导入framework
模块,则配置iml如下:
<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$/out/host" /> <excludeFolder url="file://$MODULE_DIR$/out/target/common/docs" /> <excludeFolder url="file://$MODULE_DIR$/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_interme diates" /> <excludeFolder url="file://$MODULE_DIR$/out/target/product" /> <excludeFolder url="file://$MODULE_DIR$/prebuilt" /> <excludeFolder url="file://$MODULE_DIR$/art" /> <excludeFolder url="file://$MODULE_DIR$/bionic" /> <excludeFolder url="file://$MODULE_DIR$/bootable" /> <excludeFolder url="file://$MODULE_DIR$/build" /> <excludeFolder url="file://$MODULE_DIR$/compatibility" /> <excludeFolder url="file://$MODULE_DIR$/dalvik" /> <excludeFolder url="file://$MODULE_DIR$/packages" /> <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$/external" /> <excludeFolder url="file://$MODULE_DIR$/hardware" /> <excludeFolder url="file://$MODULE_DIR$/kernel" /> <excludeFolder url="file://$MODULE_DIR$/libcore" /> <excludeFolder url="file://$MODULE_DIR$/libnativehelper" /> <excludeFolder url="file://$MODULE_DIR$/out" /> <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" /> <excludeFolder url="file://$MODULE_DIR$/vendor" />
三、Android Studio配置
完成修改后,再使用Android Studio打开ipr文件即可。后续如果需要增加或者排除其他模块,可以通过Android Studio进行配置。
完成导入后,当我们点击某个类如Activity,此时可能跳转至Android Studio中的SDK对应的class或者source。此时我们希望跳转到我们自己下载的AOSP源码中,还需要进行如下配置:
如果发现通过界面移动依赖顺序无效,此时可以打开android.iml文件,找到orderEntry 配置,最终修改的配置结果为:
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="jdk" jdkName="Android API 33, extension level 4 Platform" jdkType="Android SDK" />
四、调试
要调试代码,首先要打开模拟器,注意不是Android Studio自带的模拟器,而是通过编译后的代码启动的模拟器,否则可能出现代码不对应的问题。
source build/envsteup.sh lunch x #和编译时对应 #启动模拟器 emulator
接下来通过Run->Attache debugger to Android process
,在弹出的Choose Process
框内必须选择Show all processes
,否则看不到相关的进程:然后选择system_process
,就可以进行调试了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!