type
status
date
slug
summary
tags
category
icon
password
之前说过使用VSCode阅读AOSP源码的方法,但是作为Android开发,还是对Android Studio熟悉一些,这里看下如何使用Android Studio查看AOSP源码.
如果你之前没完整的编译过AOSP,可以按照下面的流程进行配置:

第一步

source build/envsetup.sh make idegen
如果这一步成功了,没有报错,那么恭喜你,可以继续下一步了,如果报错了,到文章后面查看有没有你遇到的问题.

第二步

sudo ./development/tools/idegen/idegen.sh
这一步会在根目录下生成android.iprandroid.iml两个文件

第三步

使用Android Studio,选择Open an existing Android Studio Project打开上面生成的android.ipr文件即可

第四步

这一步要设置下JDK以及SDK:
notion image
这里需要按照自己下载的源码版本选择对应的SDK.
notion image
notion image
这一步需要新建一个不带classpath的JDK(点击+号,新建一个,改个名字,然后删除classpath就行),这个操作的话就会使用AOSP中的JDK环境了.

调试源码

可以找个模拟器,比如Genymotion,启动模拟器,然后在Android Studio里面选择对应的进程,就可以正常的进行调试了:
notion image

按需加载源码

如果一次性将所有源码都加载到Android Studio,第一次索引时间可能会非常久(半个小时都有可能).这个时候可以修改android.iml来让Android Studio不要加载哪些模块:
android.iml中搜索excludeFolder,然后在下面新增一些你不想加载的模块即可:
<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" /> <excludeFolder url="file://$MODULE_DIR$/.repo" />
当然,如果你的电脑性能非常好,可以不用修改这些,一次性加载就行
如果不想手动修改android.iml文件,还可以在Android Studio中操作:
notion image
被你排除的module会显示为橙色,正常加载的module为灰色.

可能会遇到的问题

  • Could not find a supported mac sdk: ["10.10" "10.11" "10.12" "10.13" "10.14"]
    • 在我的Macbook Pro上是出现了这个问题的,其实就是当前AOSP的soong编译工具还不支持MacOS 10.15,而我使用的正好是10.15,因此找到build/soong/cc/config/x86_darwin_host.go 文件,并新增10.15支持即可:
      darwinSupportedSdkVersions = []string{ "10.10", "10.11", "10.12", "10.13", "10.14", "10.15", }
      结尾那个逗号一定要带上,要不然会报错
      如果你不知道自己当前使用的sdk版本,可以使用下面的命令:
      find /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs -iname "*.sdk"
  • Java代码跳转错误
    • notion image
      比如ActivityThread中有:
      import static android.app.ActivityManager.PROCESS_STATE_UNKNOWN;
      一般不处理会“飘红”报错,那是因为引用的ActivityManager路径错了,引用到了test中去了.
      有两种解决办法:
    • 修改android.iml中的<oderEntry><sourceFolder>,对于不需要的module先excludeexclude无效再查看<orderEntry>,再不行就删除对应的<sourceFolder>
    • 最干脆的办法,其实原理也和上面一样
      • 把dependencies里一些乱七八糟的依赖都删掉,一劳永逸.(如果害怕删错了,可以找到对应的jar包删除)
        notion image

参考文章

  1. https://liuwangshu.cn/framework/aosp/4-import-aosp.html
  1. http://wuxiaolong.me/2018/08/15/AOSP3/
  1. https://stackoverflow.com/questions/50760701/could-not-find-a-supported-mac-sdk-10-10-10-11-10-12-10-13
  1. https://liuwangshu.cn/framework/aosp/5-debug-aosp.html
AOSP的编译Android中的Deep Link与 APP Link
姜康
姜康
一个软件工程师
公告
type
status
date
slug
summary
tags
category
icon
password
🎉博客网站重新制作了🎉
👏欢迎更新体验👏