关于安卓工程导出带res资源文件的jar的总结

笑着哭i 提交于 2019-11-30 06:16:32

安卓项目导出成jar,自带的res资源不能正常使用,网上各说纷纭,总结一下归纳为五类,但是没有一种能够提供直接将res文件夹打包进jar,并能够使用R文件引用的方式。

  1. 打包时包含res文件夹,并通过R文件的反射获取资源:

    此种方式最坑爹了,根本就是想当然。因为jar中的res与应用的res合并是在生成APK时,此时应用中对R文件中id的引用已经替换为常数,R文件不会在合并后再次更新,所以对jar中res的引用会报错。

  2. 打包时,将资源放在asset文件夹内,通过AssetsManager获取指定资源:

    目标应用和jar中的assets文件夹会合并,所以可以通过获取该应用的此类文件夹来获取目标资源, ---缺点是如果是图片资源,不能与屏幕适配,如果有一种适配屏幕的算法,那么此法应该是可行的

    另外就是资源会被暴露给二次开发者

  3. 使用library项目

    参见博客地址:【这才是正解!】Android 自定义类库打包jar! 谁说不可以打包res 文件?

    此类方法不能混淆代码,生成的jar包根本没有资源文件,而官网说明也指出此方式不能导出jar文件(并非那篇博客中所说的可以使用bin目录下的jar包),也就是说发布时需要提供library源项目,也就是说你所谓的库代码直接暴露给别人了,这恐怕不是广大开发者所希望的。

    在引用此lib的目标项目中会看到一个包含已经编译成class.dex的jar文件,这个文件反编译以后仍然是只有代码部分。

  4. 使用双重library项目

    参见博客地址:Android类库打包方法探究  

    博文的最后提供了一种双层library项目的方法,可以混淆代码,但是xml与图片资源仍然是暴露的,且发布时需要提供二级引用项目,操作上复杂度较高,不如直接提供jar包和资源

  5. 直接提供jar包和资源(分开)

    依然是反射R文件,资源会被暴露给开发者。

    目前综合判断,还是第五种方式最粗暴简单直接,还是希望未来谷歌可以有这个方向的支持。


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!