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 に答える