android - Android SDK(库)可以有应用类吗?

标签 android sdk

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

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

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

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

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

任何帮助/建议都很好!!

最佳答案

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

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

您可以提供一个 Application 类,您的库的用户必须从中扩展。 根据您的设计,此类可以是抽象的也可以不是。但是请注意,仅此一项在设计上并不完美,因为它可能会限制您的库的用户,因为他们可能不得不使用自己的类,或者可能想使用另一个强制他们扩展另一个 Application 类的库。

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

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

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

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

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

关于android - Android SDK(库)可以有应用类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52400023/

相关文章:

android - 如何将小部件和应用程序放在同一个 apk 中?

ios - 计算 iOS SDK 大小

android - 如何在android studio中创建一个sdk

ios - UISaveVideoAtPathToSavedPhotosAlbum 输出

android - Facebook SDK - 膨胀类 com.facebook.login.widget.LoginButton 时出错

android - 同时在 Android 和 iOS 上使用 OpenGL ES?

android - 继续查询时间直到匹配给定时间

java - 插入 SQLite 数据库 - Android

android - 通知中的字符串未更新

android - 将 CustomView 导出为 Base64 编码的 PNG