sdCardに1つの.jarファイルがあります(dxツールを使用して、通常の.jarをdexにコンパイルしました..そうしないと、Androidは実行時に文句を言います)
使用したいクラスは実際にはアクティビティであり、「使用」とはインフレを意味します!
A) このようにクラスをロードすると、ロードされたクラスは親クラスのパッケージを親パッケージとして持つことに気付きました (コードを実行するもの: 例: jar ライブラリ内のクラスの実際のパッケージ: "com .something" & my-app-package: "com.wonderfull" -> ロードされたクラスは "com.wonderfull.com.something" にあります :) ) -> 再テスト: ライブラリと同じように元のパッケージを保持します
B)「最良の」シナリオでは、次のエラーが発生します。
アクティビティ ComponentInfo{com.appno2/com.appno1.futureLib.LibActivity} をインスタンス化できません: java.lang.ClassNotFoundException: ローダー dalvik.system.PathClassLoader の com.appno1.futureLib.LibActivity[/data/app/com.appno2-1 .apk]
C) マニフェストに、Activity (動的にロードされるもの) を次のように配置しました。
アクティビティ Android:name="com.appno1.futureLib.LibActivity" Android:label="@string/app_name" > /アクティビティ>
タイトルからの質問を繰り返します:sdCardのjarライブラリからActivityクラスを動的にロードして実際に使用することは可能ですか?
「なぜこれが欲しいの?」の場合 -ただの骨董品!+ 概念として: ユーザーが有効なライセンスを入力した直後に、アプリの実際のコードを (何かの jar の形で) ダウンロードする可能性
更新:-このアイデアはフラグメントで機能します(インポートされるクラスがフラグメントであることを意味します)
現在の結論: - 外部の .jar (たとえば、sdCard 上、またはインターネットからダウンロードするなど) にラメ Java クラスまたは Android UI 関連のクラスを含めることが可能であり、必要に応じてそれらを動的にロードします。そうそう: あなたはこの方法でこの活動を行うことはできません :( .. おそらくサービスでさえありません..
詳細情報 #1:実行時に Android アプリケーションからライブラリを動的にロードすることは可能ですか?
詳細情報 #2: http://android-developers.blogspot.ro/2011/07/custom-class-loading-in-dalvik.html
URLClassLoaderについて: これは機能します (DalvikClassLoader - ClassNotFoundException && を使用せずに、明らかに: このようにロードされたアクティビティをインフレートすることはできません)
File file = new File("/sdcard/myLib.jar");
File tmpDir = getDir("dex", 0);
ClassLoader loader = new URLClassLoader(new URL[]{file.toURI().toURL()}, this.getClass().getClassLoader());
DexClassLoader classloader = new DexClassLoader(file.getAbsolutePath(), tmpDir.getAbsolutePath(), null, loader);
Class<Object> classref = (Class<Object>) classloader.loadClass("packageInLib.ClassName");
Object myInstance = classref.getConstructor().newInstance();
Or instead of "loadClass"
Class<?> classref = Class.forName("packageInLib.ClassName", true, dalvikClassLoader);