文档章节

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

tnjin
 tnjin
发布于 2014/04/17 11:39
字数 726
阅读 10457
收藏 10

安卓项目导出成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文件,资源会被暴露给开发者。

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


© 著作权归作者所有

tnjin

tnjin

粉丝 27
博文 36
码字总数 28535
作品 0
海淀
Android工程师
私信 提问
加载中

评论(3)

tnjin
tnjin 博主

引用来自“Xushao”的评论

搞这么复杂,一个aar不就OK了吗?
我写这篇文章的时候,还没听过aar,而且主流的开发工具是eclipse
Xushao
Xushao
搞这么复杂,一个aar不就OK了吗?
tnjin
tnjin 博主
目前,谷歌的支持包有aar格式的,貌似这个格式可以支持res文件,未详细查阅资料,待验证
Android 中jar包封装及调用 (转)

Android中jar包封装及调用 在android开发过程中,我们经常会有这种需求,自己开发一个类库jar包,提供给别人调用。 即把项目A封装成jar包,供项目B调用,而在项目B中调用项目A的activity的时...

天下杰论
2012/11/05
220
0
Android类库打包方法探究

开发Android应用的时候,对于可用于多个应用的公用的部分,或是打算发布给第三方进行应用集成的部分,要把这部分打包成类库怎么做呢?   众所周知,Android应用使用ADT打包成apk,apk中包含...

ljrapple
2015/03/02
138
2
android工程生成第三方jar包

总结一下:资源文件是无法打进jar包的,打进去也没有用,所以下面的方式是jar包和资源文件都需要调用工程添加的。如果想把资源打进包内可以使用Is Library方式,但是这样会暴露源码,当然也有...

当空皓月
2013/12/01
478
0
[安卓问题]如何制作Jar包并在android中调用jar包

ndroid制作jar包: 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmanifest.xml和res文件夹,就可以了。否则在调用j...

JungleKing
2014/04/12
701
0
Android studio如何生成aar包

在Android Studio中对一个自己库进行生成操作时将会同时生成.jar与.aar文件。 分别存储位置: *.jar:库 /build/intermediates/bundles/debug(release)/classes.jar *.aar:库 /build/outpu...

飞翔的熊blabla
2018/08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一套完整的软件开发流程是怎样的?

做什么事都需要一个流程,软件开发也不例外。 那么,一个软件从无到有到底是怎么开发的?一个软件产品的结果为什么是这样?为什么开发的速度不能再快一点。为什么程序员大多秃顶?他们有那么...

我想造火箭
11分钟前
3
0
漂亮思维导图怎样绘制?教你快速套用思维导图模板绘制d

用MindMaster软件绘制思维导图,会更加高效和美观!因为MindMaster是一款专业的思维导图软件,零基础经验的朋友花费5分钟时间就能掌握它的相关画法。以下是电脑软件思维导图画法的简单步骤。...

工具分享
14分钟前
3
0
linux 软链接与 硬链接的区别

软链接与硬链接的区别 1. 硬链接不会创建inode,即使用的inode都是一样的。软链接会创建新的inode。 2. 硬链接的访问属性和源文件一模一样,没有l的标识。软链接的访问属性写明了是l,且访问...

突突突酱
15分钟前
1
0
新特性解读 | MySQL 8.0.18 有权限控制的复制

原文:Replication with restricted privileges https://mysqlhighavailability.com/replication-with-restricted-privileges/ 作者:Pedro Figueiredo 翻译:管长龙 背景 MySQL 8.0.18 以前......

爱可生
23分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部