توقيع التطبيق
المفاتيح وتوقيع التطبيقات في Play
توقيع التطبيق درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.
لماذا يجب توقيع التطبيقات
لن يثبت Android أي تطبيق ما لم يكن موقّعًا رقميًا. ويثبت التوقيع أمرين: الجهة التي نشرت التطبيق، وأن ملف APK لم يتم العبث به منذ ذلك الحين.
والأهم أن التوقيعات تربط التحديثات بالتطبيق الأصلي. ولا يُقبل التحديث إلا إذا وُقّع باستخدام المفتاح نفسه المستخدم للإصدار المثبت. إذا فقدت هذا المفتاح، فلن تتمكن من تحديث تطبيقك بعد ذلك — مطلقًا.
يتناول هذا الدرس مخازن المفاتيح، وإعدادات التوقيع، والنهج الحديث الأكثر أمانًا من Google: Play App Signing.
مخازن المفاتيح والمفاتيح
توجد هوية توقيعك في ملف مخزن مفاتيح (.jks أو .keystore). ويمكن أن يحتوي مخزن المفاتيح على عدة مفاتيح؛ ولكل مفتاح اسم مستعار وكلمة مرور خاصة به.
- كلمة مرور مخزن المفاتيح — تفتح قفل الملف.
- الاسم المستعار للمفتاح — يعرّف المفتاح الموجود داخله.
- كلمة مرور المفتاح — تفتح قفل ذلك المفتاح تحديدًا.
تُوقّع إصدارات تصحيح الأخطاء التي تشغّلها يوميًا تلقائيًا باستخدام مخزن مفاتيح مؤقت مخصص لتصحيح الأخطاء. أما الإصدار، فيتطلب مخزن مفاتيح خاصًا بك.
إنشاء مخزن مفاتيح
يمكنك إنشاء مخزن مفاتيح من مربع حوار Android Studio، أو باستخدام الأمر keytool المرفق مع JDK.
استخدم مدة صلاحية طويلة (25 عامًا أو أكثر) — فإذا انتهت صلاحية المفتاح، فلن تتمكن من نشر التحديثات. ويُعد RSA 2048 الخيار القياسي.
keytool -genkeypair \
-v \
-keystore release.jks \
-alias upload \
-keyalg RSA \
-keysize 2048 \
-validity 10000كتلة signingConfigs
لتوقيع التطبيق تلقائيًا أثناء عملية إنشاء Gradle، أعلن إدخالًا في signingConfigs وألحقه بنوع البناء release.
يعمل هذا الأسلوب، لكن لاحظ أن كلمات المرور موجودة مباشرةً في ملف البناء — وسنعالج ذلك تاليًا.
android {
signingConfigs {
create("release") {
storeFile = file("release.jks")
storePassword = "superSecret"
keyAlias = "upload"
keyPassword = "superSecret"
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
}
}
}إبعاد الأسرار عن Git
لا ترفع كلمات المرور أو مخزن المفاتيح إلى نظام التحكم في الإصدارات مطلقًا. اقرأها بدلًا من ذلك من ملف محلي مستثنى من Git هو keystore.properties.
أضف keystore.properties و*.jks إلى .gitignore.
// top of app/build.gradle.kts
val keystoreProps = Properties().apply {
val f = rootProject.file("keystore.properties")
if (f.exists()) load(f.inputStream())
}
android {
signingConfigs {
create("release") {
storeFile = file(keystoreProps["storeFile"] as String)
storePassword = keystoreProps["storePassword"] as String
keyAlias = keystoreProps["keyAlias"] as String
keyPassword = keystoreProps["keyPassword"] as String
}
}
}ملف keystore.properties
ملف الخصائص المطابق هو قائمة نصية عادية من أزواج key=value، وتُبقى خارج Git وتُخزّن بأمان (مثل مدير كلمات مرور أو مخزن أسرار CI).
على خادم CI، يمكنك حقن هذه القيم باعتبارها أسرارًا مدعومة بمتغيرات البيئة بدلًا من استخدام ملف مرفوع إلى نظام التحكم في الإصدارات.
# keystore.properties (git-ignored!)
storeFile=release.jks
storePassword=superSecret
keyAlias=upload
keyPassword=superSecretPlay App Signing
يستخدم Play حاليًا Play App Signing. تحتفظ Google هنا بـ مفتاح توقيع التطبيق الحقيقي في بنيتها التحتية الآمنة، وتستخدمه لتوقيع ملفات APK التي تصل إلى المستخدمين.
ولا تدير سوى مفتاح الرفع: توقّع حزمتك به ثم ترفعها. ويتحقق Play من مفتاح الرفع، ويزيله، ثم يعيد التوقيع باستخدام مفتاح توقيع التطبيق.
وتتمثل الفائدة الكبرى في أنه إذا فقدت مفتاح الرفع في أي وقت، يمكنك طلب إعادة تعيينه — بينما يظل مفتاح توقيع التطبيق (المفتاح الذي يثق به المستخدمون) آمنًا لدى Google.
مفتاح الرفع مقابل مفتاح توقيع التطبيق
مفتاحان ومهمتان — لا تخلط بينهما:
- مفتاح الرفع — ملكك. يوقّع ملف AAB الذي ترفعه. ويمكن إعادة تعيينه إذا فُقد.
- مفتاح توقيع التطبيق — ملك Google (أو مفتاح رفعته مرة واحدة). يوقّع ملفات APK النهائية التي يثبتها المستخدمون. وهو دائم.
عند تسجيل تطبيق جديد، يتمثل المسار الأبسط في السماح لـ Google بإنشاء مفتاح توقيع التطبيق، وتوقيع عمليات الرفع باستخدام مفتاح الرفع الخاص بك.
التحقق من التوقيع
لتأكيد كيفية توقيع عنصر برمجي، استخدم apksigner من أدوات إنشاء Android SDK. فهو يعرض شهادة التوقيع ومخططات التوقيع الموجودة (v1/v2/v3).
كما أن مقارنة بصمة SHA-256 للشهادة هي الطريقة التي تسجّل بها تطبيقك لدى خدمات مثل Firebase أو Google Sign-In.
# Verify and print signer certificates of an APK
apksigner verify --print-certs app-release.apk
# Show the SHA-256 fingerprint of a keystore key
keytool -list -v -keystore release.jks -alias uploadحماية مفاتيحك
يصعب استبدال مفتاح الرفع، أما مفتاح توقيع التطبيق (إذا كنت تديره بنفسك) فلا يمكن استبداله. تعامل معهما كما تتعامل مع أغلى ما تملك:
- أنشئ نسخة احتياطية من مخزن المفاتيح في موقعين آمنين على الأقل.
- خزّن كلمات المرور في مدير كلمات مرور، ولا تضعها في المصدر مطلقًا.
- استخدم Play App Signing حتى يمكن استرداد مفتاح الرفع المفقود.
- قيّد عدد أعضاء الفريق الذين يمكنهم الوصول إلى مخزن المفاتيح.
تُركت تطبيقات منشورة كثيرة بلا صيانة لمجرد أن المطور فقد المفتاح ولم يعد قادرًا على إصدار تحديثات.
جمع الأجزاء معًا
يبدو سير عمل توقيع الإصدار الكامل كما يلي:
- أنشئ مخزن مفاتيح الرفع باستخدام
keytool. - اربطه بـ
signingConfigs، مع قراءة الأسرار منkeystore.properties. - أنشئ ملف
.aabموقّعًا باستخدام./gradlew bundleRelease. - ارفعه إلى Play، الذي يعيد توقيعه باستخدام مفتاح توقيع التطبيق قبل إيصاله إلى المستخدمين.
من الآن فصاعدًا، يجب توقيع كل تحديث باستخدام مفتاح الرفع نفسه.
تحقق سريع
عند تفعيل Play App Signing، ما المفتاح الذي تستخدمه أنت لتوقيع الحزمة التي ترفعها، وماذا يحدث إذا فقدته؟
مراجعة: توقيع التطبيق
التوقيع هو ما يجعل تطبيق Android قابلًا للتثبيت والتحديث:
- يحتوي مخزن المفاتيح على مفاتيح؛ ولكل مفتاح اسم مستعار وكلمات مرور.
- أنشئ مفتاحًا طويل الصلاحية باستخدام
keytool، واربطه بـsigningConfigs. - أبقِ كلمات المرور خارج Git باستخدام
keystore.propertiesو.gitignore. - يقسم Play App Signing المفاتيح إلى مفتاح الرفع القابل لإعادة التعيين الخاص بك ومفتاح توقيع التطبيق الدائم الخاص بـ Google.
- احتفظ بنسخ احتياطية من المفاتيح بعناية — فقدان مفتاح قد ينهي حياة التطبيق.
التالي: إعداد Play Console وصفحة تطبيقك في المتجر.
الأسئلة الشائعة
هل درس «توقيع التطبيق» مجاني؟
نعم — نص درس «توقيع التطبيق» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.
ماذا ستتعلم في «توقيع التطبيق»؟
المفاتيح وتوقيع التطبيقات في Play تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟
لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «توقيع التطبيق»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟
نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.