0

私は、Javaソースファイルをテキスト形式でWebからダウンロードし、コンパイルしてロードし、実行中のプログラムの一部として使用するJavaプログラムを作成しようとしています。これは可能だと聞きましたが、それを実現するためのコードの書き方がわかりません。このようなドキュメントの方向に私を向けることができれば、完全に機能する例またはチュートリアルが素晴らしいでしょう。

それがどのように行われるかを学んだら、この知識を使用して、Webからのコードで自分自身をカスタマイズできるAndroidアプリケーションを構築する予定です。

4

4 に答える 4

1

デスクトップ プログラムは、シェル スクリプトを使用して、Java プログラムをダウンロード、コンパイル、および実行できます。Android にはコンパイラがなく、コンパイラを追加するのは簡単ではありません。最も簡単な方法は、サーバー プログラムも作成することです。次に、Android プログラムはサーバー プログラムに Java ソース コードをダウンロードしてコンパイルするように指示し、結果を Android プログラムに送信します。Android プログラムはClassLoaderを使用してそれをロードします。

1 つの注意点として、JDK コンパイラは標準の Java 仮想マシン用のバイトコードを生成しますが、Android の JVM は Dalvik VM を使用するため、Java クラスをコンパイルするときに JDK だけを使用することはできません。Android SDK を使用して、Android ClassLoader が使用できる互換性のあるバイトコードを生成する必要があります。

于 2012-07-05T23:14:24.473 に答える
0

あなたがやろうとしていることは、JRuby-for-AndroidプロジェクトまたはAIDEのいずれかに似ていますが、どちらもデバイス上に構築されますが、現在実行中のコード機能を追加するのではなく、Androidで実行するアプリを作成する場合のみですアプリ。JRuby-for-Androidはスクリプト用ですが、オープンソースであるため十分な機能を提供し、ニーズに合わせて変更できる場合があります。

AIDEプロジェクトは、デバイス上でJavaを使用してアプリを構築できるため、より多くの成果のように見えます。機能には、Dropboxとgitのサポートが含まれます。AIDEはクローズドソースアプリのようです。

于 2012-07-06T04:59:43.763 に答える
0

はい、一般的な意味で、やりたいことをすることは可能です。ただし、Android の特定のケースでは、サンドボックスによって、実行しようとしていることが困難または不可能になる制限が課される可能性があります。一般的なケースでこれを行うには、次のようなアプローチを使用できます。

  1. 選択した Web ライブラリ (たとえば、HttpClient、またはHtmlUnit、または単純なタスクの場合、Java の組み込みURLConnectionクラスも完全に受け入れられます) を使用して、Java ファイルをローカルにダウンロードします。

  2. ダウンロードした Java ファイルをコンパイルするプロセスSystem.exec()を fork するために使用します (またはJavaCompiler実装を使用して同じことを行います)。ダウンロードした Java ファイルが、システム上にない外部の JAR やライブラリを使用している場合、これは少し難しいかもしれないことに注意してください。 javac

  3. ClassLoader を使用して、コンパイル済みのクラスをロードします。実行時のクラスパスに、ロードしているコードが依存する外部 JAR/ライブラリも含まれている場合にのみ使用できることに注意してください。

ただし、ステップ #2 は、Android デバイスではほぼ確実に実行できません。代わりに、Android 互換のクラス ファイルを別の場所 (Yusuf が示唆するようにサーバー上など) でコンパイルし、コンパイルしたクラス ファイルをアプリからダウンロードして読み込む必要があります。または、実際に挑戦したい場合は、アプリに完全な Java コンパイラをパッケージ化し、その方法で Java ファイルをコンパイルすることもできます。

于 2012-07-05T23:35:00.037 に答える
-1

権限が問題になります。アプリがインストールされているパーティションにファイルを書き込むことはできません。アプリをSDカードに移動すればできるかもしれません。

別の方法は、カスタム クラスローダーを作成し、それを使用してクラス ファイルをランタイムにフィードすることです。Androidでそれができるかどうかはわかりません。

スクリプトはオプションですか? Android 用のスクリプト インタープリターを見つけることができると確信しています。次に、インタープリターでスクリプトをダウンロードして実行できます。

于 2012-07-05T23:47:40.017 に答える