为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用可用的隐藏API和内部API构建Android SDK?

如何使用可用的隐藏API和内部API构建Android SDK?

牧羊人nacy 2019-10-15 10:00:13
我想重建Android SDK(或更确切地说,仅是android.jar)以包括隐藏的和内部的API。我找不到有关如何执行此操作的任何文档或讨论。我已经安装了一个能够构建cm7的Ubuntu CyanogenMod构建环境。现在,我读到make SDK将构建SDK,但我想构建一个SDK,其中包含使用@hide标记为隐藏的方法和字段。这可能吗?我想要做的是对使用隐藏API的应用程序进行更改,为了重建它,我想使用修改后的SDK。
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

我已经对此进行了一些调查,而我的结论很简单:没有大量工作就无法完成。阅读此答案的其余部分,以详细了解我所发现的内容。


android.jar实际上由“公共API”的framework.jarcore.jar被发现在system/frameworks/该设备上。android.jar我称之为Java库标头,实际字节码中的所有实现都只是一个throw new RuntimeException("stub");,这使您可以针对它android.jar(例如在Eclipse中)进行构建,但是必须在设备或仿真器上执行。

Android SDK的公共API由@{hide}javadoc注释为前缀的类/方法/字段定义。也就是说,所有注释的内容都包含在SDK中。

android.jar从位于源中内置out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates本身由工具生成DroidDoc位于build/tools/droiddoc

DroidDoc是生成实际Android SDK文档的工具(可能是从javadoc改编而成,或使用javadoc改编而成)。作为副作用,可能是因为它已经解析了所有javadoc,所以它还会喷出android存根,然后将android.jar其编译为在SDK中分发的。

因此,要包含隐藏的内容,如果只想包含特定部分,则可以删除@hide注释并重新构建SDK。

但是,如果要包括所有隐藏部分,事情会变得复杂得多。您可以修改DroidDoc(相关资源在中build/tools/droiddoc/src/Stubs.java),以使任何内容都不会被检测为隐藏。这相当琐碎,我已经尝试过了,但是随后生成的存根根本无法编译。

我现在的结论是,这根本不可行。如果删除DroidDoc中检测隐藏注释的部分,则生成的存根将无法编译,并且需要大量工作才能正确编译。

因此,我对您的问题的回答是:不,如果不做很多工作就无法完成。抱歉。


有关该mkstubs工具的旁注。mkstubs在构建SDK插件时使用,即您可以在Android SDK管理器中从供应商处找到的插件,例如Samsung为您提供针对Samsung手机特定内容的附加API。mkstubs与DroidDoc存根生成过程几乎相同,但是它不使用@hide注释,它使用一个.defs文件来描述要从SDK插件中包含或排除哪些程序包/类/字段。

然而,这一切无关的问题,如在Android SDK构建并不能使用该mkstubs工具。(不幸。)


查看完整回答
反对 回复 2019-10-15
?
噜噜哒

TA贡献1784条经验 获得超7个赞

我们可以从Android平台重建* .jar文件。


首先,将ADB连接到您的设备。然后运行:


adb pull /system/framework/core.jar .

adb pull /system/framework/framework.jar .

在core.jar包含标准的Java库(java.*)和framework.jar包含了Android库(android.*)。由于实际文件是DEX格式而不是JAR格式,因此尚不可用。


我们可以使用诸如dex2jar之类的工具将这些DEX格式的* .jars转换为真实的JAR :


dex2jar core.jar

dex2jar framework.jar

然后使用“添加外部JAR ...”拉入这些jar(假设您正在使用Eclipse ADT)


右键单击Project → Properties → Java Build Path → Libraries → Add External JARs...→(从上方选择core-dex2jar.jar和framework-dex2jar.jar)。

这将使您能够使用内部和某些Java 7 API。(据我所知,生成的APK不包含JAR中的任何实际代码。)


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 534 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信