1

外部 Jar ファイルをロードする機能を必要とする Android アプリケーションがあります。私は瓶の場所を知っています。

Android API が提供する PathClassLoader クラスを試してみましたが、役に立ちませんでした。アクティビティ内から次のコードを使用しています:

String jarPath = "/sdcard/jars/testjar.jar";

PathClassLoader myClassLoader = new PathClassLoader(jarPath, ClassLoader.getSystemClassLoader());

        try
    {
        Class<?> clazz = Class.forName("com.test.Class1", true, myClassLoader);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }

PathClassLoader インスタンスをインスタンス化すると、Dalvik は「classes.dex」ファイルが見つからないというメッセージを LogCat に出力します。その後、「Class.forName」は「ClassNotFoundException」をスローします。

「classes.dex」ファイルを必要とせずに、外部の Jar ファイルからクラスをロードできる方法を見つけようとしています。Jar ファイルにはこのファイルは含まれていませんが、他のアプリケーションがクラスパスに Jar を使用してビルドされている場合、Dalvik はクラスを問題なくロードできます。

簡単に言えば、「classes.dex」を必要とせずに、外部の Jar ファイルからクラスをロードするにはどうすればよいでしょうか?

どうもありがとう、P

更新 Dalvik によって記録されたメッセージは

Zip は適切ですが、内部に classes.dex がなく、同じディレクトリに有効な .odex ファイルがありません

4

2 に答える 2

2

「dx」というツールがあり、このツールは Java Binary Code を Android Dalvik Binary Code に転送できます。Android では、Java Binary Code を認識できません。

于 2013-05-08T12:57:05.360 に答える
0

解決策を発見しました。質問を投稿するとき、私は性急すぎたのかもしれません。

もちろん、Dalvik が実行するのはまさに .dex ファイルであるため、.dex ファイルが必要です。

私の問題を解決するために、外部の Jar ファイルを dex したので、独自の「classes.dex」が含まれるようになりました。幸いなことに、これは継続的インテグレーション環境の一部であるため、Android ライブラリをチェックアウトしてビルドすると、dx.exe による追加の中間ステップで「classes.dex」が生成され、最終的に実行時に Jar からクラスをロードできるようになります。時間。

于 2012-11-23T19:33:20.593 に答える