3 回答
TA贡献1946条经验 获得超3个赞
我已经对此进行了一些调查,而我的结论很简单:没有大量工作就无法完成。阅读此答案的其余部分,以详细了解我所发现的内容。
android.jar
实际上由“公共API”的framework.jar
和core.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
工具。(不幸。)
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中的任何实际代码。)
- 3 回答
- 0 关注
- 534 浏览
添加回答
举报