如何下载并查看Android源码

引言

作为一名Android 开发人员,很有必要阅读Android源码,平时在编译器如AndroidStudio或IntelliJ中,只要是创建Android项目工程,就能够查看到Framework层的源码,但是这样看源码有两个弊端:

1.容易处在一种盲人摸象的状态,只能看到局部,不能总览全局;
2.看到的Framework层源码跟编译时使用的版本号相关,如果版本号很低,想看到最新的Android源码就十分的不方便。

还有一个很重要的原因,Google在Android P版本中,对非SDK接口进行了限制,什么意思?Google建议使用官方提供的SDK接口,对一些私有的API,Google是限制,甚至是禁止使用的。

Android P中SDK接口限制

Google在最新的Android P版本中,对SDK接口的使用进行了严格的限制,这样的限制必将会对Android 应用的开发者带了影响,Google限制通过反射,JNI等方式调用非SDK接口,如果调用这些接口势必会带来兼容性问题,甚至会出现Crash。为了降低影响的程度,有必要了解一下SDK接口限制。

什么是SDK接口

凡是能够在Google官网上查到的接口,都是SDK接口,这些API是可以直接使用的。除了上面提到的接口,剩下的接口都是限制使用的。

继续使用非SDK接口会有哪些影响

Google对非SDK接口提供了灰名单机制,将目前Android应用或定制OS调用的非SDK接口分进行了分级,分别为浅灰名单,深灰名单和黑名单。不同名单中的接口有不同的处理策略。

  1. 浅灰名单,Google目前还没有可替代的SDK接口,暂时放在浅灰名单中。在Android P预览版上调用时会出现警告。
  2. 深灰名单,Google目前已经提供了可替代的SDK接口,开发者需要进行整改。这部分接口在Android P以下设备调用时出现警告,Android P及以上设备调用时出现Crash。
  3. 黑名单,浅灰名单和深灰名单之外的非SDK接口,都放在了这个名单中,这部分接口调用就会出现Crash。

Google也提供了一个过渡期,这个过渡期是随着Android P版本同步的,在Android P最终版本发布之前,可以向Google发邮件申请,进行评估。地址
20180703153058913695268.png

如何修改使用到的非SDK接口

Google提供的 Veridex 扫描工具,可以扫描apk中使用的API。

Veridex下载地址

Veridex使用方法

解压下载的Veridex压缩包,Terminal进入到解压后的目录,将要进行扫描的APK拷贝到解压后的目录中,执行命令。

1
./appcompat.sh --dex-file=test.apk

扫描完成后,就可以看到扫描之后的结果,这里扫描到了98个非SDK API的调用,下面就要针对扫描出来的各个API进行调整了。开发者需要重点关注深灰名单及黑名单中的接口。
20180703153059903252234.png

如何下载Android源码

这里介绍一下Android Framework源码的下载,这里提供两个下载地址,下载之前可能需要准备好梯子,关于如何优雅的翻墙,可以看之前分享的一篇文章如何优雅的飞跃长城

github下载地址
Google官方下载地址

这里使用git的方式下载,方便后面更新。
20180704153068451557786.png

如何查看Android源码

在Windows平台,有一个看源码的神器SourceInsight,但是在Mac平台还没有替代产品,这里介绍使用Sublime Text。打开Sublime Text。

File –> open 定位到源码下载的目录,就可以方面的查看源码了。
20180704153068772575884.png

在查看源码时,有时需要能够直接进行跳转,这时需要安装CTags插件。

1. 在Sublime Text中,Preferences –> Package Control
20180704153068856974079.png

2.在弹出的Package Control窗口中选择Install Package,选择CTags插件进行安装
20180704153068870646902.png

3.在CTags插件中添加跳转方式,Preferences –>Package Settings –> CTags –> Mouse Bindings-Default
20180704153068884216372.png

4. 拷贝出里边的配置文件
20180704153068894421498.png

5. 复制到Preferences –>Package Settings –> CTags –> Mouse Bindings-User中
20180704153068898237535.png

6.在Sublime Text中打开文件的根目录右键–> CTags:Rebuild Tags,让我们设置的跳转方式生效
20180704153068900113818.png

遇到的问题及处理办法

1.下载源码过程中遇到 error: RPC failed; curl 56 SSLRead() return error -9806835.00 KiB/s
引起的原因多数与网络环境有关,解决办法,如果使用git下载,建议更换到SSH key的方式进行下载。

2.使用Sublime Text插件CTags时,遇到错误提示
20180704153068850714232.png

遇到这个问题,多数是由于CTags插件版本引起的,进入Terminal,重新下载安装CTags插件。
20180704153068953579156.png

安装完成后,查看CTags的安装目录,这里是/usr/local/bin,定位到我们下载好的Android源码的根目录,执行命令

1
/usr/local/bin/ctags -R -f .tags

待编译完成,生成.tags文件后,就可以在看代码时,使用快捷键进行跳转了。
20180704153068964449010.png

参考文献

  1. https://testerhome.com/topics/13699
  2. https://developer.android.google.cn/reference/packages

      

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×