xirihanlin 2011.06.03
原文路徑:http://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-3-custom-android-platform/
在上一篇中,我已經展示了如何建立一個包含所有internal和hidden API的original-android.jar。
接下來的工作就是要修改已經存在的Android平台(SDK_DIR/platforms/platform-X/android.jar,X表示API等級)。你可以直接使用Part2中建立的original-android.jar替換android.jar。但這樣的話,你的所有工程都將直接使用internal和hidden API而沒有任何限制。這不夠方便,因為在多數的工程中你不希望這樣。甚至,你可能更希望禁止這些API(ADT/android.jar的預設行為)。但對於一些特定的工程,你希望能夠使用這些internal和hidden API。
為了達到這樣的靈活性,你需要建立一個新的自訂的Android平台。當不需要訪問internal和hidden API時,你只需使用原有的Android平台。當你使用這些API時,你使用自訂的Android平台。
Android SDK檔案夾結構
讓我們看一下Android SDK樹是如何組織的:
我們需要“platforms”檔案夾。看一下裡面:
這裡列出了支援的Android平台。
現在,我們看一下它是如何與Eclipse設定關聯的。選擇你的工程,右擊–> Properties –> Android。你將會看到一組支援的Android平台(與…/platforms/folder相似)。下面是:
建立新的平台
為了建立一個新的平台,我們需要拷貝android-9檔案夾 -> android-9-internals。讓我們做一些修正:
1. 刪除其中的android.jar
2. 拷貝original-android.jar,並改名為android.jar
3. 修改build.prop檔案:
…
ro.build.version.sdk=9 -> ro.build.version.sdk=-9
…
ro.build.version.release=2.3 -> ro.build.version.release=2.3.extended
…
重啟Eclipse。並確認你能看到新的平台。下面是我所看到的:
為什麼我選擇API等級為-9?這是因為它必須是一個數字,而且它不能是9(或者其它已經存在的API等級)。否則,你自訂的平台將不能被使用(它在列表裡可見,但選中後也不能正常工作,編譯時間仍然使用相應API等級的原始平台)。
下面是引用類庫的(當前工程選中了自訂的平台):
總結
在上一篇中,我已經告訴你如何建立一個未刪節版的android.jar。在這一篇中,我向你展示了如何建立一個自訂的Android平台,並在其中使用original-android.jar。這對於hidden API來說已經足夠了。但對於internal API來說,還需要另一步。這是因為ADT仍然不允許使用com.android.internal包中的類(參見中的“forbidden”訪問規則)。下一節我將向你展示如何定製ADT來允許使用internal包中的類。
============華麗的分割線=============
在實際的操作過程中,我建立的自訂的android.jar(API 10)不能被Eclipse成功載入,會出現以下的錯誤框,如同網站上其它人操作的結果一樣,期待解決方案。
不過,作者提供了可用的自訂的android.jar,如果不想自己嘗試的話,可以直接從網站下載,地址將在Part5中給出,稍等。