近期有个项目需求,把自家的项目代码达成jar包.供第三方调用以下是一些记录:
1.一开始尝试过的办法是把src的java直接export为jar文件并新建一个demo调用.
很快问题就出现了.:找不到资源
原因是目前的jar包中的代码,都是使用R.stirng.xxx R.id.xxx
大家都知道R.Xxx.xxx是由开发工具自动生成的,所以每个项目即便是相同命名的id.string....都是不一样的.
后来在网上搜索一番. 找到一个一个不错的方法:
context.getClass().getClassLoader().getResourceAsStream();//获取资源流
context.getResources().getIdentifier(name, "id", context.getPackageName());//获取该Project下的属性id
也就是说需要把代码中引用到 R.xxx.yyy的地方都改成
context.getResources().getIdentifier("yyy", "xxx", context.getPackageName());
实践证明,这个修改工作量极其繁琐,如果把资源文件也命名规范的话
2.说道 资源文件。
鄙人不才,目前知道两种方法,一种是放到asset中,一种是直接复制到新的project中。
也就是说第一张是需要以流的方式使用。第二种则可以以(1)中的方法使用。
3在项目中遇到的一个问题就是自定义属性 R.styleable.xxxx 该属性是定义在arrts.xml 中的。使用R.styleable.xxxx 去访问的时候,返回的是一个int[]
苦恼找不到像(1)中可以返回资源id为int[]的方法
后来看了下R文件。
R.styleable.xxx 生成的id为
public static final int[] xxxx= { 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003 };
于是就想起了一个方法 手动去组合该id
便有了这样的方法
new int[]{
context.getResources().getIdentifier("qqq", "styleable", context.getPackageName()),
}context.getResources().getIdentifier("aaa", "styleable", context.getPackageName())
这个问题便迎刃而解了。(因为我只用到2个属性。所以就只获取了2个。)4 参考资源
打包多个jar的工具可以用fat-jar,安装过程就不赘述了。
http://blog.csdn.net/yy4040/article/details/6641688
交流邮箱:zhangnianxiang@gmail.com