كيفية التوقيع على apk بالتوقيع الأصلي. كيفية التوقيع على لعبة أو تطبيق APK على Android بشكل صحيح. ماذا تفعل في حالة فقدان المفتاح أو اختراقه

22.08.2023

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

مقدمة

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

للقيام بكل هذا بنفسك، ستحتاج على الأقل إلى معرفة أساسية بلغة Java، التي تُكتب بها تطبيقات Android، ولغة XML، المستخدمة في كل مكان في Android - بدءًا من وصف التطبيق نفسه وحقوق الوصول إليه إلى تخزين السلاسل التي سيتم عرضها على الشاشة. ستحتاج أيضًا إلى القدرة على استخدام برامج وحدة التحكم المتخصصة.

إذًا، ما هي حزمة APK التي يتم من خلالها توزيع جميع برامج Android؟

تفكيك التطبيق

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

  • dex2jar هو مترجم Dalvik bytecode إلى JVM bytecode، وعلى أساسه يمكننا الحصول على كود بلغة Java؛
  • jd-gui هو برنامج فك ترجمات بحد ذاته يسمح لك بالحصول على كود Java قابل للقراءة من كود JVM الثانوي. وكبديل، يمكنك استخدام جاد (www.varanecas.com/jad)؛ على الرغم من أنها قديمة جدًا، إلا أنها في بعض الحالات تولد تعليمات برمجية أكثر قابلية للقراءة من Jd-gui.

هذه هي الطريقة التي ينبغي استخدامها. أولاً، أطلقنا dex2jar، مع تحديد المسار إلى حزمة APK كوسيطة:

% dex2jar.sh mail.apk

ونتيجة لذلك، ستظهر حزمة Java mail.jar في الدليل الحالي، والذي يمكن فتحه بالفعل في jd-gui لعرض كود Java.

ترتيب حزم APK واستلامها

كيس من البلاستيك تطبيقات أندرويد، في الواقع، هو ملف ZIP عادي، ولا يلزم وجود أدوات خاصة لعرض محتوياته واستخراجه. يكفي أن يكون لديك برنامج أرشيفي - 7zip لنظام التشغيل Windows أو وحدة تحكم لفك الضغط على Linux. ولكن هذا يتعلق بالمغلف. ماذا يوجد بالداخل؟ بشكل عام، لدينا الهيكل التالي في الداخل:

  • معلومات التعريف/- يحتوي على شهادة رقمية للتطبيق، مع تحديد منشئه، والمجاميع الاختبارية لملفات الحزمة؛
  • الدقة/ - الموارد المختلفة التي يستخدمها التطبيق في عمله، مثل الصور والوصف التعريفي للواجهة، بالإضافة إلى البيانات الأخرى؛
  • AndroidManifest.xml- وصف التطبيق. يتضمن ذلك، على سبيل المثال، قائمة بالأذونات المطلوبة، وإصدار Android المطلوب، و الإذن المطلوبشاشة؛
  • classs.dex- رمز بايت للتطبيق المترجم لـ الآلة الافتراضيةدالفيك.
  • الموارد.arsc- أيضًا موارد، ولكن من نوع مختلف - على وجه الخصوص، السلاسل (نعم، يمكن استخدام هذا الملف للترويس!).

الملفات والأدلة المدرجة موجودة، إن لم يكن كلها، فربما تكون في الغالبية العظمى من ملفات APK. ومع ذلك، هناك عدد قليل من الملفات/الأدلة غير الشائعة الجديرة بالذكر:

  • أصول- التناظرية للموارد. يتمثل الاختلاف الرئيسي في أنه للوصول إلى مورد ما، يجب عليك معرفة معرفه، ولكن يمكن الحصول على قائمة الأصول ديناميكيًا باستخدام طريقة AssetManager.list() في كود التطبيق؛
  • ليب- مكتبات Linux الأصلية المكتوبة باستخدام NDK (Native Development Kit).

يتم استخدام هذا الدليل من قبل الشركات المصنعة للألعاب، حيث يضع هناك محرك اللعبة المكتوب بلغة C/C++، وكذلك من قبل منشئي التطبيقات عالية الأداء (على سبيل المثال، جوجل كروم). اكتشفنا الجهاز. ولكن كيف يمكنك الحصول على ملف الحزمة الخاص بالتطبيق الذي تهتم به؟ نظرًا لأنه من غير الممكن التقاط ملفات APK من الجهاز بدون الجذر (فهي موجودة في الدليل /data/app)، ولا يُنصح دائمًا بالتجذير، فهناك ثلاث طرق على الأقل لتوصيل ملف التطبيق إلى جهاز الكمبيوتر الخاص بك:

  • ملحق تنزيل APK لمتصفح Chrome؛
  • التطبيق الحقيقي APK Leecher.
  • استضافة الملفات المختلفة وVarezniks.

أيهما يجب استخدامه هو مسألة ذوق؛ نحن نفضل استخدام تطبيقات منفصلة، ​​لذلك سنصف استخدام Real APK Leecher، خاصة أنه مكتوب بلغة Java وبالتالي سيعمل إما في Windows أو Nix.

بعد بدء البرنامج، تحتاج إلى ملء ثلاثة حقول: البريد الإلكتروني وكلمة المرور ومعرف الجهاز - واختيار اللغة. الأولان هما البريد الإلكتروني وكلمة المرور لحساب Google الخاص بك الذي تستخدمه على الجهاز. والثالث هو معرف الجهاز، ويمكن الحصول عليه عن طريق كتابة الرمز على برنامج الاتصال # #8255## ثم ابحث عن سطر معرف الجهاز. عند ملئه، ما عليك سوى إدخال المعرف بدون البادئة android.

بعد ملء البيانات وحفظها، تظهر غالبًا رسالة "خطأ أثناء الاتصال بالخادم". لا علاقة له به جوجل بلايلذا لا تتردد في تجاهلها والبحث عن الحزم التي تهمك.

عرض وتعديل

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

  • أرشيف ZIPللتفريغ والتعبئة.
  • سمالي- مجمع/مفكك كود البايت للجهاز الظاهري Dalvik (code.google.com/p/smali);
  • ملائمة- أداة لتعبئة الموارد (افتراضيًا، يتم تخزين الموارد في شكل ثنائي لتحسين أداء التطبيق). مضمن في Android SDK، ولكن يمكن الحصول عليه بشكل منفصل؛
  • الموقع- أداة للتوقيع الرقمي على الحزمة المعدلة (bit.ly/Rmrv4M).

يمكنك استخدام كل هذه الأدوات بشكل منفصل، ولكن هذا غير مريح، لذلك من الأفضل استخدام برامج عالية المستوى مبنية على أساسها. إذا كنت تعمل على Linux أو Mac OS X، فهناك أداة تسمى apktool. فهو يسمح لك بتفريغ الموارد في شكلها الأصلي (بما في ذلك ملفات XML وarsc الثنائية)، وإعادة بناء حزمة بموارد متغيرة، ولكنها لا تعرف كيفية توقيع الحزم، لذلك سيتعين عليك تشغيل أداة التوقيع يدويًا. على الرغم من أن الأداة المساعدة مكتوبة بلغة Java، إلا أن تثبيتها غير قياسي تمامًا. تحتاج أولاً إلى الحصول على ملف الجرة نفسه:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $export PATH=~/bin:$PATH

إذا كنت تعمل على نظام Windows، فهناك أداة ممتازة لها تسمى Virtious Ten Studio، والتي تقوم أيضًا بتجميع كل هذه الأدوات (بما في ذلك apktool نفسها)، ولكن بدلاً من واجهة CLI فهي توفر للمستخدم واجهة رسومية بديهية يمكنك من خلالها إجراء عمليات التفريغ والتفكيك والتفكيك ببضع نقرات. هذه الأداة عبارة عن أداة تبرع، أي أنه في بعض الأحيان تظهر نوافذ تطلب منك الحصول على ترخيص، ولكن في النهاية يمكن التسامح مع ذلك. لا فائدة من وصفها، لأنه يمكنك فهم الواجهة في بضع دقائق. ولكن يجب مناقشة أداة apktool بمزيد من التفصيل نظرًا لطبيعة وحدة التحكم الخاصة بها.


دعونا نلقي نظرة على خيارات apktool. باختصار، هناك ثلاثة الأوامر الأساسية: d (فك التشفير)، b (البناء)، وإذا (تثبيت الإطار). إذا كان كل شيء واضحًا في الأمرين الأولين، فماذا تفعل العبارة الشرطية الثالثة؟ يقوم بتفكيك إطار عمل واجهة المستخدم المحدد، وهو أمر ضروري في الحالات التي تقوم فيها بتشريح أي حزمة نظام.

دعونا نلقي نظرة على الخيارات الأكثر إثارة للاهتمام في الأمر الأول:

  • - لا تقم بتفكيك ملفات dex؛
  • - لا تفريغ الموارد؛
  • - لا تقم بإدراج معلومات التصحيح في نتائج تفكيك ملف dex؛
  • --مسار الإطار- استخدم إطار عمل واجهة المستخدم المحدد بدلاً من الإطار المدمج في apktool. الآن دعونا نلقي نظرة على خيارين للأمر b:
  • - التجميع القسري دون التحقق من التغييرات؛
  • - حدد المسار إلى aapt (أداة لإنشاء أرشيف APK)، إذا كنت تريد استخدامه من مصدر آخر لسبب ما.

يعد استخدام apktool أمرًا بسيطًا للغاية للقيام بذلك، ما عليك سوى تحديد أحد الأوامر والمسار إلى APK، على سبيل المثال:

$ apktool د mail.apk

بعد ذلك، ستظهر جميع ملفات الحزمة المستخرجة والمفككة في دليل البريد.

تحضير. تعطيل الإعلانات

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


لذلك، باستخدام إحدى الطرق المذكورة أعلاه، قم بتنزيل التطبيق من السوق. إذا قررت استخدام Virtious Ten Studio، فما عليك سوى فتح ملف APK في التطبيق واستخراجه، وإنشاء مشروع له (ملف -> مشروع جديد)، ثم في قائمة السياقالمشروع، حدد استيراد ملف. إذا وقع اختيارك على apktool، فما عليك سوى تشغيل أمر واحد:

$ apktool d com.kauf.particle.virtualtorch.apk

بعد ذلك، ستظهر شجرة ملفات مشابهة لتلك الموضحة في القسم السابق في الدليل com.kauf.particle.virtualtorch، ولكن مع دليل smali إضافي بدلاً من ملفات dex وملف apktool.yml. يحتوي الأول على كود مفكك لملف dex القابل للتنفيذ الخاص بالتطبيق، والثاني يحتوي على معلومات الخدمة اللازمة لأداة apktool لتجميع الحزمة مرة أخرى.

المكان الأول الذي يجب أن ننظر إليه هو بالطبع AndroidManifest.xml. وهنا نواجه على الفور السطر التالي:

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

$ apktool b com.kauf.particle.virtualtorch

سيظهر ملف APK الناتج في الدليل com.kauf.particle.virtualtorch/build/. ومع ذلك، لن يكون من الممكن تثبيته، لأنه لا يحتوي على توقيع رقمي ومجاميع اختبارية للملف (ببساطة لا يحتوي على دليل META-INF/). يجب علينا التوقيع على الحزمة باستخدام الأداة المساعدة apk-signer. انطلقت. تتكون الواجهة من علامتي تبويب - في الأولى (Key Generator) نقوم بإنشاء المفاتيح، وفي الثانية (APK Signer) نقوم بالتوقيع. لإنشاء مفتاحنا الخاص، املأ الحقول التالية:

  • الملف الهدف- ملف إخراج مخزن المفاتيح؛ وعادةً ما يقوم بتخزين زوج واحد من المفاتيح؛
  • كلمة المرورو يتأكد- كلمة المرور للتخزين.
  • الاسم المستعار- اسم المفتاح الموجود في المخزن؛
  • كلمة المرور المستعارةو يتأكد- كلمة مرور المفتاح السري؛
  • صحة- مدة الصلاحية (بالسنوات). القيمة الافتراضية هي الأمثل.

الحقول المتبقية اختيارية بشكل عام - ولكن يجب ملء واحد منها على الأقل.


تحذير

لتوقيع تطبيق باستخدام apk-signer، يجب عليك تثبيت Android SDK وتحديد المسار الكامل له في إعدادات التطبيق.

يتم توفير جميع المعلومات لأغراض إعلامية فقط. لا يتحمل المحررون ولا المؤلف مسؤولية أي ضرر محتمل ناتج عن مواد هذه المقالة.

يمكنك الآن التوقيع على APK باستخدام هذا المفتاح. في علامة التبويب APK Signer، حدد الملف الذي تم إنشاؤه حديثًا، وأدخل كلمة المرور والاسم المستعار للمفتاح وكلمة المرور، ثم ابحث عن ملف APK وانقر فوق الزر "تسجيل" بجرأة. إذا سارت الأمور على ما يرام، سيتم التوقيع على الحزمة.

معلومات

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

التوقيع الرقمي مطلوب فقط لبرامج الطرف الثالث، لذلك إذا كنت تقوم بتعديل تطبيقات النظام المثبتة عن طريق نسخها إلى الدليل /system/app/، فلن تحتاج إلى التوقيع عليها.

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

عادةً ما يقوم مؤلفو التطبيق بإنشاء فئات خاصة لعرض الإعلانات وطرق الاتصال بهذه الفئات عند تشغيل التطبيق أو أحد "أنشطته" (بمعنى بسيط، شاشات التطبيق). دعونا نحاول العثور على هذه الفئات. نذهب إلى الدليل smali، ثم com (في org لا يوجد سوى open مكتبة الرسومات cocos2d)، ثم kauf (هناك بالضبط، لأن هذا هو اسم المطور وجميع الأكواد الخاصة به موجودة) - وها هو دليل التسويق. نجد في الداخل مجموعة من الملفات ذات الامتداد smali. هذه فئات وأبرزها فئة Ad.smali والتي من السهل تخمين أنها هي التي تعرض الإعلانات.

يمكننا تغيير منطق عمله، ولكن سيكون من الأسهل بكثير إزالة الاستدعاءات لأي من أساليبه من التطبيق نفسه. لذلك، نترك دليل التسويق وننتقل إلى دليل الجسيمات المجاور، ثم إلى Virtualtorch. يستحق الملف MainActivity.smali اهتمامًا خاصًا هنا. هذه فئة Android قياسية تم إنشاؤها بواسطة Android SDK وتعيينها كنقطة دخول إلى التطبيق (على غرار الوظائف الرئيسيةشركة). افتح الملف للتحرير.

يوجد بالداخل كود smali (المجمع المحلي). إنه أمر محير للغاية ويصعب قراءته نظرًا لطبيعته ذات المستوى المنخفض، لذلك لن ندرسه، ولكننا سنجد ببساطة جميع الإشارات إلى فئة الإعلان في الكود ونعلق عليها. ندخل سطر "إعلان" في البحث ونصل إلى السطر 25:

إعلان خاص ميداني:Lcom/kauf/marketing/Ad;

هنا يتم إنشاء حقل إعلان لتخزين كائن فئة الإعلان. نعلق بوضع علامة ### أمام السطر. نواصل البحث. السطر 423:

المثيل الجديد v3، Lcom/kauf/marketing/Ad؛

هذا هو المكان الذي يحدث فيه إنشاء الكائن. دعونا التعليق. نواصل البحث ونجد في السطور 433، 435، 466، 468، 738، 740، 800 و 802 استدعاءات لطرق فئة الإعلان. دعونا التعليق. يبدو أن هذا هو الحال. يحفظ. الآن يجب إعادة تجميع الحزمة معًا والتحقق من وظائفها ووجود الإعلانات. لنقاء التجربة، نعيد السطر الذي تمت إزالته من AndroidManifest.xml، ونجمع الحزمة، ونوقعها ونثبتها.

خنزير غينيا لدينا. الإعلان مرئي

أُووبس! اختفت الإعلانات فقط أثناء تشغيل التطبيق، ولكنها ظلت في القائمة الرئيسية، التي نراها عند تشغيل البرنامج. إذن، انتظر، ولكن نقطة الدخول هي فئة MainActivity، وقد اختفى الإعلان أثناء تشغيل التطبيق، لكنه بقي في القائمة الرئيسية، فهل نقطة الدخول مختلفة؟ لتحديد نقطة الإدخال الحقيقية، أعد فتح ملف AndroidManifest.xml. و نعم يحتوي على الأسطر التالية:

يخبروننا (والأهم من ذلك، android) أنه يجب إطلاق نشاط يسمى Start استجابةً لإنشاء هدف (حدث) android.intent.action.MAIN من فئة android.intent.category.LAUNCHER. يتم إنشاء هذا الحدث عند النقر على أيقونة التطبيق في المشغل، بحيث يحدد نقطة الدخول، وهي فئة البداية. على الأرجح، قام المبرمج أولاً بكتابة تطبيق بدون قائمة رئيسية، كانت نقطة الدخول إليها هي فئة MainActivity القياسية، ثم أضاف نافذة جديدة (نشاط) تحتوي على القائمة والموصوفة في فئة Start، وجعلها الإدخال يدويًا نقطة.

افتح ملف Start.smali وابحث مرة أخرى عن السطر "Ad"، نجد في السطرين 153 و155 ذكرًا لفئة FirstAd. وهو موجود أيضًا في الكود المصدري، ووفقًا للاسم، فهو مسؤول عن عرض الإعلانات على الشاشة الرئيسية. دعونا ننظر إلى أبعد من ذلك، هناك إنشاء مثيل لفئة FirstAd ونية، والتي ترتبط في السياق بهذا المثيل، ثم تسمية cond_10، والتي يتم تنفيذ الانتقال الشرطي إليها بالضبط قبل إنشاء مثيل للفئة :

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

على الأرجح، يقوم البرنامج بطريقة ما بحساب ما إذا كان يجب عرض الإعلانات على الشاشة الرئيسية، وإذا لم يكن الأمر كذلك، فإنه يقفز مباشرة إلى cond_10. حسنًا، دعونا نبسط مهمتها ونستبدل الانتقال المشروط بانتقال غير مشروط:

#if-ne p1, v0, :cond_10 goto:cond_10

لم يعد هناك أي ذكر لـ FirstAd في الكود، لذلك نغلق الملف ونعيد تجميع الشعلة الافتراضية باستخدام apktool. انسخه على هاتفك الذكي، ثم قم بتثبيته، ثم قم بتشغيله. لقد اختفت جميع الإعلانات، ونحن نهنئنا عليها جميعًا.

نتائج

هذه المقالة مجرد مقدمة مختصرة عن طرق اختراق تطبيقات الاندرويد وتعديلها. ظلت العديد من المشكلات خلف الكواليس، مثل إزالة الحماية، وتحليل التعليمات البرمجية المبهمة، وترجمة موارد التطبيق واستبدالها، بالإضافة إلى تعديل التطبيقات المكتوبة باستخدام Android NDK. ومع ذلك، مع وجود المعرفة الأساسية، فهي مسألة وقت فقط لفهم كل شيء.

باستخدام ميزة توقيع التطبيق في Google Play، يمكن لـ Google إدارة مفتاح توقيع تطبيقك، بالإضافة إلى حماية هذا المفتاح واستخدامه لتوقيع ملفات APK الخاصة بك للتوزيع. ستحميك طريقة التخزين هذه في حالة فقدان المفتاح أو اختراقه.

مهم!لاستخدام Android App Bundles (تنسيق نشر التطبيق الموصى به)، يجب عليك التسجيل في برنامج Google Play App Signing قبل تحميل App Bundle إلى Play Console.

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

مبادئ التشغيل

عند استخدام ميزة توقيع تطبيق Google Play، يتم تخزين مفاتيحك في نفس البنية الأساسية لمفاتيح Google، وتكون محمية بواسطة خدمة إدارة مفاتيح مخصصة. يمكن العثور على معلومات تفصيلية حول البنية التحتية التقنية لشركة Google في وثائق Google Cloud Security.

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

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

وصف المفاتيح والأشياء والأدوات
شروط وصف
مفتاح توقيع التطبيق

المفتاح الذي يستخدمه Google Play لتوقيع ملفات APK التي يتم تسليمها إلى جهاز المستخدم. عند الاشتراك في برنامج توقيع تطبيق Google Play، يمكنك تحميل مفتاح توقيع موجود أو السماح لـ Google بإنشاء مفتاح جديد.

تحميل المفتاح

هناك طريقتان لإنشاء مفتاح التنزيل:

  • استخدم مفتاح توقيع التطبيق.إذا سمحت لشركة Google بإنشاء مفتاح توقيع التطبيق عند الاشتراك في البرنامج، فسيكون مفتاح التحميل هو المفتاح الذي استخدمته لتوقيع الإصدار الأول من التطبيق.
  • استخدم مفتاح تنزيل منفصل.إذا قمت بتوفير مفتاح توقيع التطبيق الخاص بك عند التسجيل في البرنامج، فيمكنك إنشاء مفتاح جديدالتنزيلات. إذا كنت لا تريد القيام بذلك، فاستخدم مفتاح توقيع التطبيق كمفتاح التنزيل لتوقيع الإصدارات الجديدة.
الشهادة (.der أو .pem)

شهادة تحتوي على المفتاح العام و معلومات إضافيةعن صاحبها. شهادة المفتاح العاميتيح لأي شخص معرفة من قام بالتوقيع على حزمة التطبيقات أو ملف APK. يمكن مشاركة هذه الشهادة لأنها لا تتضمن مفتاحًا خاصًا.

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

البصمة الرقمية للشهادة

معرف قصير وفريد ​​للشهادة. غالبًا ما يطلب موفرو واجهة برمجة التطبيقات (API) بصمة الإصبع مع اسم الحزمة لتوفير الوصول إلى خدماتهم.

يمكن العثور على بصمات الأصابع الرقمية لشهادات تنزيل وتوقيع التطبيقات MD5 وSHA-1 وSHA-256 على الصفحة توقيع الطلباتفي Play Console. قد تتلقى أيضًا نوعًا مختلفًا من بصمة الإصبع الرقمية. للقيام بذلك، قم بتنزيل الشهادة الأصلية بتنسيق DER على نفس الصفحة.

Java Key Store (.jks أو .keystore) تخزين شهادات الأمان والمفاتيح الخاصة.
أداة بيبك

أداة لتصدير المفاتيح الخاصة من مساحة تخزين Java وتشفيرها لنقلها إلى Google Play.

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

عملية توقيع الطلب

يمكنك تنزيل ملفات APK الموقعة باستخدام مفتاح توقيع التطبيق الأصلي قبل أو بعد توقيع التطبيق على Google Play.

إذا قمت بالتبديل إلى مجموعات الروبوتحزمة التطبيقات، يمكن اختبارها في إصدارات تجريبية، ويمكن استخدام ملفات APK الموجودة في إصدارات الإنتاج. وإليك كيف يعمل:

  1. يمكنك التوقيع على App Bundle أو APK وتحميله على Play Console.
  2. تعتمد عملية توقيع التطبيق على ما تقوم بتنزيله.
    • حزمة التطبيق.تعمل Google على تحسين ملفات APK من App Bundle ثم تقوم بتوقيعها باستخدام مفتاح توقيع التطبيق.
    • ملف APK موقّع باستخدام مفتاح التنزيل.تتحقق Google من توقيعك وتزيله وتعيد توقيع ملفات APK باستخدام مفتاح توقيع التطبيق.
    • ملف APK موقّع باستخدام مفتاح توقيع التطبيق.جوجل يتحقق من التوقيع.
  3. تقوم Google بتسليم ملفات APK الموقعة للمستخدمين.

كيفية الاشتراك في برنامج توقيع تطبيقات Google Play

تطبيقات جديدة

الخطوة 1: إنشاء مفتاح التنزيل

  1. قم بإنشاء مفتاح التنزيل باتباع التعليمات.
  2. قم بتوقيع ملف APK الجديد باستخدام مفتاح التنزيل.

الخطوة 2: إعداد الإصدار

  1. ، باتباع التعليمات.
  2. بعد تحديد نوع الإصدار، قم بتكوين إعدادات توقيع التطبيق ضمن "السماح لـ Google بحماية وإدارة مفتاح توقيع التطبيق الخاص بك".
  3. إذا قمت بالنقر فوق يكمل، سيصبح المفتاح الذي تم إنشاؤه هو مفتاح التنزيل الذي سيتم استخدامه لتوقيع الإصدارات المستقبلية. يمكنك أيضًا اختيار ما يلي الإعدادات المتقدمة:
    • استخدم مفتاحًا واحدًا لتطبيقات مختلفة في حساب المطور (الخيار 2).
    • تحميل مفتاح التوقيع التطبيق الحالي(الخيار 2، 3، 4)، اختيار الأكثر طريقة مناسبةالتصدير والتنزيل. بمجرد تنزيل مفتاح توقيع التطبيق وشهادته العامة، يمكنك إما استخدامه كمفتاح توقيع التطبيق.

ملحوظة.للمتابعة، يجب عليك قبول شروط الاستخدام والتسجيل في برنامج توقيع التطبيق.

الخطوة 3: قم بتسجيل مفتاح توقيع التطبيق الخاص بك مع موفري واجهة برمجة التطبيقات

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

  1. قم بتسجيل الدخول إلى Play Console.
  2. حدد تطبيقًا.
  3. من القائمة الموجودة على اليسار، اختر إدارة الإصدار > توقيعات التطبيق.
    • إذا كان موفر واجهة برمجة التطبيقات يتطلب نوعًا مختلفًا من بصمات الأصابع، فيمكنك تنزيل الشهادة الأصلية بتنسيق DER وتحويلها حسب الحاجة باستخدام الأدوات المناسبة.
التطبيقات المنشورة

الخطوة 1: قم بالتسجيل في برنامج توقيع تطبيقات Google Play

  1. قم بتسجيل الدخول إلى Play Console.
  2. حدد تطبيقًا.
  3. من القائمة الموجودة على اليسار، اختر إدارة الإصدار > توقيعات التطبيق.
  4. إذا لزم الأمر، اقرأ شروط الاستخدام وانقر فوق يقبل.

الخطوة 2: أرسل المفتاح الأصلي إلى Google وقم بإنشاء مفتاح تنزيل

  1. ابحث عن مفتاح توقيع التطبيق الأصلي.
  2. قم بتسجيل الدخول إلى Play Console.
  3. حدد تطبيقًا.
  4. من القائمة الموجودة على اليسار، اختر إدارة الإصدار > توقيعات التطبيق.
  5. قم بتحميل مفتاح توقيع التطبيق الموجود بالطريقة التي تناسب عملية الإصدار الخاصة بك.
  1. وتحميل الشهادة إلى Google Play.
    • يمكنك أيضًا استخدام مفتاح توقيع التطبيق كمفتاح التنزيل.
  2. انسخ بصمات الأصابع الرقمية (MD5 وSHA-1 وSHA-256) لشهادة توقيع التطبيق.
    • لإجراء الاختبار، قد تحتاج إلى تسجيل شهادة مفتاح التشغيل لدى موفر واجهة برمجة التطبيقات (API) باستخدام بصمة إصبع الشهادة ومفتاح توقيع التطبيق.

الخطوة 4: قم بتسجيل تحديث التطبيق التالي باستخدام مفتاح التنزيل الخاص بك

يجب توقيع تحديثات التطبيق التي تم إصدارها باستخدام مفتاح التنزيل.

كيفية إنشاء مفتاح التنزيل وتحديث مخازن المفاتيح

يمكنك إنشاء مفتاح تنزيل عند الاشتراك في برنامج توقيع تطبيقات Google Play، أو يمكنك إنشاء مفتاح لاحقًا في إدارة الإصدار > توقيعات التطبيق.

لإنشاء مفتاح التنزيل، اتبع الخطوات التالية:

  1. اتبع الإرشادات الموجودة على موقع Android Developers. احتفظ بالمفتاح في مكان آمن.
  2. قم بتصدير الشهادة لمفتاح التمهيد بتنسيق PEM. استبدل الوسائط التالية بشرطة سفلية:
    • $ keytool -export -rfc -keystore upload-keystore.jks -اسم مستعار تحميل -file upload_certificate.pem
  3. عندما يُطلب منك ذلك أثناء عملية الإصدار، قم بتنزيل الشهادة لتسجيلها لدى Google.

إذا كنت تستخدم مفتاح التنزيل:

  • يتم تسجيل مفتاح التنزيل لدى Google فقط للتحقق من هوية منشئ التطبيق.
  • تتم إزالة توقيعك من جميع تنزيلات APK قبل أن تصل إلى المستخدمين.
قيود
  • يجب أن يستخدم مفتاح التنزيل تشفير RSA ويجب ألا يقل حجمه عن 2048 بت.
  • مفاتيح DSA وEC غير مدعومة أيضًا مفاتيح آر إس إيهحجمها أقل من 2048 بت.
تحديث مخازن المفاتيح

بمجرد إنشاء مفتاح التنزيل الخاص بك، تحقق من المواقع التالية وقم بتحديثها إذا لزم الأمر:

  • النظام المحلي;
  • محمي الخادم المحلي(مع قوائم التحكم في الوصول المختلفة)؛
  • النظام السحابي (مع قوائم التحكم في الوصول المختلفة)؛
  • خدمات إدارة المفاتيح الخاصة؛
  • مستودعات جيت.

كيفية تحديث مفتاح التوقيع لعمليات تثبيت التطبيقات الجديدة

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

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

يجب عليك طلب تحديث مفتاح توقيع التطبيق في الحالات التالية:

  • أنت بحاجة إلى مفتاح أكثر أمانًا.
  • تم اختراق مفتاح توقيع التطبيق.

ملحوظة.لا يرتبط طلب تحديث مفتاح توقيع التطبيق على Play Console باستبدال المفاتيح في Android P والإصدارات الأحدث. استبدال المفتاح هذا غير مدعوم حاليًا بواسطة Google Play.

ملاحظات هامة حول تحديث المفاتيح

قبل طلب تحديث رئيسي، من المهم فهم التغييرات التي ستترتب على ذلك.

  • إذا كنت تستخدم نفس مفتاح التوقيع لتطبيقات متعددة لاستخدام نفس الرمز أو البيانات، فستحتاج إلى تحديث التطبيقات للتعرف على كل من المفاتيح الجديدة والقديمة.
  • إذا كان تطبيقك يستخدم واجهة برمجة التطبيقات، فتأكد من تسجيل الشهادات لمفاتيح توقيع التطبيق الجديدة والقديمة مع موفر واجهة برمجة التطبيقات قبل ترقية تطبيقك. الشهادات متوفرة على الصفحة توقيع الطلباتتشغيل وحدة التحكم.
  • إذا قام العديد من مستخدمي التطبيق الخاص بك بتثبيت التحديثات من خلال شبكات مشاركة الملفات، فلن يتمكنوا إلا من تثبيت التحديثات الموقعة بنفس المفتاح مثل التطبيق المثبت على أجهزتهم. إذا كان لا يمكن تحديث التطبيقات بسبب النسخة المثبتةتم توقيعه باستخدام مفتاح مختلف، ويمكن للمستخدمين إلغاء تثبيته وإعادة تثبيته لتلقي التحديثات.
طلب تحديث رئيسي لعمليات التثبيت الجديدة. للقيام بذلك، اتبع الخطوات التالية:
  1. قم بتسجيل الدخول إلى Play Console.
  2. حدد تطبيقًا.
  3. من القائمة الموجودة على اليسار، اختر إدارة الإصدار > توقيعات التطبيق.
  4. في بطاقة "تحديث مفتاح التوقيع لعمليات تثبيت التطبيقات الجديدة"، حدد طلب تحديث رئيسي.
  5. اختر ما تريد فعله بالجهاز.
    • اعتمادًا على الخيار الذي تختاره، قد يتعين عليك الاتصال بالدعم لإكمال طلبك.
  6. السماح لـ Google Play بإنشاء مفتاح توقيع تطبيق جديد (موصى به) أو تنزيل واحد.
    • بعد تحديث مفتاح توقيع التطبيق، إذا كان المفتاح يتطابق مع مفتاح التنزيل، فيمكنك الاستمرار في استخدام مفتاح توقيع التطبيق القديم كمفتاح التنزيل أو إنشاء مفتاح جديد.
  • إذا قمت أيضًا بنشر تطبيقك خارج Google Play أو كنت تخطط للقيام بذلك، فيمكنك إنشاء مفتاح توقيع تطبيق مشترك وتحميله إلى Google عند الاشتراك في برنامج توقيع التطبيقات في Google Play.
  • لحماية حسابك، تمكين التحقق من خطوتينلجميع الحسابات التي يمكنها الوصول إلى Play Console.
  • بعد نشر حزمة التطبيق في الاختبار أو نسخة العمليمكنك فتح App Bundle Browser وتنزيل أرشيف ZIP يحتوي على جميع ملفات APK لجهاز معين. تم توقيع ملفات APK هذه بالفعل باستخدام مفتاح توقيع التطبيق. يمكنك تثبيتها على جهازك من أرشيف ZIP باستخدام الأداة المساعدة لسطر أوامر Bundletool.
  • لمزيد من الأمان، قم بإنشاء مفتاح تنزيل جديد يختلف عن مفتاح توقيع التطبيق.
  • إذا كنت تريد اختبار ملف APK موقّع باستخدام مفتاح تحميل، فقم بتسجيل المفتاح باستخدام خدمة أو واجهة برمجة التطبيقات (API) التي تستخدم توقيع التطبيق للمصادقة (مثل Google Maps API أو Facebook Developer Kit).
  • إذا كنت تستخدم Google API، فيمكنك تسجيل شهادة التحميل في Google Cloud Console.

ماذا تفعل في حالة فقدان المفتاح أو اختراقه

إذا فقدت إمكانية الوصول إلى مفتاح التنزيل الخاص بك أو تم اختراقه، فاسأل مالك حسابك. عند الاتصال بالدعم، يجب على مالك الحساب إرفاق ملف upload_certificate.pem.

عندما يقوم فريق الدعم بتسجيل مفتاح التنزيل الجديد، سوف تتلقى بريد إلكتروني، وبعد ذلك يمكنك تحديث مخازن المفاتيح الخاصة بك وتسجيل المفتاح الخاص بك لدى موفري واجهة برمجة التطبيقات (API).

مهم!لا تؤثر إعادة تعيين مفتاح التنزيل على مفتاح توقيع التطبيق، الذي يستخدمه Google Play لتوقيع ملفات APK قبل إرسالها إلى المستخدمين.

هل كانت هذه المعلومات مفيدة؟

كيف يمكن تحسين هذه المقالة؟

تقوم الأداة المساعدة keytool، الموضحة في القسم السابق، بإنشاء شهادة رقمية، وهي إحدى معلمات أداة jarsigner. المعلمة الأخرى هي حزمة Android التي يجب توقيعها. لإنشاء حزمة Android، يجب عليك استخدام الأداة المساعدة Export Unsigned Application Package من وحدة ADT الخاصة بـ Eclipse. لاستدعاء هذه الأداة المساعدة، ستحتاج إلى النقر بزر الماوس الأيمن على مشروع Android في Eclipse وتحديد أدوات Android من قائمة السياق ( أدوات أندرويد)، ثم حدد خيار تصدير حزمة التطبيق غير الموقعة. بمجرد تشغيلها، تقوم هذه الأداة المساعدة بإنشاء ملف apk. غير موقع بشهادة تصحيح الأخطاء.

لتجربة ذلك، قم بتشغيل الأداة المساعدة Export Unsigned Application Package على أحد مشاريع Android لديك واحفظ ملف .apk الذي تم إنشاؤه في مكان ما. في في هذا المثالسنستخدم مجلد تخزين المفاتيح الذي تم إنشاؤه مسبقًا وننشئ ملف .apk باسم C:\android\release\myappraw.apk.

الآن لدينا ملف .apk وعنصر تخزين المفاتيح، يمكننا تشغيل أداة jarsigner لتوقيع ملف .apk (انظر 14.2). في هذه الحالة، يجب تحديد المسارات الكاملة لملف تخزين المفاتيح وملف apk.

للتوقيع على ملف .apk، يتم تمرير الأداة المساعدة jarsigner إلى موقع مخزن المفاتيح وكلمة مرور مخزن المفاتيح وكلمة مرور المفتاح السري والمسار إلى ملف .apk والاسم المستعار لعنصر مخزن المفاتيح. بعد ذلك، يقوم jarsigner بالتوقيع على ملف apk شهادة رقميةمن عنصر تخزين المفاتيح لتشغيل الأداة المساعدة jarsigner، يجب عليك إما فتح نافذة أداة (انظر الفصل 2)، أو فتح نافذة موجه الأوامر أو نافذة الوحدة الطرفية وفتح مجلد بنفي الكتالوج

JDK (إذا لم يتم تحديد هذا المجلد في متغير بيئة PATH). لأسباب أمنية، من الأفضل عدم تمرير كلمات المرور كوسائط أوامر، وفي هذه الحالة سيطالبك jarsigner بكلمات المرور في وقت التشغيل. في الشكل. يوضح الشكل 14.3 مثالاً على استدعاء الأداة المساعدة jarsigner. ربما لاحظت ذلك في الشكل. 14.3 تطلب الأداة jarsigner كلمة مرور واحدة فقط. وذلك لأنه لا تتم المطالبة بكلمة مرور المفتاح إذا كانت كلمة المرور وكلمة المرور متماثلتين. بالمعنى الدقيق للكلمة، يحتاج أمر jarsigner في e 14.2 فقط إلى تحديد كلمة المرور -keypass عندما تكون مختلفة عن كلمة المرور -storepass.

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

مشاهدات المشاركة: 5,618

أندرويد ستوديو يوفر فرص وافرةسواء لتطوير التطبيقات أو لزيادة الأتمتة وراحة البرمجة.

إذا كنت تستخدم نظام البناء جرادللإنشاء تطبيقاتك، يمكنك أيضًا تكوين العديد من الخيارات لإنشاء التوقيعات لتطبيقاتك.

ربما لا ترغب في نشر مفاتيح التوقيع وكلمات المرور وأسماء المستخدمين الخاصة بك إلى مستودع عام (أو حتى خاص). لذلك يمكنك تحديد المفتاح وكلمة المرور واسم المستخدم كخصائص في ملف منفصل.

قبل البدء في توقيع التطبيق الخاص بك، تحتاج إلى إنشاء خاصية جديدة في ملف gradle.properties الخاص بك. دعونا ندعوه Keys.repoوكقيمة، حدد المسار إلى المجلد حيث سيتم تحديد موقع مخزن المفاتيح والملف ذو الخصائص لاحقًا (على سبيل المثال، ج:/المستخدمين/اسم المستخدم/.التوقيع).

Keys.repo=C:/Users/UserName/.signing

فأنت بحاجة إلى إنشاء هذا المجلد، أو إذا قمت بتحديد مجلد موجود، فافتحه. تحتاج إلى إنشاء ملف فيه YourProjectName.properties، حيث سيتم كتابة المسار إلى مخزن المفاتيح والاسم المستعار للمفتاح وكلمة المرور كخصائص في النموذج التالي.

RELEASE_STORE_FILE=/YourProjectName/KeyStoreName.jks RELEASE_STORE_PASS=****** RELEASE_ALIAS=KeyAlias ​​​​RELEASE_KEY_PASS=******

كيفية إنشاء قبو المفتاح؟

إذا لم يكن لديك مخزن مفاتيح، فيمكنك بسهولة إنشاء واحد باستخدامه باستخدام الروبوتاستوديو. للقيام بذلك، حدد عنصر القائمة يبني -> إنشاء APK الموقع.

في النافذة التي تظهر، تحتاج إلى النقر فوق إنشاء جديد...ونتيجة لذلك، سيتم فتح نافذة يمكنك من خلالها تحديد مكان تخزين المفاتيح (في هذا الدرس، من الأفضل تحديد المسار الذي حددته على الفور YourProjectName.propertiesفي الممتلكات RELEASE_STORE_FILE)، بالإضافة إلى المعلومات الأساسية.

ثم تحتاج إلى إنشاء مجلد اسم المشروع الخاص بكونقله هناك الملف المطلوبالمتاجر الرئيسية.

الآن يمكنك المتابعة مباشرة إلى عملية التوقيع. للقيام بذلك، تحتاج إلى فتح الملف في مشروعك build.gradle(الموجود في مجلد التطبيق). داخله في الكتلة androidتحتاج إلى إضافة الكود التالي.

SigningConfigs ( تصحيح ( /* لا توجد تغييرات هنا */ ) الإصدار ( if (project.hasProperty("Keys.repo")) ( def projectPropsFile = file(project.property("Keys.repo") + "/YourProjectName.properties " ) if (projectPropsFile.exists()) ( Propertiesprops = new Properties()props.load(new FileInputStream(projectPropsFile)) storeFile file(file(project.property("Keys.repo") +props["RELEASE_STORE_FILE"] ) ) تخزين دعائم كلمة المرور["RELEASE_STORE_PASS"] keyAlias ​​​​props["RELEASE_ALIAS"] دعائم كلمة المرور["RELEASE_KEY_PASS"] ) ) else ( println "============ = ============================================================================= - برجاء تكوين بيئة تجميع الإصدار - على سبيل المثال ~/.دليل التوقيع" println "========================= =====================================================================================]))

ما هي المخططات المختلفة للحصول على التوقيع؟

هناك نظامان للحصول على توقيع APK: الإصدار 1 جارو v2 APK الكامل.

في الحالة الأولى تم التوقيع عليه جرة-الملف، وهو الطريقة التقليديةالتوقيع. لا يؤدي توقيع الإصدار 1 إلى حماية بعض أجزاء ملف APK، مثل البيانات التعريفية لملفات ZIP. يجب أن يتعامل مدقق APK مع الكثير من هياكل البيانات غير الموثوقة (لم يتم التحقق منها بعد) ثم يتجاهل البيانات غير الموقعة، مما يترك مساحة كبيرة للهجوم. بالإضافة إلى ذلك، يجب على أداة التحقق من APK فك ضغط جميع الإدخالات المضغوطة، مما يهدر الكثير من الوقت والذاكرة. لحل هذه المشاكل، تم تطوير المخطط الثاني v2 Full APK.

تم تقديم المخطط v2 في أندرويد 7.0 نوجا (واجهة برمجة التطبيقات 25)ويعمل ابتداء من الإصدار أندرويد ستوديو 2.2و البرنامج المساعد Android Gradle 2.2. يوفر هذا المخطط تثبيتًا أسرع للتطبيق وحماية جيدة ضد التغييرات غير المصرح بها لملف APK. يتم تجزئة محتوى APK وتوقيعه، ثم يتم تجزئة النتيجة كتلة توقيع APKتم إدراجه في ملف APK.

أثناء التحقق، يتعامل نظام v2 مع ملف APK على أنه كائن ثنائي كبير الحجم ويقوم بالتحقق من التوقيع على الملف بأكمله. أي تعديل على ملف APK، بما في ذلك التعديلات على بيانات تعريف ZIP، يبطل التوقيع. يعد هذا النوع من التحقق أسرع بكثير ويمكنه اكتشاف المزيد من التعديلات غير المصرح بها.

التنسيق الجديد متوافق مع الإصدارات السابقة، لذا يمكن تثبيت ملفات APK الموقعة بالنظام الجديد على الأجهزة القديمة (والتي ستتجاهل التوقيع الجديد ببساطة) طالما أن ملفات APK هذه موقعة أيضًا بنظام الإصدار v1.

افتراضيًا، يستخدم التوقيع كلا النظامين بحيث يمكن تثبيت التطبيقات على أي جهاز. ومع ذلك، إذا كانت هناك حاجة لذلك، فيمكنك تعطيل التوقيع v1 أو v2. للقيام بذلك، في الكود أعلاه في الكتلة يطلقويكفي إضافة الأسطر التالية.

V1SigningEnabled خطأ

V2SigningEnabled خطأ

من المهم أيضًا ملاحظة أنك تحتاج إلى التوقيع باستخدام المخطط v1 قبل التوقيع باستخدام المخطط v2، نظرًا لأن APK لن يجتاز التحقق بموجب المخطط v2 إذا تم توقيعه بشهادات إضافية بعد التوقيع باستخدام المخطط v2.

بمجرد إضافة الرمز، قم بتضمين هذا الرمز في كتلة buildTypesداخل يطلق. على سبيل المثال:

BuildTypes ( الإصدار ( minifyEnabled trueتقليص الموارد true proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"signConfigsignConfigs.release ) )

الآن يمكنك بأمان في عنصر القائمة يبنييختار بناء APK، بعد أن قمت بتغيير نوع التجميع مسبقًا من تصحيحعلى يطلق. كما ترون، هذه الطريقةملائم لأنه تلقائي، ما عليك سوى تهيئته مرة واحدة وستكون مخازن المفاتيح الخاصة بك آمنة.

لقد عملت لعدة أيام (وربما ليالٍ)، والآن أصبح أول تطبيق مختلط للهاتف المحمول جاهزًا. إنه مستقر تمامًا، ويتم إغلاق معظم الأخطاء الحرجة. لم يتبق سوى القليل، ولكن عندما تتذكر أن الكمالية شر، فإنك تتخذ قرارًا قويًا بنشر التطبيق.

الشرط الأساسي لذلك هو وجود ملف APK موقّع. سوف تتعلم كيفية التوقيع على ملف APK في هذه المقالة.

تراجع صغير

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

البيانات الأولية

أفترض أن لديك كل شيء جاهز لتطوير الهجينة. تطبيقات الهاتف المحمولباستخدام أباتشي كوردوفا. يجب التثبيت:
  • أباتشي كوردوفا
  • مجموعة تطوير جافا
  • أدوات أندرويد SDK
اسم المشروع والتطبيق هو lcf. استبدل باسم مشروعك عند الضرورة.

دعنا نذهب

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

$ cordova plugin rm cordova-plugin-console
لإنشاء إصدار إصدار لنظام Android، استخدم الأمر يبنيمع العلم --يطلق:

بناء كوردوفا $ - إصدار android
سيتم إنشاء هذا الأمر غير موقعةملف APK في الدليل:

المنصات/أندرويد/بناء/المخرجات/apk
على سبيل المثال، المنصات/android/build/outputs/apk/ android-release-unsigned.apk. ثم سنحتاج إلى التوقيع على هذا الملف وتشغيل الأداة المساعدة com.zipalignلتحسين وإعداد الملف لـ Google Play.

للتوقيع على ملف تحتاج إلى شهادة. لنقم بإنشائه باستخدام الأداة المساعدة com.keytoolوالذي تم تضمينه في JDK:

$ keytool -genkey -v -keystore lcf.keystore - الاسم المستعار lcf -keyalg RSA -keysize 2048 -صلاحية 10000
مهم

يجب تذكر قيمة المعلمة -alias، أو من الأفضل تدوينها. في المثال أعلاه، يساوي lcf (استنادًا إلى الأحرف الأولى من اسم التطبيق Loyal Client Free). لن أقدم تفاصيل هنا، إذا كنت مهتمًا، فاكتب في التعليقات، وسأخبرك بمزيد من التفاصيل.

يتم استخدام الاسم المستعار في كل مرة تقوم فيها بالتوقيع * التطبيقات. لتسهيل تذكره، استخدم اسم ملف تخزين المفاتيح كاسم مستعار، على سبيل المثال:


-keystore hello-world.keystore - الاسم المستعار hello-world -keystore Weather-app.keystore - الاسم المستعار Weather-App -keystore todo.keystore - الاسم المستعار Todo
* تحتاج إلى التوقيع على التطبيق في كل مرة يتم فيها إصدار التحديثات

جدوى com.keytoolيسأل سلسلة من الأسئلة. سيكون هناك 8 منهم في المجموع. للحصول على فكرة عن الأسئلة والإجابات التقريبية مقدمًا، يتم تقديمها جميعًا أدناه، تحت المفسد.

أسئلة Keytool والإجابات النموذجية لها

1. أدخل كلمة مرور مخزن المفاتيح:
هنا يجب عليك إدخال كلمة مرور للملف (6 أحرف على الأقل). يجب تدوين كلمة المرور المدخلة في مكان آمن، حيث تكون ضرورية في كل مرة تقوم فيها بالتوقيع على الطلب.

2. أعد إدخال كلمة المرور الجديدة:
أعد إدخال كلمة المرور الخاصة بك.

3. ما هو اسمك الأول والأخير؟
: إيفان بيتروف
اسمك الأول والأخير. القيمة في بين قوسين مربعينهي القيمة الافتراضية.

4. ما اسم وحدتك التنظيمية؟
: هو - هي
اسم القسم الخاص بشركتك. يمكنك تركها فارغة، وأشير إليها.

5. ما هو اسم مؤسستك؟
: 2مطورين
اسم مؤسستك. يرجى الإشارة إلى إن وجدت.

6. ما هو اسم مدينتك أو منطقتك؟
: موسكو
اسم المدينة

7. ما هو اسم ولايتك أو مقاطعتك؟
: شهر.
اسم المنطقة

8. ما هو رمز البلد المكون من حرفين لهذه الوحدة؟
: رو
رمز البلد. أشير إلى RU.

: ذ

تأكد مما إذا كان كل شيء صحيحًا أو اضغط على Enter للدخول مرة أخرى.


في النهاية، ستظهر رسالة تشير إلى نجاح إنشاء المفتاح. سيُطلب منك تعيين كلمة مرور للمفتاح الخاص (إذا كنت تريد تركها كما هي للشهادة، فاضغط على Enter):

إنشاء زوج مفاتيح RSA 2048 بت وشهادة موقعة ذاتيًا (SHA256withRSA) بصلاحية 10000 يوم لـ: CN=Ivan Petrov، OU=IT، O=2developers، L=Moscow، ST=MO، C=RU مفتاح الإدخال كلمة المرور ل (العودة إذا كانت نفس كلمة مرور ملف تخزين المفاتيح):
سيتم إنشاء ملف في الدليل الحالي lcf.keystore.

مهم

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

هناك خطوتان متبقيتان وسيكون لديك ملف APK جاهز للتوزيع. دعنا ننتقل إلى التوقيع.

لتوقيع ملف APK الخاص بك، استخدم الأداة المساعدة jarsigner، والذي تم تضمينه أيضًا في JDK.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
تتم الإشارة إلى اسم الشهادة بعد المعلمة -متجر المفاتيحالاسم المستعار - بعد اسم الملف.

أخيرًا، لتحسين ملف APK، سنستخدم الأداة المساعدة com.zipalign:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
المعلمة الأخيرة هي اسم الملف الذي ستقوم بتحميله إلى Google Play.

مهم.

جدوى com.zipalignإنه جزء من أدوات Android SDK ويمكن العثور عليه هنا:

/path/to/Android/sdk/build-tools/VERSION/zipalign

خاتمة

لديك الآن ملف APK جاهز للتوزيع ويمكن تحميله على Google Play. املأ الوصف وحدد تقييم طلبك ولا تتردد في النقر فوق "نشر".