0.查看Android framework源码

青春须早为,岂能长少年。这篇文章主要讲述0.查看Android framework源码相关的知识,希望能为你提供帮助。
参考http://kaedea.com/2016/02/09/android-about-source-code-how-to-read/
https://www.zhihu.com/question/19759722
https://blog.csdn.net/hejjunlin/article/details/53454514
 
查看系统源码说明1.可以在sdk中source查看大部分framework源码
 
2.如果在sdk中的source找不到某系统类源码,则可以在官方源码网查看
https://android.googlesource.com/?format=html
 
其中framework源码在platform/frameworks/base,
android/platform/frameworks/base/android-xxx/./core/java
 
在线查看系统源码http://androidxref.com/
 
https://cs.android.com/
这个是官方出的,和第一个类似。
 
在AS 中查看隐藏的API源码 platform和sources目录的关系AS会把platform里面的android.jar里的class文件关联到sources里对应的java文件。
也就是说android.jar里面没有的类,在AS里也看不到,android.jar有对应的class文件才能映射到sources里对应的java文件。
如果没有对应api的sources的话就会解析显示android.jar里的class文件。
 
1.介绍Android有两种类型的API是不能经由SDK访问的。

  • 第一种是位于com.android.internal包中的API。我将称之为internal API。
  • 第二种API类型是一系列被标记为@hide属性的类和方法。
Internal和hidden API的编译时 vs 运行时
当你使用Android SDK进行开发的时候,你引用了一个非常重要的jar文件——android.jar。它位于Android SDK平台的文件夹中(SDK_DIR/platforms/platform-X/android.jar)。这个android.jar移掉了com.android.internal包中所有的类,也移掉了部分标记有@hide的类,枚举,字段和方法。
每个模拟器或真机在运行时都会有一个等同android.jar的东西,叫做framework.jar,它和android.jar等同,而其未移掉internal API和hidden API。当你在设备上启动应用程序时,它将加载framework.jar。
但这样对开发者来说,并不能友好地访问,因此,我将向大家展示不通过反射如何使用这些API。
 
2.解决方法 方法一
【0.查看Android framework源码】大致流程就是:我们可以从framework.jar,提取出原始的.class文件,并拷贝到Android SDK的android.jar中。
注意:模拟器通常在.dex文件中包含代码,而真机一般在优化版的dex文件中包含代码——odex文件。操作odex文件比较困难,这也是为什么我选择模拟器的原因。
 
  1. adb pull /system/framework/framework.jar或使用DDMS里的File Explorer。
  2. 从framework.jar中提取出classes.dex,
  3. 使用dex2jar工具,将其转换成classes.jar
  4. 然后把classes.jar里的文件都替换到android.jar中。
  5. 替换D:\\Android\\sdk\\platforms\\android-xx里的android.jar即可注意:记得备份原android.jar
     
    注意:可能高版本系统把隐藏api分到了多个jar包中,所以都需要进行上面操作
  • android.policy.jar
  • framework.jar
  • framework2.jar
  • services.jar
方法二
在万能的GitHub已有人去除Android.jar中@hide注解
地址: https://github.com/anggrayudi/android-hidden-api
1.下载对应API版本的Android.jar
2.替换SDK/platforms/android-版本/Android.jar
3.重新打开IDE就可以查看
 
直接调用隐藏API的缺点:1.Android隐藏API是因为不能保证这些API还存在新系统版本, 所以尽量少用隐藏API!
2.不利于团队合作,如果有人使用正常Android.jar就无法编译如endCall()之类的隐藏API!
 
 
 
eclipse中查看Android源码 在eclipse中随便创建一个项目,
右键项目-》properties-》java build path-》Libraries-》Add external jars-》选择D:\\Android\\sdk\\platforms\\android-xx\\android.jar
 
在android.jar下的source attachment
0.查看Android framework源码

文章图片

0.查看Android framework源码

文章图片

 
使用Idea查看Android源码之前有eclipse来查看Android的framework源码,但eclipse的查找功能太弱,不太方便。AS的查看很方便但每次查看Android源码都得修改platform的android.jar,很不方便。
可以用IntelliJ IDEA来进行查看。
关联Android sdk,
0.查看Android framework源码

文章图片

 
随便创建一个java项目即可
然后打开项目的Project Structure,在sdks下可以看到可用的sdk,其中就包含了Android sdk,就可以通过修改classpath
0.查看Android framework源码

文章图片

 
然后再modules选项卡中,项目根目录的dependencies时jdk,这里可以直接就修改根目录的引用的sdk。
0.查看Android framework源码

文章图片

或者可以创建一个新的module,修改module的dependencies,这样就可以同时访问jdk和Android sdk中的源码。
0.查看Android framework源码

文章图片

 
 
 
在AS 中查看隐藏的API源码2不知道怎么回事,在idea上查看不了布局,所以经过各种尝试又回到了使用AS查看源码。
具体就是模仿idea在project structure中的设置。最终其实是修改的C:\\Users\\puppet\\.IdeaIC2019.2\\config\\options\\jdk.table.xml文件。
由于as在3.4中修改了project structure界面,把sdks去掉了,没法再ide上修改,所以直接手动修改jdk.table.xml。
  1. 打开C:\\Users\\puppet\\.AndroidStudio3.4\\config\\options\\jdk.table.xml文件,找到对应的Android版本,在< classPath> 标签里加入对应的完全版android.jar。
  2. 然后重启as,即可。
0.查看Android framework源码

文章图片

 

    推荐阅读