بسته A (نسخه قدیمی / پایه)
ابتدا روی فایل .apk / .xapk کلیک کنید یا رها کنید
بسته B (نسخه جدید / بهروزرسانی)
فایل دوم .apk / .xapk را کلیک کنید یا رها کنید
چرا مقایسه نسخههای APK از بهروزرسانیهای ناموفق جلوگیری میکند؟
وقتی نسخه جدیدتری از یک برنامه Android را روی یک نصب موجود نصب میکنید، PackageManager Android دو قانون سختگیرانه را اعمال میکند: versionCode بسته جدید باید بزرگتر یا برابر با ساخت نصبشده باشد، و گواهی امضای آن در META-INF/ (یا APK Signing Block v2/v3) باید بایت به بایت باشد.
- مطابقت خلاصه امضای گواهی: اثر انگشت SHA-256 بلوک امضای .RSA / .DSA / .EC را در هر دو بسته محاسبه میکند، بنابراین شما فوراً میدانید که آیا بهروزرسانی در محل بدون حذف نصب انجام میشود یا خیر.
- Native ABI & DEX Diffing: مشخص می کند که آیا به روز رسانی کتابخانه های 32 بیتی armeabi-v7a را حذف کرده یا فایل های classes*.dex جدیدی اضافه کرده است.
- دلتای ورودی CRC32: فایل های دقیق اضافه یا حذف شده بین ساخت ها را فهرست می کند.
چگونه Android بهروزرسانیهای بسته را ارزیابی میکند (INSTALL_FAILED_UPDATE_INCOMPATIBLE)
یکی از رایجترین خطاهایی که کاربران هنگام بهروزرسانی یک برنامه جانبی با آن مواجه میشوند، "برنامه نصب نشد زیرا بسته با بسته موجود تداخل دارد" است (در گزارشهای ADB با نام INSTALL_FAILED_UPDATE_INCOMPATIBLE شناخته میشود). این اتفاق زمانی رخ میدهد که برنامه نصبشده از فروشگاه Google Play میآید (با کلید انتشار خصوصی توسعهدهنده امضا میشود) و بهروزرسانی از یک بایگانی تقسیمشده .xapk (که باید پس از ادغام تقسیمها با یک کلید امضای مبدل دوباره امضا میشد) تبدیل میشد.
با این حال، اگر هم نسخه قدیمی و هم نسخه جدید شما با استفاده از xapktoapk.com تبدیل شده باشند، خط لوله امضای قطعی ما از همان گواهی امضای ثابت در بین تبدیلها استفاده میکند - به این معنی که میتوانید APK تبدیلشده جدید را مستقیماً در بالای APK تبدیلشده قدیمی بدون حذف نصب یا از دست دادن پیشرفت درونبرنامه خود نصب کنید! از ابزار مقایسه بالا استفاده کنید تا تأیید کنید که هر دو فایل از یک خلاصه گواهی مشترک قبل از نصب استفاده می کنند.