Android SDK(库)可以有应用程序类吗?

Rit*_*esh 6 sdk android

我正在编写一个 android 库(SDK),它将由我的主应用程序使用。

主应用程序有自己的应用程序类,其中所有基本初始化都像(Dagger 和 Stetho 以及其他库)一样进行。

我的 SDK 有自己的基础应用程序类,其中应用程序级组件的初始化类似于 Dagger 2.10+(其中应用程序类实现 HasActivityInjector)以及 Stetho、Timber、LeakCanary 和其他一些应用程序级初始化。

android 中是否可以有两个应用程序类 - 我想不可以,因为为每个应用程序创建一个进程。

我想知道将 SDK 应用程序类合并到主应用程序类中的最佳/推荐方法是什么。

任何相同的帮助/建议都会很棒!

pes*_*ira 3

Android 应用程序中不可能有两个应用程序类,因为系统保证应用程序是单例的。因此,您的库的使用必须使用您的类或他们自己的类,或者从 Android 提供的类进行扩展。

话虽如此,您可以做一些事情。

您可以提供一个应用程序类,您的库的用户必须从中扩展。这个类可以是抽象的,也可以不是抽象的,具体取决于您的设计。但请注意,仅此一点在设计上并不完美,因为它可能会限制库的用户,因为他们可能必须使用自己的类,或者可能想要使用另一个库来强制他们扩展另一个 Application 类。

因此,允许两者都被认为是一个好的做法。提供一个您可以扩展并且一切正常的应用程序类,或者提供一个不同的机制,该机制在自定义类(在应用程序内)中初始化,并且您的库可以使用它。

实际上,这正是匕首所做的。您可以从 DaggerApplication 扩展,或者必须自己实现 HasActivityInjector 并注入 DispatchingAndroidInjector 并实现 dagger 可用于获取 Injector 的方法。

另一种方法是创建您自己的 Singleton 实例。有些库利用这一点,让库的用户通过初始化单例(例如在他们的 Apps onCreate 方法中)来配置一些东西,然后您就可以访问它。

您很可能已经使用过此类库,例如 Fabric/Crashlytics。

请注意,根据您的要求,这可能会很棘手,因为应用程序可能会被杀死,并且库的用户必须始终确保在唤醒时(例如通过推送通知)正确配置单例实例。