将android程序打包成sdk中资源的处理
来源:互联网 发布:js移除节点 编辑:程序博客网 时间:2024/04/30 06:56
背景
通常的android项目,都是以apk的形式对外发布的,但有一部分程序,是做为二次开发包提供给其它开发商的,例如,淘宝SDK,新浪微博SDK。笔者参与公司的一款支付插件的开发与维护,最终打包成jar+res的格式(与支付宝支付提供的支付不同。支付宝的交易功能,也是一个APK,商户接入后,通过AIDL调用支付)。以这款插件为例,讲解一下资源文件的处理。
工程设置与打包形式
工程设置:
因为插件本身不支持直接运行,必须接入到商户后,才能执行,所以,在维护该插件的时候,还有一个用于调起插件的商户DEMO。怎么样把两个项目整合到一起,可以正常运行呢?
把插件工程设置成android library project
如此一来,只要添加将lib工程添加到商户DEMO中的lib,就可以方便的调用。
打包:
将插件的代码打包成一个jar,再将插件工程复制一份出来,删除掉工程中的java源文件,这样,就留下了一个只有资源的lib project。商户接入的时候,将jar添加到libs下,将res library project添加到src lib下,就可以接入。为什么不把jar也放到res lib project里面呢?
新版本的ADT是可以的,支持直接把jar放入 lib project 里,会自动加到build path但以前的还得手工添加,另外单独提取出来,更直观一些
资源文件的处理
在插件项目中,资源文件的引用不能再以R.XX.XXXX
这样的格式来使用,因为这种代码在编译的时候, 会用具体的int值来替换掉代码,当你的项目在别人的环境下重新编译,资源对应的id就被改了。
解决办法:
将R.xx.xxx
用方法替换。代码如下:
class ResLink{ public static int getIdXXXXX(){ return R.xx.xx; }}
方法一:将ResLink的源码也提供给商户,这样,可以将R的常量的替换放到商户的项目编译时,保证id不紊乱。但要删除你的JAR中的该类的class文件
方法二: 使用资源名称。Resource类提供了一个叫getIdentifier()
的方法,该方法可以根据资源的名称和类型来获取具体的值。
方法三: 为自己的资源固定id,查看android的R.java
文件,可以发现生成的资源id常量值都是0x7f开头。其实,这个id的组成是 package + type + value ,其中,应用的资源生成的id都是7f开头的。而android提供了一种资源类型叫public
,用法:
<resources> <public type="id" name="xxx" id="0x7f040003" /><resources>
这样,aapt在编译的时候,会自动将该资源指定固定的id。如此一来,就可以在代码中用R.xx.xxx了。
总结
方法1中,编译时候及时报错,商户接入相对麻烦,必须指定类放入到指定包下才可以。
方法2中,资源全部以string
的形式指定,如果资源有改动,每次新加都得手动添加其名字和类型,如果添加的多了,再删除,操作起来相当麻烦,而且都不知道哪些用到哪些没用到,即使没有这个资源也不会在编译时报错。
方法3中,完全指定了资源,可以用R.XX.XXXX
来直接使用,在提供给二次开发商的时候,public.xml
资源也会提供出去,这样,编译时候不会造成id冲突,相当于强制锁定了资源id。
以上3种方法中,我使用的是方法二,而且我发现很多家都是使用的该方法,尽管它对管理资源名称比较麻烦,但它是唯一的一种不以来R文件的办法。
不想把资源直接发给商户?请浏览这里android如何将资源打入jar并对资源进行保护
转自:http://www.lephones.net/2014/02/28/android-lib-res/
- 将android程序打包成sdk中资源的处理
- 将android程序打包成sdk中资源的处理
- android程序打包成sdk中资源的处理
- Android Studio打包混淆带资源的SDK
- android如何将图片资源打包进jar包中
- Android SDK中资源的下载
- 实现SDK的打包处理
- Android 将音乐文件打包到程序中并设置为铃声的详细方法介绍
- 如何将资源打包成unitypackage的形式
- 利用Android studio的keystore将Android程序打包成APK
- Android的SDK中相关资源下载及说明
- windows环境下将程序打包成Android应用apk
- Android中打包JAR时获取资源ID的方法
- MyEclipse将Java控制台程序打包成jar运行找不到工程中引入的jar【解决办法】
- android 将android项目打包成sdk形式给第三方公司调用
- 将资源文件打包成.bin文件
- 如何将资源打包成.unity3d文件
- android开发中如何将android项目打包成jar?
- silverlight查询功能
- QML与c++交互
- oracle flashback 闪回
- android如何将资源打入jar并对资源进行保护
- Ubnutu 安装VIM
- 将android程序打包成sdk中资源的处理
- Android中ENTER键(确认键)点击响应
- tomcat6两个常用配置,端口和web目录
- checkbox属性checked="checked"已有,但却不显示打勾的解决办法
- Android 开源交流 QQ 群分享汇总
- ARM WFI和WFE指令
- servlet--过滤器之Ip过滤器
- AppLog4Services事件测试成功(3)
- 渲染专题图制作