Android 库项目 - 定义类

Posted

技术标签:

【中文标题】Android 库项目 - 定义类【英文标题】:Android Library Project - Defining Classes 【发布时间】:2011-06-24 21:29:12 【问题描述】:

嘿! (此处为长篇道歉)

我正在编写一些基于基本相同代码的应用程序。

每个应用程序都有其不同之处,有些应用程序会有新的活动,所有应用程序都会分配不同的资源。

我正在尝试使用一个 android 库项目,以便我可以将所有通用代码放在一个地方,因此只需进行一次重大更改,所有项目都会更新。

现在,资源是一个简单的解决方案,因为我可以在主应用程序中定义每个资源,只要命名约定保持不变,这些资源就会覆盖库项目中的资源。

现在,我的问题是,除了课程,我该如何做同样的事情?例如,我有一个基本视图作为跨所有视图的通用代码的包装器。在此,我开展各种活动。如果所有三个应用程序都需要启动不同的活动,因为它们将包含不同的 UI 和功能怎么办?我该怎么办?库项目永远不会知道主项目想要使用不同的活动,因为它已经被编译了。

我已经想到了几个解决方案,但我想知道其他人是否有一些想法?此处的任何反馈都会有很大帮助:

    要启动的库项目中的 Activity 存储对要加载的类的引用,该类将在启动时在主应用程序中定义。这是库项目调用此活动时,它可以加载它被告知的内容。

    我将所有不会更改的功能保留在库项目活动中。然后我扩展这个活动,并覆盖 onCreate 来做我需要做的事情(比如加载不同的布局、设置视图等)。现在这有一个缺点,因为我必须在我的主应用程序中而不是在库项目中定义大部分入口点。

我希望你能关注我的问题。请问我是否解释得不好。

谢谢,

亚当

【问题讨论】:

我想我可能已经找到了解决方案。使用 Intent 的反射和 setClassName 方法,库项目不需要有可用的 Class 实例。主应用程序现在可以定义这些类,并且库项目将能够调用它们。到目前为止似乎工作正常! 我遇到了同样的问题。您能否提供您的反射代码,因为我认为它也可以解决我的问题。 【参考方案1】:

或者更简单:您应该使用继承还是组合来实现这种灵活性?

我也有这种结构任务。通常你会通过重用一个适用的 pattern 来解决它,并将必要的代码部分分解成更小的部分。 IE。如果您知道不同之处在于视图,则将其提取到一些可区分的类中,这些类将针对一个通用接口实现并在您的基础活动中引用该接口。

给你一些链接:

http://tiedyedfreaks.org/eric/CompositionVsInheritance.html http://mindview.net/Books/TIPatterns/ http://en.wikipedia.org/wiki/Decorator_pattern - 可能适用于您的情况

至少从我对您的问题的理解来看,这更像是一个 OOP 设计问题。

【讨论】:

以上是关于Android 库项目 - 定义类的主要内容,如果未能解决你的问题,请参考以下文章

Android OpenCV 未定义对本机类的引用

最佳实践:扩展或覆盖 Android 库项目类

Android 逆向Android 逆向通用工具开发 ( 静态库项目中的网络操作核心类 CNetwork 分析 )

在 Xamarin.Android 和 MvvmCross 中定义应用程序类的基类

Android - 使用 Groupie 库过滤列表

Android测试取决于库项目上的测试类