0.查看Android framework源码

参考

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

https://www.zhihu.com/question/19759722

?

查看系统源码说明

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

?

在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.解决方法

方法一

大致流程就是:我们可以从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

?

使用Idea查看Android源码

之前有eclipse来查看Android的framework源码,但eclipse的查找功能太弱,不太方便。AS的查看很方便但每次查看Android源码都得修改platform的android.jar,很不方便。

可以用IntelliJ IDEA来进行查看。

关联Android sdk,

?

随便创建一个java项目即可

然后打开项目的Project Structure,在sdks下可以看到可用的sdk,其中就包含了Android sdk,就可以通过修改classpath

?

然后再modules选项卡中,项目根目录的dependencies时jdk,这里可以直接就修改根目录的引用的sdk。

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

?

?

?

在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,即可。

?

?

?

?

原文地址:https://www.cnblogs.com/muouren/p/11701664.html

时间: 2024-11-10 21:05:50

0.查看Android framework源码的相关文章

Android Eclipse中查看 Android框架源码

有时候用Eclipse想按住ctrl键查看源码怎么办? 下面具体步骤让你轻松看源码: project->properties->java build path->libraries 点击android.jar下面的source: 这里可以添加zip和文件夹,zip可以去git下载,我这里用的是用sdk manager下载的源码,如下: 从这里面下载的源码就保存在sdk下面的source下面,选一个平台关联就可以了 下面就是button源码: @RemoteView public clas

Android Framework源码反编译

部分设备crash在Framework代码,但又和开源代码对应不上,这时需要拉取设备里面的Framework并反编译源代码排查问题. 1.获取Framework文件: adb pull /system/framework 获取Framework文件夹下面的内容,可能有framework.jar和framework.odex,如果framework.jar解压出来有dex则反编译dex即可,如果framework.jar里面没dex则需要先反编译framework.odex文件至dex文件: 2.

Android 如何在Eclipse中查看Android API源码 及 support包源码

当我们阅读android API开发文档时候,上面的每个类,以及类的各个方法都是已经写好的方法和控件,可是我们只是在搬来使用,不知道它的原理,它是如何被实现的.android系统是开源的,所以谷歌官方在每发布一个版本的时候都会放出它对应的API源码的,让我们可以深入了解android的API实现过程,这就是开源的魅力.如果我们从API源码的角度去了解了开发过程,那样对于作为开发人员的我们,便会对他有更深入的体会,有助于日后的软件开发. 比如查看Activity的源码,如图 也可以查看系统方法怎么

【转】Android 如何在Eclipse中查看Android API源码 及 support包源码

原文网址:http://blog.csdn.net/vipzjyno1/article/details/22954775 当我们阅读android API开发文档时候,上面的每个类,以及类的各个方法都是已经写好的方法和控件,可是我们只是在搬来使用,不知道它的原理,它是如何被实现的.android系统是开源的,所以谷歌官方在每发布一个版本的时候都会放出它对应的API源码的,让我们可以深入了解android的API实现过程,这就是开源的魅力.如果我们从API源码的角度去了解了开发过程,那样对于作为开

如何阅读android framework源码

但如果想深入的了解Android系统, 那么可以看下我的一些简单的总结. 知识 Java Java是AOSP的主要语言之一. 没得说, 必需熟练掌握. 熟练的Android App开发 Linux Android基于Linux的, 并且AOSP的推荐编译环境是Ubuntu 12.04. 所以熟练的使用并了解Linux这个系统是必不可少的. 如果你想了解偏底层的代码, 那么必需了解基本的Linux环境下的程序开发. 如果再深入到驱动层, 那么Kernel相关的知识也要具备. Make AOSP使用

使用eclipse调试android的framework源码

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=325492 这篇文章中的第3和第4章分别介绍了java和c/cpp代码的调试,调试可以大大减少log查看花费的工作量. (1)调试java代码已经验证过了,主要是在eclipse中建立一个相同package名的安卓应用工程, 工程目录中导入源码,并在java窗口打开:在DDMS中去指定要调试的thread,在Debug窗口打开源码设置断点: 如果目录结构能同包名,则可以直接调试 如果目

如何用Android Studio查看build.gradle源码

上一篇博客里讲过 build.gradle 里的每一行代码基本都是在调用一个方法,既然是这样,我们就可以用 android studio(下面简称as) 去查看它源码的方法注释说明,这样就可以理解每个方法是做什么的了,就算是在大神的 build.gradle 遇见一些没看懂的代码,也可以点进去看方法介绍来理解.就像我们在查看 SDK 里的各种方法一样. 但是有个问题,应该也有小伙伴跟我一样吧,每次在大神的 build.gradle 看到一堆不懂的代码时,按住 Ctrl 键后,鼠标移到代码上时有个

.NET Framework源码查看与调试

1. 直接下载.NET Framework源代码(下载地址),然后用Visual Studio打开查看. 2. 在线查看,网址:http://referencesource.microsoft.com/ . Refer: A new look for .NET Reference Source http://blogs.msdn.com/b/dotnet/archive/2014/02/24/a-new-look-for-net-reference-source.aspx Configure V

在线看Android系统源码,那些相见恨晚的几种方案

请尊重分享成果,转载请注明出处,本文来自逆流的鱼yuiop,原文链接:http://blog.csdn.net/hejjunlin/article/details/53454514 前言:最近在研究MediaCodec,u盘坏了,之前下载的源码也就自然没有了,真是个难过的事情,不能因为没有源码了,就阻挡我的计划了呀,于是就是今天一文,在线看Android源码,加之此前很多人也有向我留言,如何看android系统的源码,今天来敲黑板,划重点了. 不管是做Android底层开发,还是做应用层开发,在