Android中打包JAR时获取资源ID的方法

前言:在打包android源码的时,有的时候源码中包含了资源文件,但是jar包中不包含,所以会异常,解决的方案就是不用系统的提供的id名,而是直接

   获取id,如反射。

1.系统提供的方法:

            /**
             * 参数1:资源的名字;参数2:资源所在的类;参数三:程序的包名。
             */
            int id = getResources().getIdentifier("home_activity", "layout",
                    getPackageName());

2.自定义的方法:

package com.example.activitylibrary;

import android.content.Context;

/**
 * 根据资源的名字获取其ID值
 * @author mining
 *
 */
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;
    }
}

 

posted @ 2013-07-09 10:45  有情怀的人  阅读(601)  评论(0编辑  收藏  举报