5

実行時にAndroidアプリケーションにコードを挿入したいと思います。dxツールを使用してSDカードにdexfileを生成しようとしましたが、インスタンス化しようとすると失敗します。新しいdalvikバイトコードを生成するコードを挿入するツールはありますか?私はAndroid用のいくつかのライブラリ、aspecjtまたはguiceを勉強しています。スクリプト言語で作業する方が良いですか?

人々に感謝します:)

4

5 に答える 5

7

Dexmakerは新しく、このためだけに設計されています。プロジェクトのWebサイトの例の一部を次に示します。

    DexMaker dexMaker = new DexMaker();

    // Generate a HelloWorld class.
    TypeId<?> helloWorld = TypeId.get("LHelloWorld;");
    dexMaker.declare(helloWorld, "HelloWorld.generated", Modifier.PUBLIC, TypeId.OBJECT);
    generateHelloMethod(dexMaker, helloWorld);

    // Create the dex file and load it.
    File outputDir = new File(".");
    ClassLoader loader = dexMaker.generateAndLoad(HelloWorldMaker.class.getClassLoader(),
            outputDir, outputDir);
    Class<?> helloWorldClass = loader.loadClass("HelloWorld");

    // Execute our newly-generated code in-process.
    helloWorldClass.getMethod("hello").invoke(null);
于 2012-03-02T04:08:00.483 に答える
2

DexClassLoaderクラスを使用して独自のDEXファイルを指定できます。これは、「プラグイン」動作を必要とするいくつかのアプリで使用されます。

ただし、DEXファイルを生成するデバイスには何もありません。その場でコードを生成し、それを利用するためのメカニズムはありません。

于 2010-11-24T00:01:33.277 に答える
0

ASMまたはBCELを使用してデバイス上で実行時にDalvikバイトコードを生成する

この例では、ASMとBCELを使用して、デバイス上で2つのクラスを生成します。クラスはSDカードメモリに作成され、Androidオペレーティングシステムに動的に読み込まれます。

次のクラスは、例のテンプレートです。

public class HelloWorld {
    public static void hello(){
        int a=0xabcd;
        int b=0xaaaa;
        int c=a-b;
        String s=Integer.toHexString(c);
        System.out.println(s);
    }

}

まず、BCELまたはASMを使用して、SDカードに新しいアドホッククラスを作成しました。次に、SDカードのDxclientユーティリティを使用してJavaクラスをDexクラスに変換しました。最後にjarファイルを作成し、このパッケージをSDカードからデバイスにロードしました

DXClientリファレンス

https://github.com/headius/dexclient/blob/master/src/DexClient.java

于 2012-03-01T11:54:51.243 に答える
-2

このページを見ることができますが、APKTool、SignApkなどのいくつかのツールを使用する必要があります。

http://blackhatcrackers.blogspot.de/2013/05/injecting-custom-code-into-android-apks.html

于 2013-08-08T13:55:04.177 に答える
-13

いいえ、できません。それが可能であれば、Androidアプリケーションの権限は機能しません。

于 2010-11-23T20:05:48.417 に答える