0

私は最初の実際の Android プロジェクトであるタクシー注文アプリケーションをほぼ完成させました。将来のリリースでは、一部の優れたプログラムが行うように、プログラミング コードとリソースの組み込みの自動更新を実装する予定です。http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.htmlに基づいて、簡単な例を実行することができました。Android/dalvik で Java クラスを動的にロードする方法は? Android アプリケーションから実行時にライブラリを動的にロードすることは可能ですか?. ここでは完全なコードは掲載しませんが、上記のリンクとよく似ています。メインの apk はランチャーとして機能し、SD カードから jar ファイルをロードし、そこから特別なクラスをロードし、オブジェクトをインスタンス化し、Java Reflect API を介してそのメソッドを呼び出します。これにより、単に ab AlertDialog が表示されます。

しかし、APIとして機能する、ランチャーとロードされたライブラリの両方で共通の基本Javaインターフェースを使用できるようにしたいと考えています。そこで、ランチャーとライブラリの両方で Problem というインターフェイスを宣言しようとしました。コードは次のようになります。

Class<?> problemClass = cl.loadClass("ru.homez.euler.Problem1");
Problem problem = (Problem)problemClass.newInstance();
problem.solve(this);

Dalvik VM はこれが好きではありません。

java.lang.IllegalAccessError: 検証済みクラスのクラス参照が予期しない実装に解決されました

これは、問題のインターフェイスがランチャーとライブラリの両方で定義されているために発生すると思います。ここでそのような問題を見てきました。これに対処する方法は?

4

1 に答える 1

2

私はこれを見つけて幸運でした:https://stackoverflow.com/questions/10698049/how-to-dynamically-load-a-jar-with-‌common-abstract-class。ライブラリjarからインターフェイスを削除し、ローダーでその可用性をパブリックに変更しました(ライブラリクラスローダーは、apkでロードされたパッケージで使用可能なクラスを認識しません)。問題が解決しました!

于 2012-07-15T06:01:28.247 に答える