如果一个工程有他自己的资源,即不光是只有java文件,还有图片,布局等文件打包成jar包,如果这个工程引用资源的方式是R.xxx.yyy,那么打成jar后给其它工程引用是不行的
解决办法:
1.编写引用资源的类如下:
public class MResource {
public static int getIdByName(Context context, String className, String name) {
String packageName = context.getPackageName();
Class r = null;
int id = 0;
try {
r = Class.forName(packageName + ".R");
Class[] classes = r.getClasses();
Class desireClass = null;
for (int i = 0; i < classes.length; ++i) {
if (classes[i].getName().split("\\$")[1].equals(className)) {
desireClass = classes[i];
break;
}
}
if (desireClass != null)
id = desireClass.getField(name).getInt(desireClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return id;
}
2.在要打包成jar包的工程中引用资源用以下方式
private int wheelBackground = MResource.getIdByName(getContext(), "drawable", "wheel_bg");
private int wheelForeground = MResource.getIdByName(getContext(), "drawable", "wheel_val");
// private int wheelBackground = R.drawable.wheel_bg;
// private int wheelForeground = R.drawable.wheel_val;
3.然后把这些资源文件copy到引用这个jar包的工程,并且把要打包成jar包的工程只保留java文件打包成jar,引用即可