安卓項目導出成jar,自帶的res資源不能正常使用,網上各說紛紜,總結一下概括爲五類,可是沒有一種可以提供直接將res文件夾打包進jar,並可以使用R文件引用的方式。html
打包時包含res文件夾,並經過R文件的反射獲取資源:android
此種方式最坑爹了,根本就是想固然。由於jar中的res與應用的res合併是在生成APK時,此時應用中對R文件中id的引用已經替換爲常數,R文件不會在合併後再次更新,因此對jar中res的引用會報錯。算法
打包時,將資源放在asset文件夾內,經過AssetsManager獲取指定資源:spa
目標應用和jar中的assets文件夾會合並,因此能夠經過獲取該應用的此類文件夾來獲取目標資源, ---缺點是若是是圖片資源,不能與屏幕適配,若是有一種適配屏幕的算法,那麼此法應該是可行的xml
另外就是資源會被暴露給二次開發者htm
使用library項目blog
參見博客地址:【這纔是正解!】Android 自定義類庫打包jar! 誰說不能夠打包res 文件?圖片
此類方法不能混淆代碼,生成的jar包根本沒有資源文件,而官網說明也指出此方式不能導出jar文件(並不是那篇博客中所說的能夠使用bin目錄下的jar包),也就是說發佈時須要提供library源項目,也就是說你所謂的庫代碼直接暴露給別人了,這恐怕不是廣大開發者所但願的。資源
在引用此lib的目標項目中會看到一個包含已經編譯成class.dex的jar文件,這個文件反編譯之後仍然是隻有代碼部分。開發
使用雙重library項目
參見博客地址:Android類庫打包方法探究
博文的最後提供了一種雙層library項目的方法,能夠混淆代碼,可是xml與圖片資源仍然是暴露的,且發佈時須要提供二級引用項目,操做上覆雜度較高,不如直接提供jar包和資源
直接提供jar包和資源(分開)
依然是反射R文件,資源會被暴露給開發者。
目前綜合判斷,仍是第五種方式最粗暴簡單直接,仍是但願將來谷歌能夠有這個方向的支持。