在为Android创建最终应用程序时,您不会因单一活动方法而感到惊讶。但是,在开发SDK时,我们走得更远并使用了No-Activity。现在让我们弄清楚为什么需要它,遇到的困难以及如何解决。
Android中的标准第三方SDK
外部SDK通常在Android中如何工作?打开Activity库,执行一些工作,必要时返回结果onActivityResult.

, SDK . SDK, :

, SDK . , , , MapFragment Google. , , .
SDK
SDK , -
ActivitySDK -., SDK. (: , ).
SDK Lock Screen. , Lock
Activity.
No-Activity SDK
, , , (Activity) SDK . - SDK . .

, . ?
No-Activity SDK
SDK , .. .
, SDK -
childFragmentManager., .. .
No-ActivitySDK
, Single-Activity.
SDK , dagger - ( ).
SDK
Activity..requireActivity. SDK.ActivityonActivityResult, , , .SDK, ..
Activity.
3rd party SDK
SDK. . , dagger2 .
Dagger2 SDK
dagger Application. SDK , Application, , .
, .
internal object ComponentHolder {
lateinit var appComponent: SdkAppComponent
private set
@Synchronized
fun init(ctx: Context) {
if (this::appComponent.isInitialized) return
appComponent = DaggerSdkAppComponent
.builder()
.sdkAppModule(SdkAppModule(ctx))
.build()
}
} , init, , SDK , . SDK. EntryPointFragment. SDK. SDK childFragmentManager.
EntryPointFragment ComponentHolder Dagger.
override fun onCreate(savedInstanceState: Bundle?) {
ComponentHolder.init(requireActivity())
ComponentHolder.appComponent.inject(this)
super.onCreate(savedInstanceState)
}, ComponentHolder, SDK .
okhttp3 major 4.+. Kotlin, , , code() . SDK, 3, 4 SDK, .
, . 2 flavor:
flavorDimensions("okhttpVersion")
productFlavors {
v3 {
dimension = "okhttpVersion"
}
v4 {
dimension = "okhttpVersion"
}
}
dependencies {
v3Api okhttp3.core
v3Api okhttp3.logging
v4Api okhttp4.core
v4Api okhttp4.logging
} , flavor , code() code.
// Code in v3 folder
class ResponseWrapper(private val response: Response) {
val code : Int
get() = response.code()
}// Code in v4 folder
class ResponseWrapper(private val response: Response) {
val code : Int
get() = response.code
}.
: , :
defaultConfig {
...
missingDimensionStrategy 'okhttpVersion', 'v4'
}在这种情况下,您将摆脱构建冲突。否则,根本就不会有版本。
结论
与简单的Android应用程序相比,SDK开发要困难得多,但有时会更有趣。此外,对最终产品质量的要求也更高-如果有任何问题,对您而言,它不会对您而是对您的客户而言,这是非常糟糕的。