إنشاء Android SDK في نمط النشاط الفردي

لن تفاجئ أي شخص بنهج نشاط واحد عند إنشاء تطبيق نهائي لنظام Android. لكننا ذهبنا إلى أبعد من ذلك واستخدمنا No-Activity عند تطوير SDK. الآن دعنا نتعرف على سبب الحاجة إليها ، والصعوبات التي واجهتها وكيف تم حلها.

حزم SDK القياسية للجهات الخارجية في Android

كيف تعمل حزم SDK الخارجية عادةً في Android؟ Activityمكتبة مفتوحة ، تقوم ببعض الأعمال ، يتم إرجاع النتيجة إذا لزم الأمرonActivityResult.

سير عمل SDK القياسي.
سير عمل SDK القياسي.

, SDK . SDK, :

الحزمة المرغوبة من شاشات التطبيق و SDK
SDK

, SDK . , , , MapFragment Google. , , .

SDK

  • SDK , - Activity SDK -.

  • , SDK. (: , ).

  • SDK Lock Screen. , Lock Activity.

No-Activity SDK

, , , (Activity) SDK . - SDK . .

بدون نشاط SDK على الأجزاء
No-Activity 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 بسيط ، يكون أكثر صعوبة ، ولكنه في بعض الأحيان أكثر إثارة للاهتمام. أيضًا ، متطلبات جودة المنتج النهائي أعلى - إذا سقط شيء ما ، فلن يقع عليك ، ولكن لعميلك ، وهو أمر سيء للغاية.




All Articles