需求:

封装了工具类和框架,其中用到了资源文件(res文件下的图片,xml等),将我们封装的工具类使用在客户的app上,要求以jar包的方式调用,不能暴露源码。

出现问题:

我封装了一个UI,需要用到资源文件,但是eclipse不能满足将项目联同资源文件一起打包,尽管Export Jar File时全勾选了.


问题解决思路:

1.使用一个中间项目,添加工具类的jar和资源文件,然后引用这个中间项目

2.使用反射的方法解决jar内的类访问不到中间项目资源文件的问题


问题解决思路

问题解决的步骤:

  1.工具类项目中通过反射来访问资源文件最重要的步骤

    /** 
 * 
 * 通过反射获取所在项目包下的资源文件id 
 * @author Appjoyo 
 * 
 */ 
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;   
    } 
 
}


这样引用:

 
//        因为要封装成jar包,所以通过反射的方式获取资源id 
        int layoutId = MResource.getIdByName(mActivity.getApplication(), "layout", "slidingmenumain"); 
        mSlidingMenu = (SlidingMenu) LayoutInflater.from(mActivity).inflate(layoutId, null);



    

 2.将工具类的项目打成jar包,此处简称tool.jar,注意在导出时只勾选src

 3.新建一个项目 ,此处简称为jarLibrary,将tool.jar添加到该项目的lib文件下。

 4.将工具类中用到的资源文件 ,直接粘贴复制到jarLibrary项目的res对应目录下。

 5.将项目jarLibrary设置为Library项目(右键单击jarLibrary,选择 properties,选择Android,将isLibrary勾选,最后点击确定)

 6.客户项目,此处简称为WorkApp,引用jarLibrary(右键单击,选择 properties,选择Android,选择add,选择jarLibrary,最后点击确定)





评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Android-序列化的人生三问