使用internal(com.android.internal)和hidden(@hide)APIs – Part 2

來源:互聯網
上載者:User

xirihanlin 2011.06.03

原文路徑:http://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-2-hacking-around/

在上一篇中,我解釋了為什麼我們不通過反射就會很難使用internal和hidden API。這是因為android.jar中就沒包含這些API,因此,沒人能夠在編譯時間引用這些類。

這篇文章將描述如何還原最初的android.jar。這將允許我們像使用公開的API那樣使用internal和hidden API。

如何得到原版android.jar

我們需要修改android.jar,這樣它才能包含所有的*.class檔案(包括internal和hidden API類)。有兩種辦法:

1) Android是一個開源工程。我們可以下載源碼並搭建編譯環境,這樣它就不能移除那些internal和hidden的類了。這個辦法比較困難;

2) 每個模擬器或真機在運行時都會有一個等同android.jar的東西。我們可以從這裡拿到jar檔案,提取出原始的.class檔案,並拷貝到Android SDK的android.jar中。

我將採用方案2。它易於開始,還不需要搭建Linux環境及編譯環境等。

從裝置上擷取framework.jar

你可以使用命令列(adb pull)從模擬器或裝置上下載檔案,或者使用DDMS(藉助Eclipse或SDK中的應用)。

注意:模擬器通常在.dex檔案中包含代碼,而真機一般在最佳化版的dex檔案中包含代碼——odex檔案。操作odex檔案比較困難,這也是為什麼我選擇模擬器的原因。

與Android SDK中的android.jar等同的檔案是framework.jar。這個檔案位於裝置的:/system/framework/framework.jar

adb pull /system/framework/framework.jar

當framework.jar從裝置上下下來之後,重新命名為framework.zip並解壓到獨立的檔案夾中,看起來是這個樣子的:

classes.dex正是我們需要的。

建立framework-classes.zip

首先,我們需要把.dex檔案轉換成.jar格式。你可以使用通用的工具dex2jar。只需要運行:

dev2jar classes.dex

當轉換結束時,你應該得到了classes.dex.dex2jar.jar檔案。重新命名為framework-classes.zip。使用zip查看器,進入到framework-classes.zip/com/android/internal/:

恭喜你,你已經擁有了所有的.class檔案,包括internal和hidden API(儘管只確認了internal部分)。

建立original-android.jar

Android SDK的android.jar位於ANDROID_SDK/platforms/android-X/android.jar(X表示API等級)。

拷貝android.jar成custom-android.jar。解壓至custom-android檔案夾。將framework-classes.zip中所有的.class檔案拷貝到custom-android檔案夾中(你需要覆蓋所有已經存在的.class檔案)。

然後,壓縮custom-android檔案成original-android.zip。重新命名為original-android.jar。

步驟總結

1. 選擇你的目標平台X

2. 建立目標平台X的模擬器

3. 啟動模擬器,下載/system/framework/framework.jar

4. 重新命名framework.jar -> framework.zip

5. 從framework.zip中抽取classes.dex

6. 使用dex2jar工具,將其轉換成classes.jar

7. 重新命名classes.jar -> framework-classes.zip

8. 拷貝android.jar –> custom-android.zip

9. 解壓custom-android.zip至custom-android檔案夾

10. 將framework-classes.zip中所有檔案拷貝至custom-android檔案夾(覆蓋存在的檔案)

11. 壓縮custom-android檔案夾成original-android.zip

12. 重新命名original-android.zip -> original-android.jar

打完收功。

總結

我們還原了android.jar,使其包含所有的internal和hidden API的.class檔案。這隻是第一步。下一步將建立定製的android平台,使其使用未刪節版的android.jar,並將其添加到Android SDK platforms檔案夾中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.