android - android ics下的ClassLoading

标签 android classloader ioexception

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/

相关文章:

android - Google登录+ Youtube数据Api问题

.net - 您能解释一下为什么 DirectoryInfo.GetFiles 会产生这个 IOException 吗?

java - MyClassLoader.defineClass java.lang.SecurityException : Prohibited package name: java. lang

actionscript-3 - 是否可以在 Action Script 3 中动态创建用户定义类的实例?

java - 将 ClassPathScanningCandidateComponentProvider 与多个 jar 文件一起使用?

c# - 文件模式和文件访问和 IOException : The process cannot access the file 'filename' because it is being used by another process

java - 获取 Parcelable 写入可序列化对象时遇到 IOException

java - 当正确回答时,在 GridView 中的图像上设置刻度线

android - 无法以编程方式授予 SET_ANIMATION_SCALE 权限

android - 当连接中有多个 _id 列时,如何访问各个 _id 列?