我想知道是否以及如何在dalvik中动态加载dex或类文件,我写的一些quick'n'dirty测试函数是这样的:
public void testLoader() {
InputStream in;
int len;
byte[] data = new byte[2048];
try {
in = context.getAssets().open("f.dex");
len = in.read(data);
in.close();
DexFile d;
Class c = defineClass("net.webvm.FooImpl", data, 0, len);
Foo foo = (Foo)c.newInstance();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
而Foo界面就是这样
public interface Foo {
int get42();
}
Run Code Online (Sandbox Code Playgroud)
和f.dex包含该接口的一些dx'ed实现: …
我将尝试开发一个应用程序,该应用程序已启用插件,如windows-.Net-world DLLs.
我将在我的应用程序中使用小矩形线性布局,用户可以通过可见的开/关来管理它们.稍后在我或其他人将给用户一个新的插件,应用程序现在显示.
可能吗?如果是的话:怎么样?那里有好的网站你可以指导我吗?
问候飞
根据Fred Chung在Android开发者博客上介绍Dalvik中的Custom Class Loading:
Dalvik VM为开发人员提供了执行自定义类加载的工具.应用程序可以从其他位置(如内部存储)或通过网络加载它们,而不是从默认位置加载Dalvik可执行文件("dex").
但是,没有多少开发人员需要进行自定义类加载.但那些按照博客文章中的说明进行操作的人可能会在使用Gradle(Google I/O 2013中引入的Android新构建系统)模仿相同行为时遇到一些问题.
究竟如何调整新构建系统以执行与旧(基于Ant)构建系统相同的中间步骤?
我想写一个可以用模块扩展的android应用程序(android库).模块应在运行时加载.因此,它们将从URL下载并存储在目录中.这些模块是aar文件.
有没有办法在运行时动态加载aar文件?
我知道可以使用URLClassLoader加载包含的classes.jar.但比我无法加载布局,字符串,...资源.HM
有谁知道如何解决这个问题?
编辑:
我找到了一些相关的主题:
由于第一个链接的答案,它似乎不起作用.我希望我的想法是错的.