Anda tidak akan mengejutkan siapa pun dengan pendekatan aktivitas tunggal saat membuat aplikasi final untuk Android. Tapi kami melangkah lebih jauh dan menggunakan No-Activity saat mengembangkan SDK. Sekarang mari kita cari tahu mengapa itu dibutuhkan, kesulitan yang dihadapi dan bagaimana mengatasinya.
SDK pihak ketiga standar di Android
Bagaimana SDK eksternal biasanya bekerja di Android? Buka Activityperpustakaan, melakukan beberapa pekerjaan, hasilnya dikembalikan jika perluonActivityResult.

, 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'
}Dalam hal ini, Anda akan menyingkirkan konflik build. Jika tidak, tidak akan ada versi.
Kesimpulan
Pengembangan SDK, jika dibandingkan dengan aplikasi Android sederhana, jauh lebih sulit, tetapi terkadang lebih menarik. Juga, persyaratan untuk kualitas produk akhir lebih tinggi - jika sesuatu jatuh, itu tidak akan jatuh untuk Anda, tetapi untuk klien Anda, yang sangat buruk.