it-swarm.asia

يجب توقيع ملف apk بنفس شهادات الإصدار السابق

لقد قمت بتحميل تطبيقي على Google Play (مرة أخرى عندما كان يطلق عليه Android Market) منذ بعض الوقت.

لقد قمت اليوم بتحديث التطبيق ، لكنني حذفت مفتاح التشغيل السابق وأنشأت واحدة جديدة.
عند التحميل ، يجب أن يتم توقيع ملف APK بنفس الشهادات مثل الإصدار السابق:

التحميل فشل

لقد حمّلت ملف APK الذي تم توقيعه بشهادة مختلفة على ملفات APK السابقة. يجب عليك استخدام نفس الشهادة.

يتم توقيع ملفات APK الموجودة لديك باستخدام الشهادة (الشهادات) باستخدام بصمة (بصمات):
[SHA1: 89: 2F: 11: FE: CE: D6: CC: DF: 65: E7: 76: 3E: DD: A7: 96: 4F: 84: DD: BA: 33]
والشهادة (الشهادات) المستخدمة لتوقيع ملف APK الذي قمت بتحميله ، لها بصمة (بصمات):
[SHA1: 20: 26: F4: C1: DF: 0F: 2B: D9: 46: 03: FF: AB: 07: B1: 28: 7B: 9C: 75: 44: CC]

لكن ليس لديّ هذه الشهادة ، ولا أريد حذف التطبيق وإعادة نشره ، لأنه يحتوي على مستخدمين نشطين.

ما الذي يمكنني فعله للتوقيع على تطبيقي بشهادة جديدة؟

175
arts777

لا شيئ. اقرأ الوثائق: نشر التحديثات على Android Market

قبل تحميل التطبيق المحدّث ، تأكد من زيادة سمات Android: versionCode و Android: versionName في عنصر ملف البيان. أيضًا ، يجب أن يكون اسم الحزمة هو نفسه و يجب توقيع .apk بنفس المفتاح الخاص. إذا كان اسم الحزمة وشهادة التوقيع لا يتطابقان مع الإصدار الحالي ، فسوف يعتبر Market تطبيقًا جديدًا ولن يعرضه على المستخدمين كتحديث.

173
Rubycon

هل قمت بتسجيل الدخول باستخدام مفتاح التصحيح عن طريق الخطأ؟

لا يسمح لك Google Play بنشر تطبيق موقّع باستخدام مفتاح تصحيح الأخطاء. إذا حاولت تحميل ملف APK ، فستفشل Google Play مع ظهور رسالة "لقد قمت بتحميل ملف APK الذي تم تسجيله في وضع التصحيح. يجب عليك تسجيل ملف APK الخاص بك في وضع الإصدار."

ومع ذلك ، إذا حاولت تحميل تحديث موقّع باستخدام مفتاح تصحيح الأخطاء ، فستشاهد لا هذه الرسالة ؛ سيعرض Google Play الرسالة الموضحة في السؤال ، في إشارة إلى بصمات أصابع SHA1.

أولاً ، تحقق مما إذا كنت قد وقعت على التطبيق باستخدام مفتاح التصحيح الخاص بك عن طريق الخطأ.


كيف يمكنني التحقق من مفاتيح التوقيع التي تم استخدامها؟

جمع المعلومات من APK

يمكنك التحقق من شهادات APK وتحديث APK الأصلي الذي تم توقيعه باستخدام هذه الأوامر ، باستخدام Java keytool:

keytool -list -printcert -jarfile original.apk
keytool -list -printcert -jarfile update.apk

يوضح لك هذا معلومات مفصلة حول كيفية توقيع ملف APK ، على سبيل المثال:

Owner: CN=My App, O=My Company, L=Somewhere, C=DE
Issuer: CN=My App, O=My Company, L=Somewhere, C=DE
Serial number: 4790b086
Valid from: Mon Nov 11 15:01:28 GMT 2013 until: Fri Mar 29 16:01:28 BST 2041
Certificate fingerprints:
  MD5:  A3:2E:67:AF:74:3A:BD:DD:A2:A9:0D:CA:6C:D4:AF:20
  SHA1: A6:E7:CE:64:17:45:0F:B4:C7:FC:76:43:90:04:DC:A7:84:EF:33:E9
  SHA256: FB:6C:59:9E:B4:58:E3:62:AD:81:42:...:09:FC:BC:FE:E7:40:53:C3:D8:14:4F
         Signature algorithm name: SHA256withRSA
         Version: 3

الأجزاء المهمة التي يجب ملاحظتها هنا - لكل APK - هي SHA1 قيمة بصمة الإصبع ، Owner قيمة الهوية ، و صالحة من/حتى التواريخ .


إذا لم يعمل الأمر keytool (يتطلب الخيار -jarfile Java 7) ، فيمكنك الحصول على مزيد من المعلومات الأساسية عبر الأمر jarsigner:

jarsigner -verify -verbose:summary -certs original.apk
jarsigner -verify -verbose:summary -certs update.apk

هذا للأسف لا يُظهر بصمة SHA1 ، لكنه يُظهر هوية مالك X.509 ، إلى جانب تواريخ انتهاء صلاحية الشهادة. فمثلا:

sm  4642892 Thu Apr 17 10:57:44 CEST 2014 classes.dex (and 412 more)

    X.509, CN=My App, O=My Company, L=Somewhere, C=DE
    [certificate is valid from 11/11/13 12:12 to 29/03/41 12:12]
    [CertPath not validated: Path does not chain with any of the trust anchors]

يمكنك تجاهل أي رسالة "CertPath لم يتم التحقق من صحتها" ، بالإضافة إلى تحذيرات حول سلاسل الشهادات أو الطوابع الزمنية ؛ أنها ليست ذات صلة في هذه الحالة.

قارن قيم المالك و SHA1 وانتهاء الصلاحية بين ملفات APK

  • إذا كانت Owner/X.509 قيمة الهوية هي CN=Android Debug, O=Android, C=US ، فأنت وقعت على APK مع debug key ، وليس مفتاح الإصدار الأصلي

  • إذا كانت SHA1 تختلف قيمة بصمة الإصبع بين ملفات APK الأصلية وتحديثها ، فعندئذٍ فعلت لا تستخدم نفس مفتاح التوقيع لكلا APK

  • إذا كانت Owner/X.509 تختلف قيم الهوية ، أو تختلف تواريخ انتهاء صلاحية الشهادة بين ملفي APK ، فحينئذٍ استخدمت لا تستخدم نفس مفتاح التوقيع لكلا APK

لاحظ أنه حتى إذا كانت قيم المالك/X.509 متطابقة بين الشهادتين ، فإن هذا لا يعني أن الشهادات متطابقة - إذا لم يكن أي شيء آخر متطابقًا - مثل قيم بصمات الأصابع - فإن الشهادات مختلفة.


ابحث عن لوحة المفاتيح الأصلية ، تحقق من النسخ الاحتياطية

إذا كان ملفا APK لهما معلومات مختلفة عن الشهادة ، فعندئذٍ يجب عليك العثور على مفتاح التشغيل الأصلي ، أي الملف ذو قيمة بصمة SHA1 الأولى التي أخبرتك بها Google Play (أو keytool).

ابحث في جميع ملفات ضغط المفاتيح التي يمكنك العثور عليها على جهاز الكمبيوتر الخاص بك ، وفي أي نسخ احتياطية لديك ، حتى يكون لديك بصمة SHA1 الصحيحة:

keytool -list -keystore my-release.keystore

فقط اضغط Enter إذا طُلب منك كلمة المرور - لا يلزمك بالضرورة إدخالها إذا كنت تريد فقط التحقق بسرعة من قيمة SHA1.


لا يمكنني العثور على keystore الأصلي في أي مكان

إذا لم تتمكن من العثور على لوحة المفاتيح الأصلية ، فستتمكن من أبدًا نشر أي تحديثات على هذا التطبيق المحدد.

يذكر Android ذلك بشكل صريح على توقيع تطبيقك الصفحة:

تحذير: احتفظ بمفتاح المفاتيح والمفتاح الخاص في مكان آمن وآمن ، وتأكد من أن لديك نسخ احتياطية آمنة منها. إذا نشرت تطبيقًا على Google Play ثم فقدت المفتاح الذي وقعت به تطبيقك ، فلن تتمكن من نشر أي تحديثات على تطبيقك ، حيث يجب عليك دائمًا تسجيل جميع إصدارات تطبيقك مع نفس المفتاح.

بعد الإصدار الأول من APK ، يجب توقيع جميع الإصدارات اللاحقة بنفس المفتاح بالضبط.


هل يمكنني استخراج مفتاح التوقيع الأصلي من ملف APK الأصلي؟

لا، هذا غير ممكن. يحتوي ملف APK فقط على معلومات عامة ، وليس معلومات مفتاحك الخاص.


هل يمكنني الترحيل إلى مفتاح توقيع جديد؟

لا. حتى إذا عثرت على النسخة الأصلية ، فلا يمكنك توقيع ملف APK مع المفتاح A ، ثم توقيع التحديث التالي بكل من المفتاحين A و B ، ثم التوقيع على التحديث التالي بعد ذلك باستخدام المفتاح B.

يُمكن توقيع ملف APK (أو أي ملف JAR) باستخدام مفاتيح متعددة تقنيًا ، لكن Google Play لم تعد تقبل ملفات APK بتوقيعات متعددة.

ستؤدي محاولة القيام بذلك إلى ظهور رسالة "تم توقيع ملف APK الخاص بك بشهادات متعددة. الرجاء تسجيل الدخول بشهادة واحدة فقط وتحميلها مرة أخرى."


ماذا بإمكاني أن أفعل؟

سيتعين عليك إنشاء تطبيقك باستخدام معرف تطبيق جديد (على سبيل المثال التغيير من "com.example.myapp" إلى "com.example.myapp2") وإنشاء قائمة جديدة تمامًا على Google Play.

ربما سيكون عليك أيضًا تغيير الرمز الخاص بك حتى يتمكن الأشخاص من تثبيت التطبيق الجديد حتى لو كان لديهم التطبيق القديم مثبتًا ، على سبيل المثال تحتاج إلى التأكد من عدم وجود موفري محتوى متعارضين.

ستفقد قاعدة التثبيت الحالية والمراجعات وما إلى ذلك ، وستضطر إلى إيجاد طريقة لحمل العملاء الحاليين على إلغاء تثبيت التطبيق القديم وتثبيت الإصدار الجديد.

مرة أخرى ، تأكد من حصولك على نسخ احتياطية آمنة من المفاتيح وكلمات المرور التي تستخدمها لهذا الإصدار.

104
Christopher Orr

لا شيء - تقول Google بوضوح أن التطبيق يتم تحديده بواسطة المفاتيح المستخدمة للتوقيع عليه. وبالتالي إذا فقدت المفاتيح ، فأنت بحاجة إلى إنشاء تطبيق جديد.

8
Eugene Mayevski 'Allied Bits

واجهت نفس المشكلة اليوم ، وللأسف ، كنت أواجه اسمين مستعارين في ملف keystore الخاص بي . enter image description here

6
Krishan

هنا أحصل على إجابة لهذا السؤال. بعد البحث لمدة طويلة جدًا ، أخيرًا أتخلص من المفتاح وكلمة المرور لهذا الغرض. نسيت المفتاح الخاص بي والأسماء المستعارة أيضًا ملف jks ولكن لحسن الحظ أعرف مجموعة من كلمات المرور التي وضعتها فيه. ولكن العثور على مجموعات صحيحة لذلك كان أصعب مهمة بالنسبة لي.

الحل - قم بتنزيل هذا - Keytool IUI version 2.4.1 plugin  enter image description here 

ستظهر النافذة الآن وستظهر اسم الاسم المستعار .. إذا كان ملف jks صحيحًا ، انقر بزر الماوس الأيمن على الاسم المستعار واضغط على "عرض سلسلة الشهادات" .. سيظهر مفتاح SHA1 .. يطابق هذا المفتاح مع المفتاح الذي تحصل عليه أثناء تحميل apk في متجر تطبيقات google ...

إذا كان يتطابق فأنت مع ملف jks الصحيح والاسم المستعار ..

محظوظ الآن لدي مجموعة من كلمة المرور لمطابقة ..  enter image description here 

الآن انتقل إلى هذا scrren وضع نفس المسار jks .. وكلمة المرور (بين كلمة المرور التي لديك) وضعت أي مسار في "ملف الشهادة"

إذا كانت الشاشة تظهر أي خطأ ، فلن تتطابق كلمة المرور .. إذا لم تظهر أي خطأ ، فهذا يعني أنك مع ملف jks الصحيح. الاسم المستعار الصحيح وكلمة المرور () الآن مع أنه يمكنك تحميل apk الخاص بك في متجر Play :)

4
Arun Yadav

إذا كان لديك ملف apk سابق معك (نسخة احتياطية) ، فاستخدم jarSigner لاستخراج الشهادة من تلك apk ، ثم استخدم هذا المفتاح أو استخدم أداة المفاتيح لاستنساخ تلك الشهادة ، مما قد يساعد ... - الروابط المفيدة هي مستندات jarsigner و مستندات keytool .

3
om252345

لقد حدث هذا من اللون الأزرق الشفاف. أنا حقا لا أعتقد أنني غيرت أي شيء.

ومع ذلك ، "بناء"/"مشروع نظيف" إصلاحه.

2
Dave Hubbard

أوصي بشدة Keystore Explorer ( https://keystore-Explorer.org/ ) والذي يتيح لك الوصول إلى keystore دون الحاجة إلى تحميله على Google Play. بهذه الطريقة يمكنك استكشاف ما إذا كنت تدخل كلمة المرور الخاصة بك بشكل غير صحيح.

1
drdiv

كان خطأي [سخيف] هو أنني استخدمت ملف app-debug.apk بدلاً من ملف app-release.apk. يلزمك اختيار "حرر" في إطار "إنشاء المتغيرات" عند إنشاء APK موقّع. يجب وضع ملف app-release.apk ضمن مجلد "app\release" في جذر المشروع.

0
M. Marmor

لقد واجهت هذه المشكلة مؤخرًا ، بعد تجربة طرق مختلفة لتسجيل الدخول مثل تمكين V1 أو V2 ، بتسجيل الدخول عن طريق تغيير اسم الاسم المستعار و آخر ما أعرفه هو أنني أستخدم ملف متجر مفاتيح خاطئ

0
user2837615

يمكنك استخدام ميزة تسجيل تطبيق Google play الجديدة لإنشاء ملف مفتاح جديد.

بعد أيار (مايو) 2017 ، أضف متجر Google Play ميزة جديدة على متجر Play Store ، وهي أخبار جيدة لمطوري Android. من هذه الميزة ، يمكن للمطور تحديث التطبيق الخاص بهم أو Apk الذي فقد ملف KeyStore. تحتاج إلى تمكين توقيع تطبيق google play على وحدة تحكم Play Store.

https://support.google.com/googleplay/Android-developer/answer/7384423؟hl=ar

http://www.geekcodehub.com/2018/05/23/keystore-lost-in-Android/

0
Gibs