3 回答

TA貢獻(xiàn)1946條經(jīng)驗 獲得超3個贊
我已經(jīng)對此進行了一些調(diào)查,而我的結(jié)論很簡單:沒有大量工作就無法完成。閱讀此答案的其余部分,以詳細(xì)了解我所發(fā)現(xiàn)的內(nèi)容。
android.jar
實際上由“公共API”的framework.jar
和core.jar
被發(fā)現(xiàn)在system/frameworks/
該設(shè)備上。android.jar
我稱之為Java庫標(biāo)頭,實際字節(jié)碼中的所有實現(xiàn)都只是一個throw new RuntimeException("stub");
,這使您可以針對它android.jar
(例如在Eclipse中)進行構(gòu)建,但是必須在設(shè)備或仿真器上執(zhí)行。
Android SDK的公共API由未以@{hide}
javadoc注釋為前綴的類/方法/字段定義。也就是說,所有未注釋的內(nèi)容都包含在SDK中。
android.jar
從位于源中內(nèi)置out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates
本身由工具生成DroidDoc位于build/tools/droiddoc
。
DroidDoc是生成實際Android SDK文檔的工具(可能是從javadoc改編而成,或使用javadoc改編而成)。作為副作用,可能是因為它已經(jīng)解析了所有javadoc,所以它還會噴出android存根,然后將android.jar
其編譯為在SDK中分發(fā)的。
因此,要包含隱藏的內(nèi)容,如果只想包含特定部分,則可以刪除@hide
注釋并重新構(gòu)建SDK。
但是,如果要包括所有隱藏部分,事情會變得復(fù)雜得多。您可以修改DroidDoc(相關(guān)資源在中build/tools/droiddoc/src/Stubs.java
),以使任何內(nèi)容都不會被檢測為隱藏。這相當(dāng)瑣碎,我已經(jīng)嘗試過了,但是隨后生成的存根根本無法編譯。
我現(xiàn)在的結(jié)論是,這根本不可行。如果刪除DroidDoc中檢測隱藏注釋的部分,則生成的存根將無法編譯,并且需要大量工作才能正確編譯。
因此,我對您的問題的回答是:不,如果不做很多工作就無法完成。抱歉。
有關(guān)該mkstubs
工具的旁注。mkstubs
在構(gòu)建SDK插件時使用,即您可以在Android SDK管理器中從供應(yīng)商處找到的插件,例如Samsung為您提供針對Samsung手機特定內(nèi)容的附加API。mkstubs
與DroidDoc存根生成過程幾乎相同,但是它不使用@hide
注釋,它使用一個.defs
文件來描述要從SDK插件中包含或排除哪些程序包/類/字段。
然而,這一切無關(guān)的問題,如在Android SDK構(gòu)建并不能使用該mkstubs
工具。(不幸。)

TA貢獻(xiàn)1784條經(jīng)驗 獲得超7個贊
我們可以從Android平臺重建* .jar文件。
首先,將ADB連接到您的設(shè)備。然后運行:
adb pull /system/framework/core.jar .
adb pull /system/framework/framework.jar .
在core.jar包含標(biāo)準(zhǔn)的Java庫(java.*)和framework.jar包含了Android庫(android.*)。由于實際文件是DEX格式而不是JAR格式,因此尚不可用。
我們可以使用諸如dex2jar之類的工具將這些DEX格式的* .jars轉(zhuǎn)換為真實的JAR :
dex2jar core.jar
dex2jar framework.jar
然后使用“添加外部JAR ...”拉入這些jar(假設(shè)您正在使用Eclipse ADT)
右鍵單擊Project → Properties → Java Build Path → Libraries → Add External JARs...→(從上方選擇core-dex2jar.jar和framework-dex2jar.jar)。
這將使您能夠使用內(nèi)部和某些Java 7 API。(據(jù)我所知,生成的APK不包含JAR中的任何實際代碼。)
- 3 回答
- 0 關(guān)注
- 573 瀏覽
添加回答
舉報