首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DexClassLoader -添加功能

DexClassLoader -添加功能
EN

Stack Overflow用户
提问于 2013-08-27 13:34:28
回答 1查看 1.4K关注 0票数 3

我正在用DexClassLoader做一些测试,看看是否有可能用新的功能“更新”我的应用程序。目前,我已经得到了用于测试的方法,它适用于testClass并运行test()方法。我想知道的是,我如何“替换”或“更新”以及已经存在的类。?欢迎任何想法或其他建议。

方法:

代码语言:javascript
复制
    public static void loadExtLib(String pathDexFile, Context ctx) {

    String temp = ctx.getDir("temp", 0).toString();


        DexClassLoader classLoader = new DexClassLoader(pathDexFile,
                    temp, null, ctx.getClass().getClassLoader());


          String testClass = "com.mystudio.myapp.TestClass";
          Class<?> libProviderClass = null;
          try {
            libProviderClass = classLoader.loadClass(testClass);
        } catch (ClassNotFoundException e1) {

            e1.printStackTrace();
        }


          try {
            Method m = libProviderClass.getDeclaredMethod("test", null);
            try {
                m.invoke(libProviderClass, null);

            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        } catch (NoSuchMethodException e1) {
            e1.printStackTrace();
        }
          Log.v("loadClass", "loaded: " + testClass);


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-27 15:15:49

一般情况下,不能“替换”或“更新”类;只有由DexClassLoader或其子加载器加载的类才能看到加载的类。例如,您不能用这样一个版本来替换java.lang.String,该版本可以做一些邪恶的事情来规避类中的安全限制。

这在一定程度上减少了加载同名多个类的实用程序。另一方面,它确保了类加载器A的操作独立于类加载器B的操作,只要其中一个不是另一个的父级。

使用运行时加载类的一种可能有用的方法是在基本加载器中定义一个接口,该接口由类的“旧”版本和“新”版本实现。通过接口引用类的实例,可以避免“旧”代码看不到“新”类定义的事实。

(考虑这一点的最好方法是用类加载器对每个类进行标记。很明显,您不能将String'new传递给为String'old编写的函数,但是如果它们都实现了CharSequence'old,那么始终可以通过它引用它们。)

Dalvik测试中有一些代码可以执行运行时“替换”,并且可能对阅读有用。请参阅068-类装入器测试。srcsrc-ex的内容构建在单独的.jar文件中;后者在运行时加载。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18466996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档