关于Android将Activity打成jar包供第三方调用的解决方案

来源:互联网 发布:吉林网络 编辑:程序博客网 时间:2024/05/16 14:02
最近由于项目要求需要打包一个含有布局文件的jar包供第三方使用,无奈资源文件不能打包到jar包里。无奈之下只好求助网络,解决方案是利用反射方法(借鉴的博客地址是blog.csdn.net/xiaanming/article/details/9257853)。把其中的代码贴出来如下:
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;}}

首先感谢作者提供这么一种方案,在没有混淆的情况下这种方案完全可以解决我的需求。但是代码一混淆问题就来了,即使R文件不给混淆这种方案也不能工作,无奈自己只能找代码混淆方面的资料,最后自己还是没有解决。最后终于换了一种方案,更简单也更能解决混淆后不能找到资源的问题:

Activity.getResources().getIdentifier(name, className,Activity.getPackageName())
就这么一段代码就完全符合我们的要求,不需要自己写反射的内容。用android自带的解决方案就把我们的需求给解决了!

0 0