当需要把一个Android导出为jar包时,如果里面有用到Resource,比如R.layout,R.id 其它程序引入这个包的时候会遇到id找不到的情况。

这是因为导出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

更多相关文章

  1. 玩Android小程序v2.0,力争做最漂亮的玩Android
  2. 在android中通过java层程序调用命令行的一些备注
  3. Android 程序猿的保活心酸史
  4. Android studio中正确引入so文件的方法
  5. Android学习路线:如何成长为高级工程师
  6. Android代码混淆及项目发布方法记录
  7. android 使用html做应用程序界面初探

随机推荐

  1. Aosp build mini_emulator_x86_64-userde
  2. 【Android】Vibrator(震动模式)设置长短
  3. Android(安卓)Dex:com.android.dex.DexEx
  4. android8.0 反射Application 启动过程
  5. Android 6.0、7.0、8.0、9.0适配
  6. 【Android实战】Android中处理崩溃异常
  7. Android -- 图片画画板(canvas、paint、bi
  8. Android中binderDied()以及"Unknown bind
  9. Android之canvas详解
  10. android radiobutton选中字体颜色改变的