xirihanlin 2011.06.07
原文路徑:http://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-4-customizing-adt/
在上一篇文章裡,我描述了如何建立一個自訂的original-android.jar,以及如何建立一個自訂的Android平台來使用這個original-android.jar。這對Hidden API來說足夠了。但對Internal API來說,仍然還有一個包袱:Eclipse的ADT外掛程式。它限制使用com.android.internal包中的任何類。
有幾種方法可以解決這個訪問限制。
1) ADT源碼可以下載。因此,刪除/修改代碼中的某些代碼,從而編譯出一個新的ADT是可以的。麻煩的是你需要搭建64位Linux系統,下載源碼,編譯等。它需要花費一些時間。當有新的ADT版本時,你需要重來一遍。
2) 另外的方法就是修改ADT的位元組碼。用一個類似於“com/android/internax/**”的字串替換“com/android/internal/**”。
第二種方法可以用指令碼實現。並且不需要訪問源碼以及可在Windows上操作。這也是為什麼我在這篇中選用第二種解決方案的原因。
修改ADT的位元組碼
進入Eclipse的plugins檔案夾。找到檔案名稱看起來像“com.android.ide.eclipse.adt_*.jar”的檔案。備份一下這個檔案(以防中間有錯誤發生)。並拷貝這個檔案到一個“experimental”檔案夾,在這裡,我們要完成對其位元組碼的修改。
重新命名*.jar為*.zip。解壓這個檔案到單獨的檔案夾。參看以片:
現在,進入到com/android/ide/eclipse/adt/internal/project子檔案夾。
找到AndroidClasspathContainerInitializer.class檔案。
這個檔案包含“com/android/internal/**”字串。接下來就是要替換這個字串,例如“com/android/internax/**”。改變字串的長度理論上是安全的,但最好還是替換其中的一個字母,並保持長度一致。
我使用notepad++修改的,它支援非可印刷字元,因此在對其修改時,不要觸碰修改非可印刷字元。
當做完這個,儲存檔案。壓縮這個檔案夾,保證檔案名稱與原始檔案一模一樣。在我這裡,檔案名稱是:com.android.ide.eclipse.adt_8.0.1.v201012062107-82219.zip。
注意:確保壓縮檔的正確性。比較原始檔案和修改檔案的根檔案結構。
現在,用修改後的版本替換原來的ADT的*.jar檔案。然後,啟動Eclipse。
在使用庫視窗,你應該看到下面的樣子,一切都變得那麼的美好:
步驟總結
1. 關閉Eclipse
2. 從Eclipse的plugin檔案夾中拷貝出ADT外掛程式的jar檔案
3. 重新命名.jar -> .zip,然後解壓至獨立的檔案夾
4. 找到com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.class檔案
5. 用“com/android/internax/**”替換“com/android/internal/**”
6. 壓縮這個檔案夾
7. 重新命名 .zip -> .jar
8. 用修改後的jar替換原始的ADT jar檔案
9. 啟動Eclipse
結論
這是不使用反射也能使用Internal API的最後一步。