【Android XML】Android XML 轉 Java Code 系列之介紹(1),androidxml
最近在公司做一個項目,需要把Android介面打包進jar包給客戶使用。對絕大部分開發人員來說,Android介面的布局以XML檔案為主,並輔以少量Java代碼進行動態調整。而打包進jar包的代碼,意味著無法通過常規的getResources(),getString()等方法來快速的擷取資源,因為這些資源都是在apk安裝的時候初始化產生的。為了滿足客戶的需求,筆者開始在網上尋找各種解決方案。結果如下:
1.apk 主體包方案實現方法:安裝一個新的apk,新apk和主apk使用android:sharedUserId串連起來,這樣主apk就可以擷取新apk的所有res資源。需要注意的是,R.id.xxx的值為新apk中的R.java的值。因此需要擷取到新apk的R.class,或保證新apk和主apk的R.java中的資源的值是完全一致的,否則會出現擷取資源對不上號的情況。結論:可以實現,但需要多安裝一個apk。靜默安裝apk需要root許可權,否則會彈出安裝介面。還沒有找到不需要安裝apk就能擷取資源的方法。
參考連結:http://blog.csdn.net/lg707415323/article/details/7709076 2.LayoutInflater 方案實現方法:通過LayoutInflater類解析外部XML資源,並轉換為所需布局。分析:Android解釋因為效能原因,LayoutInflater只支援解析已經先行編譯在apk包裡的xml。所以沒辦法解析外部匯入的xml布局資源。結論:不可行
參考連結: http://gamebs.blog.163.com/blog/static/1860182182012827545621/
3.Android XML 轉 Java Code方案 (開源/自研)參考連結:http://www.xmltojava.com/ 線上的Android XmToJaval轉換服務,免費,支援各種控制項(http://www.xmltojava.com/page/controls/ ),支援還算豐富,但轉換完還需要一些簡單的手動編輯。不支援drawable和values目錄下的資源轉換。結論:能減輕手動翻譯的工作量,但不能完全解決需求。EsManagerTool中用到了很多自訂的drawable和string,這些需要自己手動翻譯實現。 參考連結:https://github.com/bsp0911932 https://github.com/rvp2014/AndroidXMLToJavaConverter 個人開源項目,第一個項目用php寫的,代碼量很少,只更新過一次,應該沒法用。第二個項目是Androidy應用動態解析,剛剛建立起來的,支援的欄位很少,應該也沒法用。完成度都很低。在Google和Github上都沒有找到成熟的方案。結論:不可用 4.zip包方案只能替換圖片資源,沒辦法解析Xml布局。(案頭應用的換膚功能都基於zip或apk這兩個方案)結論:不可行
5.ClassLoader方案把apk包用ClassLoader載入進來,並通過反射的方法擷取Activity或其他組件的各種方法,從而獲得資源。分析:實踐發現,反射調用Activity結論:不可行
參考連結:http://blog.csdn.net/mer1234567/article/details/7308855
總結論:方案1最方便,但客戶不一定能接受;方案3比較穩妥,但是耗費人力大。
由於方案1需要安裝apk,如果要靜默安裝還需要root許可權。這種方案過於累贅,只能選擇Android XML翻譯原生代碼的方法。於是就有了AndroidXMLToJava管理工具的誕生。
接下來幾篇會分享該轉換工具的一些解決過程。項目快完善的時候會放上部落格,現在暫時不放出來。
著作權,轉載請註明出處:
http://www.cnblogs.com/sickworm/p/4245089.html