从Android库项目覆盖类

时间:2013-02-19 15:00:29

标签: android oop uml android-library library-project

我使用类似代码制作sereval Android应用程序,但我需要保持灵活性以自定义应用程序。我现在的解决方案是,我有一个Library-Project,我可以通过扩展类来覆盖Project中的功能。对于以下示例,我调用了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,但我不知道该怎么做?有没有人有想法解决这个问题?也许有人有另一个想法,我如何定制应用程序。

迈克尔

1 个答案:

答案 0 :(得分:0)

在我看来,最好使用MainActivityPL或类似的方法制作setStudent摘要。大部分活动及其所有逻辑仍将从您的库中共享,但它允许您的其他项目通过扩展StudentPL类来使用不同的学生对象。