4

启动活动时,系统会加载 classes.dex 文件并开始执行指令。我需要获得对当前活动正在执行的同一应用程序的 classes.dex 的只读访问权限。

在网上搜索了几个小时后,我只能推断出Android安全系统不允许访问应用程序沙箱。

但是,我需要对 classes.dex 文件进行只读访问才能完成我的任务。

有人对此有见解吗?

提前致谢!

4

2 回答 2

4

您可以通过以下方式获取“classes.dex”的 InputStream:

  1. 检索应用程序的 apk 容器的路径。
  2. 借助 JarFile 类,在您的 apk 容器中检索“classes.dex”条目。
  3. 获取它的输入流。

这是一个示例代码片段:

        // 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();
                }
        }

希望能帮助到你!

于 2014-11-05T15:11:40.230 回答
4

取决于您要执行的操作,但您可以访问 DexFile :

String sourceDir = context.getApplicationInfo().sourceDir;
DexFile dexFile = new DexFile(sourceDir);

它为您提供了一个http://developer.android.com/reference/dalvik/system/DexFile.html您可以枚举并从中加载类。

于 2012-04-12T12:55:57.027 回答