لماذا تحتاج ملفات APK إلى التوقيع؟
يجب أن يتم توقيع كل تطبيق Android رقميًا قبل أن يتم تثبيته. التوقيع يخدم عدة أغراض:
- التحقق من هوية مطور التطبيق
- يضمن عدم العبث بملف APK
- يسمح لنظام Android بمطابقة تحديثات التطبيق مع النسخة الأصلية
- مطلوب للتثبيت على جميع أجهزة Android
أداة سطح المكتب مطلوبة
يتطلب توقيع APK أدوات سطر الأوامر (JDK / Android SDK). لا يمكن القيام بذلك في متصفح الويب. اتبع الدليل أدناه لتوقيع ملفات APK على جهاز الكمبيوتر الخاص بك.
الطريقة الأولى: التسجيل باستخدام apksigner (مستحسن)
apksigner هي أداة توقيع APK الرسمية من Google، وهي مضمنة في Android SDK Build Tools.
الخطوة 1: إنشاء مخزن المفاتيح
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
الخطوة 2: قم بالتوقيع على APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
الخطوة 3: التحقق من التوقيع
apksigner verify --verbose signed-app.apk
الطريقة الثانية: التوقيع باستخدام jarsigner (القديم)
# Sign
jarsigner -verbose -sigalg SHA256withRSA \
-digestalg SHA-256 \
-keystore my-release-key.jks \
app-unsigned.apk my-key-alias
# Verify
jarsigner -verify -verbose app-signed.apk
الخطوة 4: زيبلاين (مهم!)
بعد التوقيع، قم بتحسين ملف APK باستخدام zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
توقيع التصحيح (للاختبار)
لأغراض الاختبار، يمكنك استخدام مخزن مفاتيح تصحيح أخطاء Android الافتراضي:
# Location of debug keystore:
# Linux/Mac: ~/.android/debug.keystore
# Windows: C:\Users\{USERNAME}\.android\debug.keystore
# Sign with debug key
apksigner sign --ks ~/.android/debug.keystore \
--ks-key-alias androiddebugkey \
--ks-pass pass:android \
app.apk
مقارنة أدوات التوقيع
| المعيار | apksigner | jarsigner |
|---|---|---|
| التوقيع V1 | ||
| التوقيع V2 | ||
| التوقيع V3 | ||
| موصى به | تراث |
أداة توقيع APK — الأسئلة المتداولة
الأسئلة الشائعة حول توقيع APK ومخزن المفاتيح وتوقيع كود Android
لماذا يعتبر ترتيب المحاذاة (zipalign قبل apksigner) مهمًا على Android 11–15
أحد الأخطاء الأكثر شيوعًا التي يرتكبها المطورون والمعدلون عند التوقيع على ملف APK معدّل أو مدمج هو تشغيل zipalign بعد لتوقيع الحزمة - أو استخدام الأداة المساعدة jarsigner القديمة لـ Java بدلاً من Android SDK apksigner من Google. نظرًا لأن الإصدارين v2 وv3 من APK Signature Scheme يحسبان تجزئة التشفير عبر التخطيط الثنائي بأكمله لأرشيف ZIP، فإن تعديل إزاحات البايت باستخدام zipalign بعد التوقيع يؤدي على الفور إلى إبطال كتلة التوقيع v2/v3.
بدءًا من Android 11 (مستوى واجهة برمجة التطبيقات 30) ويتم تطبيقه بشكل صارم على Android 14 و15، يتطلب PackageManager شرطين غير قابلين للتفاوض لأي ملف APK يستهدف مستويات SDK الحديثة:
- محاذاة غير مضغوطة ذات 4 بايت resources.arsc: يجب تخزين جدول الموارد المترجم (resources.arsc) غير مضغوط (STORED) ومحاذاته على حدود 4 بايت حتى يتمكن Android من تعيين الذاكرة (mmap) مباشرة دون نسخه إلى ذاكرة الوصول العشوائي (RAM). قم دائمًا بتنفيذ توقيع zipalign -p -f -v 4 input.apk aligned.apk قبل.
- كتلة التوقيع الإلزامية v2+: سيؤدي توقيع APK الذي يستهدف API 30+ باستخدام jarsigner (الذي يكتب توقيع v1 META-INF/ فقط) إلى رفض Android 11–15 التثبيت باستخدام INSTALL_PARSE_FAILED_NO_CERTIFICATES. استخدم منشئ الأوامر التفاعلية أعلاه لإنشاء أمر apksigner --v2-signing-enabled=true الدقيق لمخزن المفاتيح الخاص بك، أو التحقق من الإخراج الموقع في أداة التحقق من توقيع APK الخاص بنا.