الحزمة أ (الإصدار القديم / الأساسي)
انقر أو أفلت ملف .apk / .xapk الأول
الحزمة ب (إصدار جديد / تحديث)
انقر أو أسقط ملف .apk / .xapk الثاني
لماذا تمنع مقارنة إصدارات APK التحديثات الفاشلة؟
عند تثبيت إصدار أحدث من تطبيق Android عبر تثبيت موجود، يفرض PackageManager لنظام Android قاعدتين صارمتين: يجب أن تكون versionCode للحزمة الجديدة أكبر من أو تساوي البنية المثبتة، ويجب أن تكون شهادة التوقيع الخاصة بها داخل META-INF/ (أو كتلة توقيع APK v2/v3) متطابقة بايت مقابل بايت.
- مطابقة ملخص شهادة التوقيع: يحسب بصمة SHA-256 لكتلة التوقيع .RSA / .DSA / .EC في كلا الحزمتين حتى تعرف على الفور ما إذا كان التحديث الموضعي سينجح دون إلغاء التثبيت.
- اختلاف ABI وDEX الأصلي: يسلط الضوء على ما إذا كان التحديث قد أدى إلى تجريد مكتبات armeabi-v7a ذات 32 بت أو إضافة ملفات classes*.dex جديدة.
- دلتا دخول CRC32: يسرد الملفات الدقيقة التي تمت إضافتها أو إزالتها بين الإصدارات.
كيف يقوم Android بتقييم تحديثات الحزمة (INSTALL_FAILED_UPDATE_INCOMPATIBLE)
أحد الأخطاء الأكثر شيوعًا التي يواجهها المستخدمون عند تحديث تطبيق تم تحميله على الجانب هو "لم يتم تثبيت التطبيق لأن الحزمة تتعارض مع حزمة موجودة" (المعروف في سجلات ADB باسم INSTALL_FAILED_UPDATE_INCOMPATIBLE). يحدث هذا عندما يأتي التطبيق المثبت من متجر Google Play (موقّع باستخدام مفتاح الإصدار الخاص للمطور) ويتم تحويل التحديث من أرشيف .xapk منقسم (والذي كان لا بد من إعادة توقيعه باستخدام مفتاح توقيع المحول بعد دمج الانقسامات).
ومع ذلك، إذا تم تحويل كل من الإصدار القديم والإصدار الجديد باستخدام xapktoapk.com، فإن مسار التوقيع الحتمي الخاص بنا يستخدم نفس شهادة التوقيع المتسقة عبر التحويلات - مما يعني أنه يمكنك تثبيت ملف APK المحول الجديد مباشرةً أعلى ملف APK القديم المحول دون إلغاء التثبيت أو فقدان تقدمك داخل التطبيق! استخدم أداة المقارنة أعلاه للتأكد من أن كلا الملفين يشتركان في نفس ملخص الشهادة قبل التثبيت.