3

実行時にクラスを動的に定義し、Androidでインスタンス化する方法を探しています。私の理解では、これはすでにAndroidで行われているので、それを理解するのに少し助けが必要です。

JavascriptとPHPで同様の結果を得ることができます。ASM、BCEL、CGlibなどを使用してJavaで実行できることはわかっています。ただし、Androidで動作するかどうかを理解するには、これらのいずれについても十分に理解していません。または、それらが機能する中で、どのような影響がありますか?

仮に、3つすべてがAndroidで機能する場合、どちらを使用するか、どのように使用するかを理解し始める場所について、誰かが私に正しい方向を示すことができますか?

私はJavaプログラミングをあまり行っていません。また、AndroidでJavaプログラミングを使用しているのはつい最近のことです。そのため、入手できるすべてのヘルプ/修正に感謝しています。そうは言っても、あなたの答えが単純ではない場合、私は感謝します:これをしないでください。私はこれを正しく行う方法ではなく、具体的に行う方法を探しています。少なくとも、私のアプリがクラッシュするまでは。:)

これは、Androidで次の状況ですでに発生していると思います:( 100%確実ではありません)

JSONからオブジェクトを作成します。AIDL

4

3 に答える 3

3

これをしないでください:)

私は実際、このように動作するJSONライブラリがあるのではないかと疑っています。私が知っている2つの受け入れられた方法(私はこれについての専門家ではありませんが)は、名前と値のペアを保持するある種のデータ構造を作成することです-つまり、データ構造に何かを追加しますが、新しいクラスは作成しません-またはテンプレートを準備しますJSONオブジェクトから入力されるクラスの。

静的に型付けされているJavaは、実行時にまったく新しいクラスを作成するのにはあまり適していません。そのためのリフレクションのサポートはありません。ただし、不明なタイプのオブジェクトへのアクセスはサポートされています(たとえば、すべてのフィールド/メソッドのクエリ)。 。

できること、Javaクラスをファイルに手動で書き込み(Javaコードでコンパイルしてから何らかの方法でコンパイルするか、直接バイトコードで)、実行時にそのファイルをロードすることです。それは醜いですが、それは動作します。次に、クラスの実行時のロードとまったく同じです。ロードされたクラスの基本クラス/インターフェースに依存するか、リフレクションを使用して意味のあることを行う必要があります。

于 2011-09-17T08:20:16.413 に答える
3

これを本当にやりたい人のために(たとえば、DalvikのJITを使用して別の言語の高速インタープリターを作成する)、次のプロジェクトがあります。

http://code.google.com/p/dexmaker/

これにより、クラス、変数、およびメソッドをプログラムで作成できます。

于 2012-02-17T09:46:49.257 に答える
1

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