0.查看Android framework源码

0.查看Android framework源码,第1张

概述参考 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:

参考

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文件比较困难,这也是为什么我选择模拟器的原因。

?

adb pull /system/framework/framework.jar

或使用DDMS里的file Explorer。

从framework.jar中提取出classes.dex, 使用dex2jar工具,将其转换成classes.jar 然后把classes.jar里的文件都替换到androID.jar中。 替换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。

打开C:\Users\puppet\.AndroIDStudio3.4\config\options\jdk.table.xml文件,找到对应的AndroID版本,在<classpath>标签里加入对应的完全版androID.jar。 然后重启as,即可。

?

?

?

?

总结

以上是内存溢出为你收集整理的0.查看Android framework源码全部内容,希望文章能够帮你解决0.查看Android framework源码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1121385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存