Android导出lib时资源id的问题
2012-07-12 15:33
323 查看
当需要把一个Android导出为jar包时,如果里面有用到Resource,比如R.layout,R.id 其它程序引入这个包的时候会遇到id找不到的情况。
这是因为导出jar的时候里面的R.id已经替换为一个int常量,而在新的程序中resource id会重新生成,两者不匹配就会产生问题。
所以在这个Android工程中不能使用import com.xx.R,否则会出现问题,必须在用到资源的时候用另外一个函数去获取它的真正id.
解决办法大致就是利用java的反射机制,通过string来找到类,从而找到变量值。
参考官方说明http://developer.android.com/guide/developing/projects/projects-eclipse.html
这是因为导出jar的时候里面的R.id已经替换为一个int常量,而在新的程序中resource id会重新生成,两者不匹配就会产生问题。
所以在这个Android工程中不能使用import com.xx.R,否则会出现问题,必须在用到资源的时候用另外一个函数去获取它的真正id.
解决办法大致就是利用java的反射机制,通过string来找到类,从而找到变量值。
方法一
public static int getId(Context paramContext, String paramString1, String paramString2) { try { Class localClass = Class.forName(paramContext.getPackageName() + ".R$" + paramString1); Field localField = localClass.getField(paramString2); int i = Integer.parseInt(localField.get(localField.getName()).toString()); return i; } catch (Exception localException) { Log.e("getIdByReflection error", localException.getMessage()); } return 0; }
方法二
这个也是替换Theme的方法public static int getLayoutResIDByName(Context context, String name) { return context.getResources().getIdentifier(name, "layout", context.getPackageName()); } public static int getIdResIDByName(Context context, String name) { return context.getResources().getIdentifier(name, "id", context.getPackageName()); } public static int getStringResIDByName(Context context, String name) { return context.getResources().getIdentifier(name, "string", context.getPackageName()); } public static int getDrawableResIDByName(Context context, String name) { return context.getResources().getIdentifier(name, "drawable", context.getPackageName()); } public static int getRawResIDByName(Context context, String name) { return context.getResources().getIdentifier(name, "raw", context.getPackageName()); }
方法三
Android工程间相互依赖,只适用于在Eclipse中开发参考官方说明http://developer.android.com/guide/developing/projects/projects-eclipse.html
相关文章推荐
- android 4.1 编译找不到资源id的问题
- 关于Android开发中图片资源文件夹drawable中图片与资源ID号出现对不上的问题
- Android导出jar包后的资源使用问题
- Android中的xml或者drawable下面的资源无法在R.java中生成id的问题--2014年12月3日
- Android导出jar包后的资源使用问题
- Android导出jar包后的资源使用问题
- Android导出与使用带资源的lib包
- 关于Android开发中导出jar包后的资源使用问题解决
- Android导出jar包和之后的资源使用问题
- Android项目导出为jar包后调用外部资源的问题
- Android导出jar包后的资源使用问题
- android编译找不到资源id的问题
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- cocos2d-lua android解决启动时因为资源加载而黑屏的问题
- 解决“事件ID(487)的描述(在资源(Zend Optimizer)中)无法找到”问题
- 解决问题E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
- Android 通过资源id去获取view场景
- Android获取所有应用的资源id和对应的uri
- Android 资源国际化问题(1): 来自开源的启示
- 关于Android资源文件中出现百分号的问题