您的位置:首页 > 其它

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

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

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

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

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

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

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

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

使用library项目

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

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

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

使用双重library项目

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

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

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

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

目前综合判断,还是第五种方式最粗暴简单直接,还是希望未来谷歌可以有这个方向的支持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: