android ICS下的ClassLoader有什么限制吗?
我根本没有得到一个有效的例子,我认为我做的一切都是正确的。
比如这段代码
DexFile df = new DexFile("/sdcard/test.apk");
ClassLoader cl = context.getClassLoader();
Class clazz = df.loadClass("com/test/LibraryClass", cl);
产生:
E/dalvikvm﹕ Dex cache directory isn't writable: /data/dalvik-cache
I/dalvikvm﹕ Unable to open or create cache for /sdcard/test.apk (/data/dalvik-cache/sdcard@test.apk@classes.dex)
W/System.err﹕ java.io.IOException: unable to open DEX file
位置正确,dex文件存在。
最佳答案
/data/dalivk-cache 权限为775,其他目录不可写。这样做是出于安全目的,因此应用程序不会修改其他应用程序。它适用于解压和解压缩 apk 中包含的 dex 文件的系统安装程序。
对于加载外部类的应用程序,使用DexClassLoader
DexClassLoader loader = new DexClassLoader("/sdcard/com.example.test.apk", getApplicationInfo().dataDir, null, getClassLoader());
try {
loader.loadClass("com.example.test.MainActivity");
} catch (ClassNotFoundException e) {
Log.e(TAG, "Could not load class");
e.printStackTrace();
}
关于android - android ics下的ClassLoading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22888866/