User Tools

Site Tools


android:export-lib-resouce

Android导出lib时资源id的问题

当需要把一个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

/var/www/dokuwiki/wiki/data/pages/android/export-lib-resouce.txt · Last modified: 2016/05/05 13:07 by 127.0.0.1