文档章节

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

tnjin
 tnjin
发布于 2014/04/17 11:39
字数 726
阅读 10164
收藏 10
点赞 1
评论 3

安卓项目导出成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
博文 34
码字总数 25348
作品 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

从eclipse到Android studio/迁移eclipse的Android项目到Android studio平台的注意事项

整体要注意的地方 先说明一下整体需要注意的地方 1在Android studio建立项目的时候,要注意包名和原来的完全一致,不然会有很多需要改动. 2依赖的jar一定一定要找齐,不然新建项目引用不到,要么...

amiba.org ⋅ 2015/09/07 ⋅ 0

【转】制作不暴露源码的Android Library Project

Android Library Project(库工程)是一个可以被其他Android工程所引用的工程。那为什么需要使用这个工程呢,打个比方,我们在开发Android项目的时候,常常会遇到这样的问题,几个Android项目的...

拉风的道长 ⋅ 2015/12/17 ⋅ 0

(Mac)反编译Android APK详细操作指南[ApkTool,dex2jar,JD-GUI]

早在4年前我曾发表过一篇关于《Android开发之反编译与防止反编译》的文章,在该文章中我对如何在Windows平台反编译APK做了讲解,如今用Mac系统的同学越来越多,也有很多朋友问我能否出一篇关...

CrazyCodeBoy ⋅ 05/11 ⋅ 0

Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中

前言: 关于.jar文件: 平时我们Android项目开发中经常会用到第三方的.jar文件。 其实.jar文件就是一个类似.zip文件的压缩包,里面包含了一些源代码,注意的是.jar不包含资源文件(res、图片...

听着music睡 ⋅ 2016/09/21 ⋅ 0

Android类库打包方法探究

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

ljrapple ⋅ 2015/03/02 ⋅ 2

android工程生成第三方jar包

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

当空皓月 ⋅ 2013/12/01 ⋅ 0

android 生成jar包里面包含资源文件

背景:工作中需要开发一个广告插件,并提供给其它人使用。这里就需要把自己的插件程序,打成jar来提供给他人引用。 但是遇到一个问题:插件程序中无法使用资源文件。 试过以下几种方式解决:...

青莲居士 ⋅ 2015/10/14 ⋅ 0

android 打包自己的自定义组件成JAR包

在项目开发过程中,我们难免会用到自己去制作自定义的VIEW控件,之后我们别的项目如果需要的话就直接将其复制到对应的项目中使用,虽说这么做是一个解决问题的方法,但毕竟不是很好。 原因是...

刘遇安 ⋅ 2013/04/19 ⋅ 3

AndroidStudio封装SDK的那些事

首先SDK是提供给别人调用的工具。所以常见的SDK都是以jar包,so库,aar包等方式导入APP项目中。然后提供一些公开的API供接入方调用。所以在Androidstudio中如果需要生成jar或者aar,就需要将...

尘封的落叶 ⋅ 06/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 今天 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部