Android用の最終的なアプリケーションを作成するときに、単一のアクティビティアプローチで誰も驚かないでしょう。しかし、SDKを開発する際には、さらに進んでNo-Activityを使用しました。それが必要な理由、遭遇した困難、そしてそれらがどのように解決されたかを理解しましょう。
Androidの標準サードパーティSDK
外部SDKは通常Androidでどのように機能しますか?Activity
ライブラリを開き、いくつかの作業を実行しました。必要に応じて結果が返されますonActivityResult.

, SDK . SDK, :

, SDK . , , , MapFragment
Google. , , .
SDK
SDK , -
Activity
SDK -., 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.Activity
onActivityResult
, , , .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'
}
この場合、ビルドの競合を取り除くことができます。そうでなければ、単にバージョンはありません。
結論
SDKの開発は、単純なAndroidアプリケーションと比較すると、はるかに困難ですが、場合によってはより興味深いものになります。また、最終製品の品質に対する要件は高くなります。何かが落ちても、それはあなたにとってではなく、クライアントにとっては非常に悪いことです。