关于Android源码的理解以及如何阅读源码

简介: 版权声明:本文为sydMobile原创文章,转载请务必注明出处! https://blog.csdn.net/sydMobile/article/details/78468941 文章最早发布于我的微信公众号 Android_De_Home 中,欢迎大家扫描下面二维码关注微信公众获取更多知识内容。
版权声明:本文为sydMobile原创文章,转载请务必注明出处! https://blog.csdn.net/sydMobile/article/details/78468941

文章最早发布于我的微信公众号 Android_De_Home 中,欢迎大家扫描下面二维码关注微信公众获取更多知识内容。
本文为sydMobile原创文章,可以随意转载,但请务必注明出处!

平时我们在用Android Studio开发项目的时候,如果想要查看源码,直接 Ctrl + 左键 查看对应的源码,你可能会发现有一些具体源码看不到,或者部分代码飘红。我们就来说说这一部分。

IDE查看源码出现的问题

我们的Android项目都是需要依赖Android SDK里对应的API Level的android.jar包的,这样才可以使用Android提供的API,在IntelliJ里面,查看具体类的源码的时候,如果Android SDK里对应的API Level的Source包有下载的话,IDE会打开对应的Source包,如果没有下载的话,IDE会把对应的API Level的android.jar包反编译场成Java代码,这个规则对于其他的一些第三方的开源项目也是一样的。但是你最好还是下载Source源码来查看,有的时候反编译的Java代码不可能完全和源代码一样,有时候反编译的代码的执行逻辑可能完全等价,但是可阅读性不好,有可能会缺少重要的代码注释。

因为Android SDK自带的Source源码包很小(你可能会说已经好几个G了还小啊,后面会讲到真正的Android源码,哪个时候你就知道了),并没有包括所有的Android Framework的源代码仅仅是提供给应用开发者参考使用,有一些比较少的系统类的源码没有给出,所有你有可能在查看源代码的时候看到这种情况
RuntimeException(“Stub”)
runtimeexception
查看代码的时候遇到这种情况,表示实际运行的时候逻辑会到Android ROM(这里Android ROM可以理解为你Android手机的Android系统,里面同样也包含了你在开发的时候用到的类)里面找相对应的类和方法来代替执行。
此外我们在IDE中查看源代码的时候,还会经常看到一些类和方法中会出现报红(也就是找不到)的情况,这种情况在我们查看源代码的时候是很常见的。
飘红

这种情况并不是说这些方法或者变量是不存在的,而是这些方法因为出于安全或者某些原因被我们使用的Android SDK隐藏了,这些API不直接暴露给应用层的开发者,这些类和方法在Android源码编译完成的android.jar包里面会把这些API隐藏(如果是你自己编译的Android源码的话就不会了,后面的文章会讲),而我们的Android项目是依赖这个编译后的android.jar包的,所以我们在查看源码的时候,IDE就会自动去android.jar里面找对应的API,所以就会出现这种情况了,实际上这种API同样在ROM中是存在的,有些开发者发现了一些可以修改系统行为的隐藏API,在应用层通过反射的方式强行调用这些API执行系统功能,这种手段也是一种HACK。

上面讲了我们在IDE中直接查看源码有可能会出现的问题,下面就介绍一下怎么查看完整的源码。

查看完整源码

当你需要查看完整源码的时候,需要去AOSP(Android Open Source Project)项目里面找了,(需要科学上网)这个里面放着Android真正的完整源码,这里所说的完整源码不仅仅包括Android系统的源码还包括了一些开发工具比如:aapt、adb等等。
android源码
选择自己需要的下先来,如果全部下载下来估计有几个T吧,不过其实是不需要的,作为应用层的开发,我们看应用层源码就好了
应用层源码

介绍查看源码工具:

  1. Chrome扩展工具
    Android SDK Search
    使用这个插件在谷歌浏览器中,打开Android的官网查看API说明的时候,会有个按钮,通过点击这个按钮就可以直接跳转到AOSP中对应的源码中
    插件

    注意仅适用于Android开发者官网上查看API文档,不适用国内的那个镜像网址。
  2. Source Insight查看完整源码
    一个强大的查看源码的软件,把你在AOSP中下载的源码导入到这个软件中就可以快速的查看源码了
    Source Insight
    破解方法:http://www.cnblogs.com/Napoleon-Wang/p/6706773.html
    具体操作方式:
    http://blog.csdn.net/shulianghan/article/details/50553001
  3. 直接将编译后源码导入Android Studio查看
    具体操作步骤:
    http://www.jianshu.com/p/fb16fa459acf
    关于源码的学习:
    http://www.jianshu.com/p/a4b40a9d1b4f

参考:
http://kaedea.com/2016/02/09/android-about-source-code-how-to-read/




AndroidInterviewQuestions
关注微信公众号,及时获取内容更新

目录
相关文章
|
24天前
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
79 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
24天前
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
44 1
|
24天前
|
Android开发 Docker 容器
docker中编译android aosp源码,出现Build sandboxing disabled due to nsjail error
在使用Docker编译Android AOSP源码时,如果遇到"Build sandboxing disabled due to nsjail error"的错误,可以通过在docker run命令中添加`--privileged`参数来解决权限不足的问题。
87 1
|
24天前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
132 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
24天前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
36 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
24天前
|
Android开发
我的Android 进阶修炼(1): AOSP源码根目录结构
本文介绍了AOSP源码的根目录结构,提供了基于MTK9269 Android 9.0源码的目录说明,帮助读者了解AOSP源码的组织方式和各目录的功能。
38 0
我的Android 进阶修炼(1): AOSP源码根目录结构
|
25天前
|
API 开发工具 Android开发
Android源码下载
Android源码下载
87 0
|
24天前
|
开发工具 Android开发 git
全志H713 Android 11 :给AOSP源码,新增一个Product
本文介绍了在全志H713 Android 11平台上新增名为myboard的产品的步骤,包括创建新的device目录、编辑配置文件、新增内核配置、记录差异列表以及编译kernel和Android系统的详细过程。
29 0
|
24天前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
36 0
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的高校后勤网上报修系统安卓app附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的高校后勤网上报修系统安卓app附带文章源码部署视频讲解等
36 0

相关实验场景

更多