文档章节

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

tnjin
 tnjin
发布于 2014/04/17 11:39
字数 726
阅读 10368
收藏 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
0
0
Android类库打包方法探究

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

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

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

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

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

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

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

飞翔的熊blabla
08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka+Flink 实现准实时异常检测系统

1.背景介绍 异常检测可以定义为“基于行动者(人或机器)的行为是否正常作出决策”,这项技术可以应用于非常多的行业中,比如金融场景中做交易检测、贷款检测;工业场景中做生产线预警;安防...

架构师springboot
42分钟前
6
0
DecimalFormat 类基本使用

/* * DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度 * 0 表示如果位数不足则以 0 填充 * # 表示只要有可能就把数字拉上这个位置 * */ public static void main(String[] args){...

嘴角轻扬30
59分钟前
4
0
This APT has Super Cow Powers.

在Debian/Ubuntu上,apt包管理器内嵌着一个彩蛋. 如果你在命令行界面输入 apt help 在最后一行能找到This APT has Super Cow Powers. 说明该apt具有超级牛力 牛力是个什么梗? 则说明你的系统...

taadis
今天
3
0
起薪2万的爬虫工程师,Python需要学到什么程度才可以就业?

爬虫工程师的的薪资为20K起,当然,因为大数据,薪资也将一路上扬。那么,Python需要学到什么程度呢?今天我们来看看3位前辈的回答。 1、前段时间快要毕业,而我又不想找自己的老本行Java开发...

糖宝lsh
今天
10
0
携手开发者共建云生态 首届腾讯云+社区开发者大会在京举办

本文由云+社区发表 北京时间12月15日,由腾讯云主办,极客邦科技、微信、腾讯TEG协办的首届腾讯云+社区开发者大会在北京朝阳悠唐皇冠假日酒店举办。在会上,腾讯云发布了重磅产品开发者平台以...

腾讯云加社区
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部