تطوير الجوّال

نشر تطبيق Kotlin على Play Store: التوقيع وbundle خطوة بخطوة

3 min de lecture

🔝 الدليل الرئيسي: Kotlin وJetpack Compose في 2026

تطبيق Kotlin مُختبَر ووظيفي لا يصبح تطبيقًا حقيقيًا إلا لحظة هبوطه على بطاقة متجر. لـ Android، هذا Google Play Console. السلسلة بين مشروع Android Studio وتنزيل من قبل مستخدم تمرّ بخمس خطوات كبرى: إنشاء حساب Play Console، توليد keystore توقيع، إعداد build release، إنتاج Android App Bundle (.aab)، رفع الحزمة واجتياز مراجعة Google. كل خطوة لها فخاخها. يستعرض هذا الدرس الإصدارات والسياسات المُحدَّثة في 17 مايو 2026، بما في ذلك عتبة 16 KB الإلزامية منذ 1 نوفمبر 2025 لـ Android 15+ وtarget SDK 36 الإلزامي اعتبارًا من 31 أغسطس 2026.

المتطلبات

  • تطبيق Kotlin Compose وظيفي، مُختبَر على محاكي وجهاز فعلي
  • حساب Google شخصي (سيُستخدَم لـ Play Console)
  • 25 USD لرسوم تسجيل المطوّر (مرة واحدة، دفع بالبطاقة)
  • هوية صالحة (التحقق من الهوية مطلوب منذ 2024)
  • عنوان بريدي حقيقي
  • الوقت المُقدَّر: 4-6 ساعات شاملةً مراجعات Google

الخطوة 1 — إنشاء حساب Play Console

توجّه إلى play.google.com/console وانقر « Commencer ». اختر Compte personnel ما لم تنشر باسم شركة مُسجَّلة. الحساب الشخصي يفرض فترة اختبار: في أول 14 يومًا، التطبيق مرئي فقط لمجموعة محصورة من المُختبِرين، ويجب على الأقل 12 مُختبِرًا opt-in باستمرار على 14 يومًا للنشر في الإنتاج. هذا إجراء ضد البريد المزعج أُدخل في نوفمبر 2023 (في الأصل 20 مُختبِرًا، خُفِّض إلى 12 في 11 ديسمبر 2024). للشركات، الحساب « Entreprise » يُعفي من هذا القيد.

ادفع 25 USD. البطاقة يجب أن تكون باسم الشخص المُنشئ للحساب. Google يتحقق من هويتك عبر رفع وثيقة (passport، CNI) وتأكيد عنوان — احسب 24-72 ساعة. خلال هذا الوقت، يمكنك تحضير الباقي: إعداد المشروع، توليد keystore، إنتاج أول bundle اختبار.

الخطوة 2 — توليد keystore توقيع

كل تطبيق Android مُوزَّع يجب أن يُوقَّع تشفيريًا. التوقيع يضمن أن تحديثًا يأتي من نفس الناشر مثل الإصدار الأولي. مفتاح التوقيع ثمين: إذا فقدته، لن تستطيع تحديث تطبيقك بدون نشر تحت package ID جديد (فقدان كل المستخدمين).

keytool -genkey -v \
  -keystore release.keystore \
  -keyalg RSA -keysize 2048 \
  -validity 25000 \
  -alias monalias

أربع نقاط حاسمة. خزّن release.keystore خارج المستودع (أبدًا لا تُسجّله)، مُشفَّر على cloud خاص أو coffre مثل Bitwarden. سجّل كلمتي المرور (keystore + alias). صلاحية 25,000 يوم (68 سنة) تُغطّي المدة المعقولة. RSA 2048 bits هو المعيار المقبول من Google.

الخطوة 3 — إعداد signingConfig في Gradle

// keystore.properties (NE PAS COMMITER)
storeFile=/Users/moi/secrets/release.keystore
storePassword=mot_de_passe_keystore
keyAlias=monalias
keyPassword=mot_de_passe_alias

// build.gradle.kts (module app)
val keystorePropertiesFile = rootProject.file("keystore.properties")
val keystoreProperties = Properties().apply {
    if (keystorePropertiesFile.exists()) {
        load(FileInputStream(keystorePropertiesFile))
    }
}

android {
    signingConfigs {
        create("release") {
            storeFile = file(keystoreProperties.getProperty("storeFile") ?: "dummy")
            storePassword = keystoreProperties.getProperty("storePassword")
            keyAlias = keystoreProperties.getProperty("keyAlias")
            keyPassword = keystoreProperties.getProperty("keyPassword")
        }
    }

    buildTypes {
        release {
            signingConfig = signingConfigs.getByName("release")
            isMinifyEnabled = true
            isShrinkResources = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }
}

خياران يُفعّلان تحسين build release. isMinifyEnabled = true يُطلق R8 الذي يُقلّص ويُشفّر كود Kotlin، يُقلّل حجم APK 30-50%. isShrinkResources = true يسحب الموارد غير المُشار إليها، مكسب إضافي 5-15%.

الخطوة 4 — إعداد manifest والامتثال 2026

android {
    namespace = "io.itskillscenter.monapp"
    compileSdk = 36

    defaultConfig {
        applicationId = "io.itskillscenter.monapp"
        minSdk = 24
        targetSdk = 36
        versionCode = 1
        versionName = "1.0.0"
    }

    packaging {
        jniLibs {
            useLegacyPackaging = false
        }
    }
}

ثلاثة متطلبات 2026. targetSdk = 36 إلزامي اعتبارًا من 31 أغسطس لأي تقديم جديد. compileSdk = 36 مفروض من تبعيات AndroidX الحديثة. useLegacyPackaging = false يضمن أن المكتبات الأصلية تبقى غير مضغوطة ومحاذاة 16 KB — مطلوب من Google Play منذ 1 نوفمبر 2025. إذا كان تطبيقك يُضمّن NDK أو مكتبات أصلية، أعد التجميع بـ NDK r28+ وتحقّق من المحاذاة بـ readelf -l libnative.so | grep LOAD.

الخطوة 5 — إنتاج Android App Bundle (.aab)

منذ 2021، Google Play يتطلّب صيغة Android App Bundle (.aab) للتطبيقات الجديدة. خلافًا لـ APK monolithique، الحزمة تحوي كل الموارد وGoogle يُولّد APK مُحسَّن لكل جهاز (حسب حجم الشاشة، اللغة، معمارية CPU). للمستخدم، نموذجيًا 30-50% أقل للتحميل.

# Construire le bundle release signé
./gradlew bundleRelease

# Le bundle se trouve dans :
# app/build/outputs/bundle/release/app-release.aab

# Vérifier la signature
jarsigner -verify -verbose -certs app-release.aab

قبل الرفع، اختبر محليًا الحزمة بـ bundletool (Google) الذي يُحاكي ما سيُولّده Google Play كـ APK:

java -jar bundletool.jar build-apks \
    --bundle=app-release.aab \
    --output=test.apks \
    --mode=universal

java -jar bundletool.jar install-apks --apks=test.apks

الخطوة 6 — إنشاء بطاقة Play Console

في Play Console، انقر « Créer une application ». املأ: اسم التطبيق (50 حرفًا)، اللغة الافتراضية، النوع، مجاني/مدفوع. اقبل تصريحات Google (سياسة المحتوى، قوانين التصدير الأمريكية).

قبل أي رفع، أكمل الأقسام الإلزامية في لوحة التحكم. خصوصية البيانات: أعلن كل نوع بيانات مُجمَّعة، الغرض، وما إذا كانت البيانات مُشفَّرة في النقل. محتوى التطبيق: الجمهور المُستهدف، إمكانية الوصول، محتوى إعلاني، سياسة خصوصية (URL لصفحة مُستضافة). بطاقة Play Store: وصف قصير (80 حرفًا)، وصف كامل (4000 حرف)، لقطات شاشة (2 على الأقل portrait)، أيقونة 512×512 PNG، banner 1024×500 PNG.

الخطوة 7 — الرفع والنشر التدريجي

في قائمة « Production »، انقر « Créer une release ». فعّل Play App Signing (مُوصى به من Google منذ 2021): Google يُولّد ويحتفظ بالمفتاح النهائي للتوقيع، keystore الخاص بك يخدم فقط لتوقيع الرفع. إذا فقدت keystore الرفع، Google يستطيع إعادة توليده — شبكة أمان تُبرّر تمامًا المرور بهذا الخيار.

ارفع ملف app-release.aab. اختر نشرًا تدريجيًا (rollout). موصى به: ابدأ بـ 5% من المستخدمين لـ 24 ساعة، ارفع إلى 20% في اليوم التالي إذا لم يُبلَّغ عن أعطال غير طبيعية، ثم 50%، ثم 100% بعد أسبوع. هذا التدرّج يُتيح إيقاف rollout بنقرة إذا ظهر bug حرج.

الخطوة 8 — متابعة صحة التطبيق

بمجرد إطلاق التطبيق، يبدأ العمل فعلًا. Play Console يكشف عدة لوحات للمراقبة المستمرة. Vitals: معدل الأعطال (هدف < 1.09%)، معدل ANR (هدف < 0.47%)، انطلاقات بطيئة — فوق العتبات، Google يُحطّ من قيمة البطاقة في البحث. تقييمات المستخدمين: ردّ في 48 ساعة على التقييمات ≤ 3 نجوم برسالة تقترح حلًا. إحصائيات: تثبيتات، إلغاءات، الميزات المُستخدمة.

إعداد Firebase Crashlytics لاستعادة stack traces للأعطال في زمن شبه حقيقي — Play Console يرفعها أيضًا لكن بتأخير 24-48 ساعة. Crashlytics مجاني، يتكامل في 5 دقائق، ويكشف أعطالًا غير مرئية في الاختبار الداخلي.

أخطاء شائعة عند النشر

العَرَض السبب الحل
APK uses permissions that require a privacy policy صلاحية حساسة (location، contacts) استضف سياسة خصوصية، املأ URL
Target API level is not appropriate targetSdk < 36 انتقل إلى 36 قبل 31 أغسطس 2026
Bundle not properly signed signingConfig منسي تحقّق من signingConfigs.release وbuildTypes.release
التطبيق عالق في المراجعة أكثر من 7 أيام سياسة مُنتهَكة اقرأ سبب Google، صحّح، أعد التقديم
Cannot upload — version code already used versionCode لم يُزَد زِد versionCode في كل رفع
تعطّل بعد الرفع لكن ليس في debug R8 شفّر صنفًا مُستخدمًا بالانعكاس أضف قاعدة ProGuard -keep class

التكيّف مع ملامح ناشر مختلفة

لمطوّر مستقل ينشر مشروعه الأول، احفظ البساطة: حساب شخصي (اقبل الـ 14 يومًا مغلقة)، لا monétisation عند البدء، نشر بـ 5% ثم 100%. لـ PME تنشر تطبيق عميل، أنشئ حساب Entreprise مع رقم TVA وحساب بنكي مهني. للوكالات أو freelances الذين ينشرون لعملاء، لا تنشر أبدًا تحت حسابك: أنشئ حسابًا باسم العميل، أضف بريدك كمتعاون.

الأسئلة الشائعة

هل فعلًا 25 USD للدفع؟
نعم، مرة واحدة. Apple يطلب 99 USD/سنة، Google صفقة بالمقارنة.

تطبيقي لا يظهر بعد النشر؟
فهرسة Play تستغرق 1-4 ساعات بعد التصديق. ما بعد ذلك، تحقق من Disponible dans ce pays في إعدادات التوزيع.

كيف نُرحّل من APK إلى AAB؟
فعّل Play App Signing في Play Console، ارفع الحزمة بدل APK في release التالية. لا ترحيل في الكود، فقط أمر Gradle يتغيّر.

كم من الوقت للمراجعة الأولى؟
3-7 أيام نموذجيًا. المراجعات اللاحقة أسرع (غالبًا 1-2 يوم) ما لم نُغيّر طبيعة التطبيق.

هل يمكن الاختبار بدون نشر إنتاج؟
نعم عبر مسارات Internal وClosed وOpen Testing. Internal Testing يقبل 100 مُختبِر وينتشر في دقائق.

ماذا نفعل إذا عُلِّق التطبيق؟
اقرأ السبب بعناية، صحّح، اطلب إعادة فحص عبر مساعدة Play Console. إذا أُلغي التطبيق ثلاث مرات، يُحظَر الحساب نهائيًا.

مقالات ذات صلة

Sponsoriser ce contenu

Cet emplacement est à vous

Position premium en fin d'article — c'est l'instant où les lecteurs sont le plus engagés. Réservez cet espace pour votre marque, votre formation ou votre offre.

Recevoir nos tarifs
Publicité