私は同様のコードでいくつかのAndroidアプリを作成していますが、アプリをカスタマイズするために柔軟性を維持する必要があります。現在の私の解決策は、ライブラリ-プロジェクトがあり、クラスを拡張することでプロジェクトの機能をオーバーライドできることです。次の例では、LibraryProjectPLと呼びます。P1はPLを使用したカスタマイズされたプロジェクトであり、P2はPLを使用した別のカスタマイズされたプロジェクトです。
私の問題は、PLでStudentPL.javaからインスタンスを作成したいということです。P1では、StudentPLに変更を加える必要がないため、コンパイラはこのクラスを取得する必要がありますが、P2には、StudentPL.javaから拡張されたStudentP2.javaがあります。したがって、PLで作成されたインスタンスは、StudentP2.javaのインスタンスである必要があります。
私のアイデアは、プロジェクトPLのsrc-Folderに直接あるmirrorというパッケージを作成することでした。そこで、StudentPL.javaから拡張するクラスmirror.Student.javaを作成します。Library-Projectで、Student.javaのインスタンスを作成します。プロジェクトP1の場合、変更は必要ありません。P2では、srcフォルダーに同じフォルダーミラーを作成し、StudentP2.javaから拡張された同じクラスmirror.Student.javaを作成します。ClassLoaderがP2からmirror.Student.javaをロードし、PLからmirror.Student.javaを無視するという考え方ですが、これにより次のエラーが発生します。
- Dexローダー]dexを実行できません:複数のdexファイルがLmirror/Studentを定義しています。
- Dalvik形式への変換に失敗しました:dexを実行できません:複数のdexファイルがLmirror/Studentを定義しています
これが私が話していることのUMLです:
http://www.koenix-band.ch/images/other/Stackoverflow.gif
ClassLoaderを上書きする必要があるかもしれませんが、これを行う方法がわかりません。誰かがこの問題を解決するアイデアを持っていますか?誰かが別のアイデアを持っているかもしれません。どうすればアプリをカスタマイズできるのでしょうか。
マイケル