在android下,对ClassLoaders有什么限制吗?
我根本没有一个例子起作用,我认为我做的一切都是正确的。
例如,这段代码
DexFile df = new DexFile("/sdcard/test.apk");
ClassLoader cl = context.getClassLoader();
Class clazz = df.loadClass("com/test/LibraryClass", cl);生产:
E/dalvikvm: Dex缓存目录不可写: /data/dalvik-cache I/dalvikvm:无法为/sdcard/test.apk (/data/dalvik-cache/sdcard@test.apk@classes.dex)打开或创建缓存 W/System.err: java.io.IOException:无法打开DEX文件
位置正确,则存在dex文件。
发布于 2014-04-06 01:56:28
/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();
}发布于 2014-04-06 02:41:10
如果您正在从内部存储区域读取数据,那么对于API 18和更早版本,您需要在AndroidManifest.xml中使用此权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>您不需要从API 19开始的上述权限。有关更多信息,请参见这里。
另外,我不会在您的类中硬编码路径(即"/sdcard/"),而是使用以下方法:
String path = Environment.getExternalStorageDirectory().getAbsolutePath();https://stackoverflow.com/questions/22888866
复制相似问题