実行時にAndroidアプリケーションにコードを挿入したいと思います。dxツールを使用してSDカードにdexfileを生成しようとしましたが、インスタンス化しようとすると失敗します。新しいdalvikバイトコードを生成するコードを挿入するツールはありますか?私はAndroid用のいくつかのライブラリ、aspecjtまたはguiceを勉強しています。スクリプト言語で作業する方が良いですか?
人々に感謝します:)
実行時にAndroidアプリケーションにコードを挿入したいと思います。dxツールを使用してSDカードにdexfileを生成しようとしましたが、インスタンス化しようとすると失敗します。新しいdalvikバイトコードを生成するコードを挿入するツールはありますか?私はAndroid用のいくつかのライブラリ、aspecjtまたはguiceを勉強しています。スクリプト言語で作業する方が良いですか?
人々に感謝します:)
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);
DexClassLoaderクラスを使用して独自のDEXファイルを指定できます。これは、「プラグイン」動作を必要とするいくつかのアプリで使用されます。
ただし、DEXファイルを生成するデバイスには何もありません。その場でコードを生成し、それを利用するためのメカニズムはありません。
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
このページを見ることができますが、APKTool、SignApkなどのいくつかのツールを使用する必要があります。
http://blackhatcrackers.blogspot.de/2013/05/injecting-custom-code-into-android-apks.html
いいえ、できません。それが可能であれば、Androidアプリケーションの権限は機能しません。