關於安卓工程導出帶res資源文件的jar的總結

安卓項目導出成jar,自帶的res資源不能正常使用,網上各說紛紜,總結一下概括爲五類,可是沒有一種可以提供直接將res文件夾打包進jar,並可以使用R文件引用的方式。html

  1. 打包時包含res文件夾,並經過R文件的反射獲取資源:android

    此種方式最坑爹了,根本就是想固然。由於jar中的res與應用的res合併是在生成APK時,此時應用中對R文件中id的引用已經替換爲常數,R文件不會在合併後再次更新,因此對jar中res的引用會報錯。算法

  2. 打包時,將資源放在asset文件夾內,經過AssetsManager獲取指定資源:spa

    目標應用和jar中的assets文件夾會合並,因此能夠經過獲取該應用的此類文件夾來獲取目標資源, ---缺點是若是是圖片資源,不能與屏幕適配,若是有一種適配屏幕的算法,那麼此法應該是可行的xml

    另外就是資源會被暴露給二次開發者htm

  3. 使用library項目blog

    參見博客地址:【這纔是正解!】Android 自定義類庫打包jar! 誰說不能夠打包res 文件?圖片

    此類方法不能混淆代碼,生成的jar包根本沒有資源文件,而官網說明也指出此方式不能導出jar文件(並不是那篇博客中所說的能夠使用bin目錄下的jar包),也就是說發佈時須要提供library源項目,也就是說你所謂的庫代碼直接暴露給別人了,這恐怕不是廣大開發者所但願的。資源

    在引用此lib的目標項目中會看到一個包含已經編譯成class.dex的jar文件,這個文件反編譯之後仍然是隻有代碼部分。開發

  4. 使用雙重library項目

    參見博客地址:Android類庫打包方法探究  

    博文的最後提供了一種雙層library項目的方法,能夠混淆代碼,可是xml與圖片資源仍然是暴露的,且發佈時須要提供二級引用項目,操做上覆雜度較高,不如直接提供jar包和資源

  5. 直接提供jar包和資源(分開)

    依然是反射R文件,資源會被暴露給開發者。

    目前綜合判斷,仍是第五種方式最粗暴簡單直接,仍是但願將來谷歌能夠有這個方向的支持。

相關文章
相關標籤/搜索