我用类似的代码制作了几个 Android 应用程序,但我需要保持灵活来自定义应用程序。我现在的解决方案是,我有一个库项目,我可以通过扩展类来覆盖项目中的功能。对于以下示例,我将 Library Project 称为 PL。P1 是一个使用 PL 的定制项目,P2 是另一个使用 PL 的定制项目。
我现在的问题是,在 PL 中我想从 StudentPL.java 创建一个实例。在 P1 中,不需要对 StudentPL 进行任何更改,因此编译器应该采用此类,但在 P2 中,我有 StudentP2.java,它从 StudentPL.java 扩展而来。所以PL做的实例,应该是StudentP2.java的实例。
我现在的想法是,我制作了一个名为 mirror 的包,它直接位于 Project PL 的 src-Folder 中。在那里,我创建了从 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 Loader] 无法执行dex:多个dex文件定义了Lmirror/Student;
- 转换为 Dalvik 格式失败:无法执行 dex:多个 dex 文件定义 Lmirror/Student
这是我正在谈论的UML:
http://www.koenix-band.ch/images/other/Stackoverflow.gif
也许我应该覆盖 ClassLoader,但我不知道该怎么做?有没有人有解决这个问题的想法?也许有人有另一个想法,我如何自定义应用程序。
迈克尔