启动活动时,系统会加载 classes.dex 文件并开始执行指令。我需要获得对当前活动正在执行的同一应用程序的 classes.dex 的只读访问权限。
在网上搜索了几个小时后,我只能推断出Android安全系统不允许访问应用程序沙箱。
但是,我需要对 classes.dex 文件进行只读访问才能完成我的任务。
有人对此有见解吗?
提前致谢!
启动活动时,系统会加载 classes.dex 文件并开始执行指令。我需要获得对当前活动正在执行的同一应用程序的 classes.dex 的只读访问权限。
在网上搜索了几个小时后,我只能推断出Android安全系统不允许访问应用程序沙箱。
但是,我需要对 classes.dex 文件进行只读访问才能完成我的任务。
有人对此有见解吗?
提前致谢!
您可以通过以下方式获取“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();
}
}
希望能帮助到你!
取决于您要执行的操作,但您可以访问 DexFile :
String sourceDir = context.getApplicationInfo().sourceDir;
DexFile dexFile = new DexFile(sourceDir);
它为您提供了一个http://developer.android.com/reference/dalvik/system/DexFile.html您可以枚举并从中加载类。