启动活动时,系统会加载classes.dex文件并开始执行指令。我需要只读访问当前活动正在执行的同一应用程序的classes.dex。
在网上搜索了几个小时后,我只能推断Android安全系统不允许访问应用程序沙箱。
但是,我需要readonly访问classes.dex文件才能完成我的任务。
有没有人对此有所了解?
提前致谢!
答案 0 :(得分:4)
取决于您要执行的操作,但您可以访问DexFile:
String sourceDir = context.getApplicationInfo().sourceDir;
DexFile dexFile = new DexFile(sourceDir);
它为您提供了一个http://developer.android.com/reference/dalvik/system/DexFile.html,您可以枚举它,并从中加载类。
答案 1 :(得分:2)
你可以为" classes.dex"获得一个InputStream。通过以下方式:
以下是一段代码示例:
// Get the path to the apk container.
String apkPath = getApplicationInfo().sourceDir;
JarFile containerJar = null;
try {
// Open the apk container as a jar..
containerJar = new JarFile(apkPath);
// Look for the "classes.dex" entry inside the container.
ZipEntry ze = containerJar.getEntry("classes.dex");
// If this entry is present in the jar container
if (ze != null) {
// Get an Input Stream for the "classes.dex" entry
InputStream in = containerJar.getInputStream(ze);
// Perform read operations on the stream like in.read();
// Notice that you reach this part of the code
// only if the InputStream was properly created;
// otherwise an IOException is raised
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (containerJar != null)
try {
containerJar.close();
} catch (IOException e) {
e.printStackTrace();
}
}
希望它有所帮助!