الفرق بين المراجعتين لصفحة: «ReactNative/signed apk android»
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
|||
(9 مراجعات متوسطة بواسطة 3 مستخدمين غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: نشر | <noinclude>{{DISPLAYTITLE: نشر تطبيق React Native إلى متجر Google Play}}</noinclude> | ||
يتطلب Android أن تُوقّع جميع التطبيقات رقميًا بشهادة قبل تثبيتها، لذلك لتوزيع تطبيقك Android عبر متجر Google Play، ستحتاج إلى إنشاء إصدار APK موقّع بمفتاح إصدار (release key)، والذي يجب بعدها استخدامه لجميع التحديثات مستقبلًا. أصبح بإمكان Google Play منذ عام 2017 إدارة توقيع الإصدارات تلقائيًا بفضل وظيفة [https://developer.android.com/studio/publish/app-signing#app-signing-google-play توقيع التطبيقات من خلال Google Play]. ومع ذلك، قبل رفع ثنائيّة تطبيقك (application binary) إلى Google Play، يجب توقيعه باستخدام مفتاح رفع (upload key). تصف صفحة [https://developer.android.com/tools/publishing/app-signing.html توقيع التطبيقات في توثيق Android Developers] الموضوعَ بالتفصيل. يغطي هذا الدليل العملية بإيجاز، وكذلك يسرد الخطوات المطلوبة لتحزيم حزمة JavaScript. | |||
يتطلب Android أن تُوقّع جميع التطبيقات رقميًا بشهادة قبل تثبيتها، لذلك لتوزيع تطبيقك Android عبر متجر Google Play، ستحتاج إلى إنشاء إصدار APK موقّع بمفتاح إصدار ()، والذي يجب بعدها استخدامه لجميع التحديثات مستقبلًا. | |||
تصف صفحة [https://developer.android.com/tools/publishing/app-signing.html توقيع التطبيقات في توثيق Android Developers] الموضوعَ بالتفصيل. يغطي هذا الدليل العملية بإيجاز، وكذلك يسرد الخطوات المطلوبة لتحزيم حزمة JavaScript. | |||
==توليد مفتاح رفع== | ==توليد مفتاح رفع== | ||
يمكنك توليد مفتاح توقيع خاص باستخدام أداة keytool. في Windows، يجب تشغيل keytool من <code>C:\Program Files\Java\jdkx.x.x_x\bin</code>. | يمكنك توليد مفتاح توقيع خاص باستخدام أداة keytool. في Windows، يجب تشغيل keytool من <code>C:\Program Files\Java\jdkx.x.x_x\bin</code>. | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
سطر 15: | سطر 14: | ||
في نظام Mac، إذا لم تكن متأكدًا من مكان مجلد JDK bin، فنفّذ الأمر التالي للعثور عليه: | في نظام Mac، إذا لم تكن متأكدًا من مكان مجلد JDK bin، فنفّذ الأمر التالي للعثور عليه: | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
/usr/libexec/java_home | |||
</syntaxhighlight> | </syntaxhighlight> | ||
سطر 23: | سطر 22: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
انتقل إلى هذا المجلد باستخدام الأمر <code> | انتقل إلى هذا المجلد باستخدام الأمر <code>cd /your/jdk/path</code> واستخدم الأمر keytool بصلاحية sudo كما هو موضح أدناه. | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
'''ملاحظة:''' تذكر الاحتفاظ بملف keystore بشكل سريّ. في حالة فقدت مفتاح الرفع أو تم اختراقه، يجب عليك [https://support.google.com/googleplay/android-developer/answer/7384423#reset اتباع هذه التعليمات]. | '''ملاحظة:''' تذكر الاحتفاظ بملف keystore بشكل سريّ. في حالة فقدت مفتاح الرفع أو تم اختراقه، يجب عليك [https://support.google.com/googleplay/android-developer/answer/7384423#reset اتباع هذه التعليمات]. | ||
==إعداد متغيرات Gradle== | ==إعداد متغيرات Gradle== | ||
سطر 42: | سطر 40: | ||
ستكون هذه متغيرات Gradle عامة، والتي يمكننا استخدامها لاحقًا في إعداد Gradle لتوقيع تطبيقنا. | ستكون هذه متغيرات Gradle عامة، والتي يمكننا استخدامها لاحقًا في إعداد Gradle لتوقيع تطبيقنا. | ||
'''ملاحظة حول الأمان:''' إذا لم يعجبك | '''ملاحظة حول الأمان:''' إذا لم يعجبك تخزين كلمات المرور في نص عادي (plaintext) وكنتَ تعمل على OSX، يمكنك كذلك [https://pilloxa.gitlab.io/posts/safer-passwords-in-gradle/ تخزين بياناتك في تطبيق Keychain Access]. بعد ذلك يمكنك تخطي الصفين الأخيرين في <code>~/.gradle/gradle.properties</code>. | ||
==إضافة إعداد التوقيع إلى إعداد Gradle في تطبيقك== | ==إضافة إعداد التوقيع إلى إعداد Gradle في تطبيقك== | ||
سطر 71: | سطر 69: | ||
... | ... | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==توليد | ==توليد الإصدار AAB == | ||
نفِّذ ما يلي في طرفية: | نفِّذ ما يلي في طرفية: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
سطر 79: | سطر 77: | ||
سيُجمِّع أمرُ <code>bundleRelease</code> الخاص بأداة Gradle شيفرة JavaScript اللازمة لتشغيل تطبيقك داخل حُزمة AAB (اختصار [https://developer.android.com/guide/app-bundle Android App Bundle]). إذا احتجت إلى تغيير الطريقة التي تُجمَّع بها حزمة JavaScript أو طريقة تجميع الموارد القابلة للرسم (drawable resources) (على سبيل المثال، إذا غيّرت أسماء الملفات أو المجلدات الافتراضية أو الهيكل العام للمشروع)، فألقِ نظرة على <code>android/app/build.gradle</code> للاطلاع على كيفية تحديثه لتعكس هذه التغييرات. | سيُجمِّع أمرُ <code>bundleRelease</code> الخاص بأداة Gradle شيفرة JavaScript اللازمة لتشغيل تطبيقك داخل حُزمة AAB (اختصار [https://developer.android.com/guide/app-bundle Android App Bundle]). إذا احتجت إلى تغيير الطريقة التي تُجمَّع بها حزمة JavaScript أو طريقة تجميع الموارد القابلة للرسم (drawable resources) (على سبيل المثال، إذا غيّرت أسماء الملفات أو المجلدات الافتراضية أو الهيكل العام للمشروع)، فألقِ نظرة على <code>android/app/build.gradle</code> للاطلاع على كيفية تحديثه لتعكس هذه التغييرات. | ||
'''ملاحظة:''' تأكد من أن gradle.properties لا يتضمن <code>org.gradle.configureondemand=true</code> لأن ذلك سيجعل بناء الإصدار يتخطى تجميع JavaScript والأصول في ملف ثنائية التطبيق (app binary). | '''ملاحظة:''' تأكد من أن <code>gradle.properties</code> لا يتضمن <code>org.gradle.configureondemand=true</code> لأن ذلك سيجعل بناء الإصدار يتخطى تجميع JavaScript والأصول في ملف ثنائية التطبيق (app binary). | ||
يمكن العثور على ملفّ AAB المُنشأة تحت <code>android/app/build/outputs/bundle/release/app.aab</code>، وهو جاهز للرفع إلى Google Play. | يمكن العثور على ملفّ AAB المُنشأة تحت <code>android/app/build/outputs/bundle/release/app.aab</code>، وهو جاهز للرفع إلى Google Play. | ||
'''ملاحظة:''' لكي يقبل Google Play تنسيق AAB، يجب إعداد توقيع التطبيقات من Google Play (App Signing by Google Play) لتطبيقك على Google Play Console. إذا كنت تقوم بتحديث تطبيقٍ موجودٍ لا يستخدم توقيع التطبيقات من Google Play، فيرجى مراجعة [ | '''ملاحظة:''' لكي يقبل Google Play تنسيق AAB، يجب إعداد توقيع التطبيقات من Google Play (أو ما يُعرَف بميّزة App Signing by Google Play) لتطبيقك على Google Play Console. إذا كنت تقوم بتحديث تطبيقٍ موجودٍ لا يستخدم توقيع التطبيقات من Google Play، فيرجى مراجعة [[ReactNative/signed apk android#.D8.AA.D9.87.D8.AC.D9.8A.D8.B1 .D8.AA.D8.B7.D8.A8.D9.8A.D9.82.D8.A7.D8.AA React Native .D8.A7.D9.84.D9.82.D8.AF.D9.8A.D9.85.D8.A9 .D9.84.D8.A7.D8.B3.D8.AA.D8.AE.D8.AF.D8.A7.D9.85 .D9.85.D9.8A.D9.91.D8.|قسم التهجير]] لمعرفة كيفية إجراء تغيير الإعداد هذا. | ||
== اختبار بناء الإصدار الخاص بتطبيقك == | == اختبار بناء الإصدار الخاص بتطبيقك == | ||
قبل رفع بناء الإصدار إلى Play Store، تأكد من اختباره جيدًا. أولاً، أزِل تثبيت أي إصدار سابق من التطبيق الذي قمت بتثبيته مسبقا. ثمّ ثبِّته على الجهاز باستخدام: | قبل رفع بناء الإصدار إلى Play Store، تأكد من اختباره جيدًا. أولاً، أزِل تثبيت أي إصدار سابق من التطبيق الذي قمت بتثبيته مسبقا. ثمّ ثبِّته على الجهاز باستخدام: | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
npx react-native run-android --variant=release | |||
</syntaxhighlight> | </syntaxhighlight> | ||
سطر 96: | سطر 94: | ||
== النشر إلى المتاجر الأخرى == | == النشر إلى المتاجر الأخرى == | ||
افتراضيًا، يحتوي ملف APK المولَّد على الشيفرة الأصيلة لكل من معماريات x86 و ARMv7a. ما يُسهِّل مشاركة ملفات APK تعمل على جميع أجهزة Android | افتراضيًا، يحتوي ملف APK المولَّد على الشيفرة الأصيلة لكل من معماريات x86 و ARMv7a. ما يُسهِّل مشاركة ملفات APK تعمل على جميع أجهزة Android تقريبًا، لكنّ لهذا جانبًا سلبيًّا، وهو أنه سيكون هناك بعض الشيفرات الأصيلة غير المستخدمة على أي جهاز، مما يؤدي إلى ملفات APK أكبر حجمًا بلا حاجة. | ||
يمكنك إنشاء ملفّ APK لكل معماريّة عبر تغيير السطر التالي في <code>android/app/build.gradle</code>: | يمكنك إنشاء ملفّ APK لكل معماريّة عبر تغيير السطر التالي في <code>android/app/build.gradle</code>: | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
سطر 114: | سطر 109: | ||
+ universalApk true // If true, also generate a universal APK | + universalApk true // If true, also generate a universal APK | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==تمكين Proguard لتقليل حجم ملف APK (اختياري)== | ==تمكين Proguard لتقليل حجم ملف APK (اختياري)== | ||
Proguard هي أداة يمكنها تقليل حجم ملف APK بشكل طفيف. وذلك عن طريق إزالة أجزاءٍ من شيفرة Java في React Native (واعتمادياتها) التي لا يستخدمها تطبيقك. | Proguard هي أداة يمكنها تقليل حجم ملف APK بشكل طفيف. وذلك عن طريق إزالة أجزاءٍ من شيفرة Java في React Native (واعتمادياتها) التي لا يستخدمها تطبيقك. | ||
سطر 127: | سطر 123: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==تهجير تطبيقات React Native القديمة لاستخدام | ==تهجير تطبيقات React Native القديمة لاستخدام ميزة توقيع التطبيقات من Google Play== | ||
إذا كنت قيد التهجير من إصدار React Native سابق، فأغلب الظن أنّ تطبيقك لا يستخدم ميزة "توقيع التطبيقات من Google Play". نوصي بتمكين ذلك للاستفادة من ميّزات مثل تقسيم التطبيق تلقائيًّا. للتهجير من طريقة التوقيع القديمة، يجب أن تبدأ من خلال [[ReactNative/signed apk android#.D8.AA.D9.88.D9.84.D9.8A.D8.AF .D9.85.D9.81.D8.AA.D8.A7.D8.AD .D8.B1.D9.81.D8.B9|إنشاء مفتاح رفعٍ جديد]]، ثم استبدِل إعدادات توقيع الإصدار (release signing config) في ملفّ <code>android/app/build.gradle</code> لاستخدام مفتاح الرفع بدلاً من مفتاح الإصدار (انظر قسم [[ReactNative/signed apk android#.D8.A5.D8.B6.D8.A7.D9.81.D8.A9 .D8.A5.D8.B9.D8.AF.D8.A7.D8.AF .D8.A7.D9.84.D8.AA.D9.88.D9.82.D9.8A.D8.B9 .D8.A5.D9.84.D9.89 .D8.A5.D8.B9.D8.AF.D8.A7.D8.AF Gradle .D9.81.D9.8A .D8.AA.D8.B7.D8.A8.D9.8A.D|إضافة إعداد التوقيع إلى إعداد Gradle]] في تطبيقك). بمجرد الانتهاء من ذلك، يجب عليك اتباع [https://support.google.com/googleplay/android-developer/answer/7384423 تعليمات Google Play] لإرسال مفتاح الإصدار الأصلي إلى Google Play. | |||
== الأذونات الافتراضية == | |||
يضاف الإذن <code>INTERNET</code> بشكلٍ افتراضي إلى تطبيقك Android لأن كل التطبيقات تقريبًا تستخدمه، كما يضاف الإذن <code>SYSTEM_ALERT_WINDOW</code> إلى Android APK في وضع التنقيح (debug) لكنه سيحذف عند الإنشاء. | |||
== مصادر == | == مصادر == | ||
* [https://facebook.github.io/react-native/docs/signed-apk-android صفحة Generating Signed APK في توثيق React Native الرسمي.] | * [https://facebook.github.io/react-native/docs/signed-apk-android صفحة Generating Signed APK في توثيق React Native الرسمي.] | ||
[[تصنيف:ReactNative]] | [[تصنيف:ReactNative]] | ||
[[تصنيف:React Native Docs]] |
المراجعة الحالية بتاريخ 13:50، 9 أكتوبر 2021
يتطلب Android أن تُوقّع جميع التطبيقات رقميًا بشهادة قبل تثبيتها، لذلك لتوزيع تطبيقك Android عبر متجر Google Play، ستحتاج إلى إنشاء إصدار APK موقّع بمفتاح إصدار (release key)، والذي يجب بعدها استخدامه لجميع التحديثات مستقبلًا. أصبح بإمكان Google Play منذ عام 2017 إدارة توقيع الإصدارات تلقائيًا بفضل وظيفة توقيع التطبيقات من خلال Google Play. ومع ذلك، قبل رفع ثنائيّة تطبيقك (application binary) إلى Google Play، يجب توقيعه باستخدام مفتاح رفع (upload key). تصف صفحة توقيع التطبيقات في توثيق Android Developers الموضوعَ بالتفصيل. يغطي هذا الدليل العملية بإيجاز، وكذلك يسرد الخطوات المطلوبة لتحزيم حزمة JavaScript.
توليد مفتاح رفع
يمكنك توليد مفتاح توقيع خاص باستخدام أداة keytool. في Windows، يجب تشغيل keytool من C:\Program Files\Java\jdkx.x.x_x\bin
.
keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
يطالبك هذا الأمر بكلمات المرور الخاصة بكل من حقول keystore و المفتاح (key) و الاسم المميَّز (Distinguished Name) لمفتاحك. ثم يُنشئ keystore كملفٍ يسمى my-upload-key.keystore
.
يحتوي keystore على مفتاح واحد صالح لمدة 10000 يوم. الاسم المستعار (alias) هو الاسم الذي ستستخدمه لاحقًا عند توقيع تطبيقك، لذلك تذكر تدوينه.
في نظام Mac، إذا لم تكن متأكدًا من مكان مجلد JDK bin، فنفّذ الأمر التالي للعثور عليه:
/usr/libexec/java_home
سوف ُيخرج الأمر مسار مجلد jdk، والذي سيبدو على هذا الشكل:
/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home
انتقل إلى هذا المجلد باستخدام الأمر cd /your/jdk/path
واستخدم الأمر keytool بصلاحية sudo كما هو موضح أدناه.
sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
ملاحظة: تذكر الاحتفاظ بملف keystore بشكل سريّ. في حالة فقدت مفتاح الرفع أو تم اختراقه، يجب عليك اتباع هذه التعليمات.
إعداد متغيرات Gradle
- ضع ملف
my-upload-key.keystore
في مجلد android/app
داخل مشروعك. - حرر الملف
~/.gradle/gradle.properties
أو android/gradle.properties
، وأضف ما يلي (استبدل *****
بكلمة مرورِ keystore، والاسم المستعار، والمفتاح):
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****
ستكون هذه متغيرات Gradle عامة، والتي يمكننا استخدامها لاحقًا في إعداد Gradle لتوقيع تطبيقنا.
ملاحظة حول الأمان: إذا لم يعجبك تخزين كلمات المرور في نص عادي (plaintext) وكنتَ تعمل على OSX، يمكنك كذلك تخزين بياناتك في تطبيق Keychain Access. بعد ذلك يمكنك تخطي الصفين الأخيرين في ~/.gradle/gradle.properties
.
إضافة إعداد التوقيع إلى إعداد Gradle في تطبيقك
آخر خطوة في الإعداد يجب القيام بها هي إعداد بناءات الإصدار لتوقيعها باستخدام مفتاح الرفع. حرّر الملف android/app/build.gradle
في مجلد مشروعك، وأضف إعداد التوقيع:
...
android {
...
defaultConfig { ... }
signingConfigs {
release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
...
توليد الإصدار AAB
نفِّذ ما يلي في طرفية:
$ cd android
$ ./gradlew bundleRelease
سيُجمِّع أمرُ bundleRelease
الخاص بأداة Gradle شيفرة JavaScript اللازمة لتشغيل تطبيقك داخل حُزمة AAB (اختصار Android App Bundle). إذا احتجت إلى تغيير الطريقة التي تُجمَّع بها حزمة JavaScript أو طريقة تجميع الموارد القابلة للرسم (drawable resources) (على سبيل المثال، إذا غيّرت أسماء الملفات أو المجلدات الافتراضية أو الهيكل العام للمشروع)، فألقِ نظرة على android/app/build.gradle
للاطلاع على كيفية تحديثه لتعكس هذه التغييرات.
ملاحظة: تأكد من أن gradle.properties
لا يتضمن org.gradle.configureondemand=true
لأن ذلك سيجعل بناء الإصدار يتخطى تجميع JavaScript والأصول في ملف ثنائية التطبيق (app binary).
يمكن العثور على ملفّ AAB المُنشأة تحت android/app/build/outputs/bundle/release/app.aab
، وهو جاهز للرفع إلى Google Play.
ملاحظة: لكي يقبل Google Play تنسيق AAB، يجب إعداد توقيع التطبيقات من Google Play (أو ما يُعرَف بميّزة App Signing by Google Play) لتطبيقك على Google Play Console. إذا كنت تقوم بتحديث تطبيقٍ موجودٍ لا يستخدم توقيع التطبيقات من Google Play، فيرجى مراجعة قسم التهجير لمعرفة كيفية إجراء تغيير الإعداد هذا.
اختبار بناء الإصدار الخاص بتطبيقك
قبل رفع بناء الإصدار إلى Play Store، تأكد من اختباره جيدًا. أولاً، أزِل تثبيت أي إصدار سابق من التطبيق الذي قمت بتثبيته مسبقا. ثمّ ثبِّته على الجهاز باستخدام:
npx react-native run-android --variant=release
لاحظ أن خيار --variant=release
متاح فقط إذا أعددت التوقيع كما هو موضح أعلاه.
يمكنك إنهاء أي نسخِ محزِّمٍ (packager instances) قيد التشغيل، نظرًا لأن كل من إطار العمل وشيفرة JavaScript مدمجة في أصول APK.
النشر إلى المتاجر الأخرى
افتراضيًا، يحتوي ملف APK المولَّد على الشيفرة الأصيلة لكل من معماريات x86 و ARMv7a. ما يُسهِّل مشاركة ملفات APK تعمل على جميع أجهزة Android تقريبًا، لكنّ لهذا جانبًا سلبيًّا، وهو أنه سيكون هناك بعض الشيفرات الأصيلة غير المستخدمة على أي جهاز، مما يؤدي إلى ملفات APK أكبر حجمًا بلا حاجة.
يمكنك إنشاء ملفّ APK لكل معماريّة عبر تغيير السطر التالي في android/app/build.gradle
:
- ndk {
- abiFilters "armeabi-v7a", "x86"
- }
- def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true
ارفع كلا هذين الملفين إلى متاجر التطبيقات التي تدعم استهداف الأجهزة، مثل Google Play وAmazon AppStore، وسيحصل المستخدمون تلقائيًا على ملفّ APK المناسب. إذا كنت تريد الرفع إلى أسواق أخرى، مثل APKFiles، التي لا تدعم ملفات APK متعددة للتطبيق الواحد، فغيِّر السطر التالي كذلك لإنشاء ملف APK العالمي الافتراضي مع ثنائيات لكل من وحدات المعالجة المركزية (CPU).
- universalApk false // If true, also generate a universal APK
+ universalApk true // If true, also generate a universal APK
تمكين Proguard لتقليل حجم ملف APK (اختياري)
Proguard هي أداة يمكنها تقليل حجم ملف APK بشكل طفيف. وذلك عن طريق إزالة أجزاءٍ من شيفرة Java في React Native (واعتمادياتها) التي لا يستخدمها تطبيقك.
هام: تأكد من اختبار تطبيقك بدقة إذا مكّنت Proguard. غالبًا ما يتطلب برنامج Proguard إعدادات خاصة لكل مكتبة أصيلة تستخدمها. انظر ملفّ app/proguard-rules.pro
.
لتمكين Proguard، عدِّل android/app/build.gradle
:
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = true
تهجير تطبيقات React Native القديمة لاستخدام ميزة توقيع التطبيقات من Google Play
إذا كنت قيد التهجير من إصدار React Native سابق، فأغلب الظن أنّ تطبيقك لا يستخدم ميزة "توقيع التطبيقات من Google Play". نوصي بتمكين ذلك للاستفادة من ميّزات مثل تقسيم التطبيق تلقائيًّا. للتهجير من طريقة التوقيع القديمة، يجب أن تبدأ من خلال إنشاء مفتاح رفعٍ جديد، ثم استبدِل إعدادات توقيع الإصدار (release signing config) في ملفّ android/app/build.gradle
لاستخدام مفتاح الرفع بدلاً من مفتاح الإصدار (انظر قسم إضافة إعداد التوقيع إلى إعداد Gradle في تطبيقك). بمجرد الانتهاء من ذلك، يجب عليك اتباع تعليمات Google Play لإرسال مفتاح الإصدار الأصلي إلى Google Play.
الأذونات الافتراضية
يضاف الإذن INTERNET
بشكلٍ افتراضي إلى تطبيقك Android لأن كل التطبيقات تقريبًا تستخدمه، كما يضاف الإذن SYSTEM_ALERT_WINDOW
إلى Android APK في وضع التنقيح (debug) لكنه سيحذف عند الإنشاء.