همه چییییی راجب خروجی apk در ری اکت نیتیو

سلام بچها این ویرگول در راستای ویرگول حذف شده ی قبلم عه و می خوام یکم به ویرگول هام صفا بدم الان که تایم دارم و ایشالا از هفته ی اینده با انرژی شروع کنماین ویرگول در اصل چندتا ویرگول در یکی عه و ویرگول های قبل یکی کردم می دونم مطالب زیاد میشه و حوصله خوندن ندارید ولی به خودتون انگیزه بدین چون می خوام هرچی راجب خروجی apk در ری اکت نیتیو هست اینجا یکی کنممی دونید که از یه جایی به بعد ترکیبی انگلیسی و فارسی نوشتم (برای کسایی که مثل خودم اول کار از زبان ترس دارن و داکیومنت ها رو نمی خونن)موضوعات:خروجی امضاء شده apk از react-nativeاجرای برنامه react-native روی دیوایس واقعی بدون خروجی امضا شدهجلوگیری از مهندسی معکوس و امنیت بیشتر در react-nativeکم کردن حجم فایل apk و جداکردن پردازنده های مختلفخروجی امضاء شده apk از react-nativeاول از همههههه cmd را با حالت run as administrator باز کنید خیلییییی مهمهههتوی همه ی سیستم های ما jdk نصب هستپس برید توی مسیرشC:\Program Files\Java\jdk1.8.0_161\binکه از شما ممکنه ورژن jdk تون فرق داشته باشه هر چی که هست همونو توی cmd باز کنید و دستور زیر بزنید (موقع زدن این دستور ازتون رمز می خواد که شما بزنید ولی حس می کنید کارکتری نشون نمیده نه ستاره ای نه رمزی که میزنید ولی در واقع دارعه اعمال میشه ... بعد چندتا سوال می پرسه هرچی می خوایید بنویسید مهم نیست بعد y بزنید ینی یس)1 keytool -genkeypair -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000 بعد یه فایل به فرمت .keystore میسازه براتون که اونو برید توی مسیر پروژه تونD:\project\test\android\appو اونجا فایل فرمت .keystore کپی پیست کنیدبعد برید و این تغیرات که میگه انجام بدین ستاره ها همون رمزیه که برای keystore زدید که گفتم نشون نمیدهEdit the file android/gradle.properties, and add the following (replace ***** with the correct keystore password, alias and key password),1234MYAPP_RELEASE_STORE_FILE=my-release-key.keystore MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD=***** MYAPP_RELEASE_KEY_PASSWORD=*****Edit the file android/app/build.gradle in your project folder, and add the signing config,12345678910111213141516171819202122... android { ... defaultConfig { ... } signingConfigs { release { if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } } buildTypes { release { ... signingConfig signingConfigs.release } } } ...و در اخر برید توی cmd و وارد دایرکتوری اندروید پروژه تون بشید و دستور gradlew assembleRelease بزنید و صب کنیدو اگه خواستین تست بگیرید از نسخه ی ریلیز شدتون1 react-native run-android --variant=release و در اخرThe generated APK can be found under android/app/build/outputs/apk/release/app-release.apk, and is ready to be distributed.خوب تموم شد امیدوارم مفید بودعه باشه براتون اگه حال داشتین کامنت بزارید خوش حال میشماین ویرگول اپدیت میشه و یا شاید توی یه ویرگول جدا بگم که چجوری حجم فایل apk مونو کم کنیمو اگه هر گونه اروری دریافت کردید خونسرد باشید و عین متن ارور رو سرچ کنید حتما به نتیجه میرسید ولی قبل سرچ کردن توصیه می کنم اگه vpnتون خاموشه روشن کنیدمنبع اجرای برنامه react-native روی دیوایس واقعی بدون خروجی امضا شدهخوب بچها سیم شارژرتونو به لپ تاپتون وصل کنید و کاری که گفته را انجام بدین To enable USB debugging on your device, you will first need to enable the "Developer options" menu by going to Settings → About phone and then tapping the Build number row at the bottom seven times. You can then go back to Settings → Developer options to enable "USB debugging" خوب وقتی 7بار ضربه بزنید اون Developer options براتون میادخوب Developer options باز کنید و گزینه ی USB debugging فعال کنید همون جوری که خودش تو منت گفته (اگه تونستم ترجمه نکنم:/)خوب الان گوشیتون یه دسترسی می خواد دسترسی برای همیشه بهش بدینخوب الان برید توی cmd و کامند adb devices بزنیدیه چیزی شبیه به این میاد14ed2fcc device # Physical deviceنیومد یه جای کارو اشتباه کردین ببنید اصلا سیم شارژتون وصل کردید فایل های خود گوشیتونو میاره چون بعضی سیم ها نمیاره جوری که انگار گوشی نشناخته اصلاخوب تموم شدالان مثل قبل react-native run-android بزنید و منتظر باشید تا بیلد بگیرعهاین روش ما رو از هرچی گردل و اندروید استودیو راحت می کنه یه ساعت دیگه لازم نیست وایسیم تا خودعه اندروید استودیو بیاد بالا یه ساعت شبیه ساز و فلانولی اگه یکم کار کردعه باشید میگید عه چجوری Developer Menu بیارم تا هر تغیری دادم بتونم ریلود کنمخوب کافیه فقط گوشیتونو شیک کنید ینی تکونش بدین مث وی چت بود که این جوری دوست پیدا می کردیم :) یادش بخیر ...منبع و منبعجلوگیری از مهندسی معکوس و امنیت بیشتر در react-native شاید شما مهندسی معکوس به گوشتون خورده باشه ولی چجوری می تونیم ما از این کار جلوگیری کنیم و کدهامونو در برنامه هایی مثل Apk Edditorناخوانا کنیم؟زمانی که داشتم ویرگول حجم خروجی ها را می نوشتم قسمت اخر داکیومنت چیزی بود که بهش توجه نکردم و فکر می کردم روش سومیه که میشه باهاش حجم خروجی را کم کرد ولی راستشو بخوایین حوصله تست نداشتم ولی چیزی که وجود داشت این بود که درسته که یه روشی بود برای کم کردن حجم فایل خروجی ولیییی این جوری عمل می کرد که کد مارا از دی کامپایل شدن نجات میدادولی چیزی که نظر من جلب کرد این بود که خود داکیومنتش یه false می کنه true ولی چیزی که توی مدیوم دیدم یکم بیشتر تبدیل false به true عهHow to obfuscate(مبهم) your Android code? Add these lines to [app_name]/android/app/build.gradle def enableProguardInReleaseBuilds = true //in hamone k goftm to doc true mikone //ina chizaeeye k byd bnvisid android { // other config omitted for brevity buildTypes { release { debuggable false shrinkResources enableProguardInReleaseBuilds zipAlignEnabled enableProguardInReleaseBuilds minifyEnabled enableProguardInReleaseBuilds useProguard enableProguardInReleaseBuilds setProguardFiles([getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro']) } } }And uncomment/remove this line of code in [app_name]/android/app/proguard-rules.pro # Disabling obfuscation is useful if you collect stack traces from production crashes # (unless you are using a system that supports de-obfuscate the stack traces). # -dontobfuscate How to check if your Android code was obfuscated?You can easily check if obfuscation was successful In Android Studio via APK analyser.Navigate to [app_name]/android/app/builds/outputs/apk and click on app-release.apk file. Find classes.dex file in newly opened tab and click on it.Inspect classes.dex file — check every important package. If you see something like this instead of regular class or method names, then probably code obfuscation went well.خوب می بینید که یه مشت کد و کلاس های ناخوانا براتون نشون میدهراستشو بخوایین من اینو چک نکردم و تجربه ی استفاده شو نداشتمو حتی ممکنه الان بیایید غر بزنید که چرا این همش کپی پیست خود مدیوم گذاشتی اول این که هدفم اینه برای کسایی که زبانشون خوب نیست ولی رویای بزرگی دارند و می خواند برنامه نویس بشن ولی از زبان و خود داکیومنت هاش می ترسن یه کمک باشه که ببین چیز سختی نیست تو می تونی یاد بگیری:)و البته اگه بخوام بیشتر صادق باشم وقت ترجمه نداشتم ولی دوست داشتم شما مث من با این اشنا بشید (گرچه همون جور که گفتم ترجمه اش کاری نداره و نترسید خودتون می تونید بخونیدش) ولی در اینده به شما و خودم قول میدم حتما تستش کنم و تفاوت حجم این روش با apk معمولی بهتون بگمو اگه جایی دیدم مبهم عه بیشتر برای خودمو شما بازش کنم کم کردن حجم فایل apk و جداکردن پردازنده های مختلفمن امروز می خوام خروجی apk در پردازنده های مختلف بنویسم چون چند روز پیش من یه برنامه تودو لیست داشتم و برای چند نفر فرستادمدو تا فیدبکی که گرفتم راجب این بود که چرا انقد دسترسی می خواد درصورتی که من دسترسی نداده بودم (راه حل این خیلی ساده است)و دوم حجم زیاد فایل خروجی... که خوب برای یه تو دو لیست حجمی که باید دانلود بشه و تو تلگرام فرستام ۱۳ مگ بود و برای کاربرهای من عجیب بود این حجم:/ ولی نظرتون جلب می کنم به ایناون ۳۰ مگ چی میگه اون ۱۳ مگه چی میگه؟!قضیه اینه که اون ۱۳ مگه فشرده شده اون ۳۰ مگه ولی وقتی دیگه فایل نصب شده نمیشه از فشرده شده ها استفاده کرد که ...ولی تو حالت نرمال اون ۱۳ مگ ام خیلی زیادعه برای یه تو دو لیسترفتم توی داکیومنتش و دو مورد فهمیدماین جوری که من فهمیدم جدا کردن پردازنده ها بهترعه ولی می خوام یه پروژه ساده ری اکت نیتیو بزنم و دو تا روش امتحان کنم ببینم چی میشه روی یه پروژه ساده که هیچ کتابخونه و کد اضافه ندارهدلیل این که همین تو دو لیست امتحان نکردم این بود که گفتم شاید این جوری بهتره و نتیجه دقیق تر و بیسیک تری داریم؛ چون من از ریلم استفاده کردم و پروژه ها کلا با هم فرق دارن توی استفاده از همین کتابخونه هاخوب یه فایل برنامه ساده خود ری اکت نیتیو بدون تغیر بدون نصب کتابخونه ی خاصی حجم فایل زیپ شده اش 7.4MB عه ولی میزان حافظه ای که می گیرعه Split APKs by ABI to reduce file size :By default, the generated APK has the native code for both x86 and ARMv7a CPU architectures. This makes it easier to share APKs that run on almost all Android devices. However, this has the downside that there will be some unused native code on any device, leading to unnecessarily bigger APKs.You can create an APK for each CPU by changing the following line in android/app/build.gradle: - ndk { - abiFilters "armeabi-v7a", "x86" - } - def enableSeparateBuildPerCPUArchitecture = false + def enableSeparateBuildPerCPUArchitecture = true و اگه این تیکه دومو universalApk را تورو کنم علاوه بر خروجی برای پردازنده های مختلف همون خروجی کلی که مال همه ی پردازنده هاست را میده - universalApk false // If true, also generate a universal APK + universalApk true // If true, also generate a universal APKخوب خروجی نهایی میشه این که من الان از ورژن 57.8 استفاده کردم و الان فهمیدم که اگه از 58.6 و یکم پایین تر و بالاتر این ورژن استفاده کنیم این 3تا را میدهarmeabi-v7ax86arm64-v8aخوب من معماری گوشیم ارم عه برای همین x86 نصب نشد که بهتون بگم ولی نتیجه کار رو ببنیداین برای ارماینم برای کل پردازنده ها و حالت یونیورسال که جالبه بدونید که اون حالت معمولی خودمون 16.64 بود این حالت 17.42 برید عکس اولی را ببنید دوباره خوب قرار نبود این ویرگولم نصفه باشه ولی خوب وسطاش حوصلم سر رفت و دو حالت دیگه را هم بعدها اگه وقت و حالی بود برسی می کنم ولی کلا کاربرهای خیلی معمولی براشون زیاد فرق نداره و این جوری نگاه نمی کنه و منم به دید یه تجربه نگاش کردماین که تفاوت هاشون توی یکی دو مگ بود شاید اول کار مسخره بیاد ولی توی پروژه های بزرگ تفاوتش بیشتر لمس میشهو این که اکثر گوشی ها ارم عه و نسخه ی ارم بیشتر کاربرد داره ظاهرا چیزیه که من توی گروه فهمیدمو اگه برنامتونو می خوایید بزارید تو بازار ارم بزارید اگه خیلی حجمش تفاوت داشت ولی برای اون اندکی کاربر که x86 و برنامه ی خوووب شما را از دست میدن ایده ای ندارم جز این که همه ی پردازنده ها را بزارید مگر این که بازار مث گوگل پلی بشه یه روزی ....و بتونید چندتا apk متفاوت بزاریدولی کلا چیزی که من متوجه شدم تلفن های معماریX86 معماری armeabi-v7a را هم معمولا ساپورت می کنه ولی یه دوستام گفت که ظاهرا سری جدید ایسوز همه ی برنامه های armeabi-v7aرا ساپورت نمی کنهاین درگیری بین میزان حافظه ی اشغالی فکر کنم تا چند سال اینده خیلی مسخره بشه چرا که pwa ها دارن میاد و یه ویرگولم قراره راجب همین بنویسم امروز اینجااین که حالت فشرده را هم گفتم برای اینه که همین جوری بدونیم و با حافظه اصلی عه اشتباه نگریم و گرنه فکر نکنم کاربرد خاصی داشته باشه :/منبع