با استفاده از ابزار خط فرمان Gradle wrapper میتوانید تمام کارهای ساختنی را که برای پروژه اندرویدی خود در دسترس است، اجرا کنید. این به عنوان یک فایل دسته ای برای ویندوز ( gradlew.bat
) و یک اسکریپت پوسته برای لینوکس و مک ( gradlew.sh
) در دسترس است و از ریشه هر پروژه ای که با Android Studio ایجاد می کنید قابل دسترسی است.
برای اجرای یک کار با wrapper، از یکی از دستورات زیر از پنجره ترمینال استفاده کنید (از Android Studio، View > Tool Windows > Terminal را انتخاب کنید):
- در Command Shell ویندوز:
gradlew task-name
- در Mac، Linux، یا Windows PowerShell:
./gradlew task-name
برای مشاهده لیستی از تمام وظایف ساخت موجود برای پروژه خود، tasks
اجرا کنید:
gradlew tasks
بقیه این صفحه اصول اولیه ساخت و اجرای برنامه خود را با بسته بندی Gradle شرح می دهد. برای اطلاعات بیشتر در مورد نحوه تنظیم ساخت اندروید خود، به پیکربندی ساخت خود مراجعه کنید.
اگر ترجیح می دهید به جای ابزارهای خط فرمان از ابزارهای Android Studio استفاده کنید، به ساخت و اجرای برنامه خود مراجعه کنید.
به طور پیشفرض، دو نوع ساخت برای هر برنامه اندرویدی موجود است: یکی برای اشکالزدایی برنامه شما - ساخت اشکالزدایی - و دیگری برای انتشار برنامه شما برای کاربران - نسخه انتشار . خروجی حاصل از هر ساخت باید با یک گواهی امضا شود تا بتوانید برنامه خود را در دستگاهی اجرا کنید. ساخت اشکالزدایی بهطور خودکار با یک کلید اشکالزدایی ارائهشده توسط ابزارهای SDK امضا میشود (ناامن است و نمیتوانید با آن در فروشگاه Google Play منتشر کنید)، و نسخه انتشار باید با کلید خصوصی خودتان امضا شود.
اگر می خواهید برنامه خود را برای انتشار بسازید، مهم است که برنامه خود را با کلید امضای مناسب نیز امضا کنید . با این حال، اگر تازه شروع کردهاید، میتوانید با ساختن یک APK اشکالزدایی ، برنامههای خود را به سرعت روی یک شبیهساز یا دستگاه متصل اجرا کنید.
همچنین می توانید یک نوع ساخت سفارشی را در فایل build.gradle.kts
خود تعریف کنید و آن را پیکربندی کنید تا با گنجاندن debuggable true
به عنوان یک ساخت اشکال زدایی امضا شود. برای اطلاعات بیشتر، پیکربندی انواع ساخت را ببینید.
اگرچه ساختن یک بسته نرم افزاری بهترین راه برای بسته بندی برنامه و آپلود آن در کنسول Play است، ساختن APK برای زمانی که می خواهید به سرعت یک ساخت اشکال زدایی را آزمایش کنید یا برنامه خود را به عنوان یک مصنوع قابل اجرا با دیگران به اشتراک بگذارید، مناسب تر است.
برای آزمایش فوری برنامه و اشکال زدایی، می توانید یک APK اشکال زدایی بسازید. APK اشکالزدایی با یک کلید اشکالزدایی ارائه شده توسط ابزارهای SDK امضا میشود و امکان اشکالزدایی را از طریق adb
فراهم میکند.
برای ساختن یک APK اشکال زدایی، یک خط فرمان باز کنید و به ریشه دایرکتوری پروژه خود بروید. برای شروع ساخت اشکال زدایی، وظیفه assembleDebug
را فراخوانی کنید:
gradlew assembleDebug
این یک APK با نام module_name -debug.apk
در project_name / module_name /build/outputs/apk/
ایجاد میکند. فایل قبلاً با کلید اشکال زدایی امضا شده و با zipalign
تراز شده است، بنابراین می توانید فوراً آن را روی دستگاه نصب کنید.
یا برای ساختن APK و نصب فوری آن بر روی یک شبیه ساز در حال اجرا یا دستگاه متصل، به جای آن installDebug
را فراخوانی کنید:
gradlew installDebug
بخش «اشکالزدایی» در نامهای کار بالا فقط یک نسخه از نام نوع ساخت است، بنابراین میتوان آن را با هر نوع ساخت یا گونهای که میخواهید مونتاژ یا نصب کنید جایگزین کرد. به عنوان مثال، اگر طعم محصول "دمو" دارید، می توانید نسخه اشکال زدایی را با کار assembleDemoDebug
بسازید.
برای مشاهده تمام کارهای ساخت و نصب موجود برای هر نوع (از جمله وظایف حذف نصب)، task tasks
را اجرا کنید.
همچنین به بخش نحوه اجرای برنامه خود در شبیه ساز و اجرای برنامه خود در دستگاه مراجعه کنید.
وقتی آماده انتشار و توزیع برنامه خود هستید، باید یک بسته نسخه یا APK بسازید که با کلید خصوصی شما امضا شده باشد. برای اطلاعات بیشتر، به بخش نحوه امضای برنامه خود از خط فرمان بروید.
برای استفاده از شبیه ساز اندروید، باید با استفاده از Android Studio یک دستگاه مجازی اندروید (AVD) ایجاد کنید .
هنگامی که یک AVD دارید، شبیه ساز اندروید را راه اندازی کنید و برنامه خود را به صورت زیر نصب کنید:
در یک خط فرمان، به
android_sdk /tools/
بروید و شبیه ساز را با مشخص کردن AVD خود راه اندازی کنید:emulator -avd avd_name
اگر از نام AVD مطمئن نیستید،
emulator -list-avds
را اجرا کنید.- اکنون می توانید برنامه خود را با استفاده از یکی از وظایف نصب Gradle که در بخش نحوه ساخت APK اشکال زدایی یا ابزار
adb
ذکر شده است، نصب کنید.اگر APK با استفاده از یک پیشنمایش SDK توسعهدهنده ساخته شده است (اگر
targetSdkVersion
به جای عدد یک حرف باشد)، باید گزینه-t
را با دستورinstall
اضافه کنید تا یک APK آزمایشی نصب شود.adb install path/to/your_app.apk
همه APKهایی که میسازید در
project_name / module_name /build/outputs/apk/
ذخیره میشوند.
برای اطلاعات بیشتر، اجرای برنامهها در شبیهساز Android را ببینید.
قبل از اینکه بتوانید برنامه خود را روی دستگاهی اجرا کنید، باید اشکال زدایی USB را در دستگاه خود فعال کنید. میتوانید این گزینه را در قسمت تنظیمات > گزینههای برنامهنویس پیدا کنید.
توجه: در اندروید 4.2 و جدیدتر، گزینه های برنامه نویس به طور پیش فرض پنهان است. برای در دسترس قرار دادن آن، به تنظیمات > درباره تلفن بروید و هفت بار روی Build number ضربه بزنید. برای یافتن گزینه های برنامه نویس به صفحه قبلی بازگردید.
هنگامی که دستگاه شما راه اندازی شد و از طریق USB متصل شد، می توانید برنامه خود را با استفاده از وظایف نصب Gradle که در بخش مربوط به نحوه ساخت APK اشکال زدایی یا ابزار adb
ذکر شده است، نصب کنید:
adb -d install path/to/your_app.apk
همه APKهایی که میسازید در project_name / module_name /build/outputs/apk/
ذخیره میشوند.
برای اطلاعات بیشتر، اجرای برنامهها در دستگاه سختافزار را ببینید.
Android App Bundles شامل همه کدها و منابع کامپایل شده برنامه شما می شود، اما تولید APK و امضای آن به Google Play را به تعویق می اندازد. بر خلاف APK، نمیتوانید یک بسته برنامه را مستقیماً در دستگاه مستقر کنید. بنابراین، اگر میخواهید به سرعت یک APK را با شخص دیگری آزمایش کنید یا به اشتراک بگذارید، در عوض باید یک APK بسازید .
ساده ترین راه برای ساخت بسته نرم افزاری استفاده از Android Studio است. با این حال، اگر نیاز به ساخت یک بسته نرم افزاری از خط فرمان دارید، می توانید این کار را با استفاده از Gradle یا bundletool
انجام دهید، همانطور که در بخش های زیر توضیح داده شده است.
اگر ترجیح میدهید یک بسته نرمافزاری از خط فرمان ایجاد کنید، وظیفه bundle Variant
Gradle را در ماژول پایه برنامه خود اجرا کنید. به عنوان مثال، دستور زیر یک بسته نرم افزاری برای نسخه اشکال زدایی ماژول پایه ایجاد می کند:
./gradlew :base:bundleDebug
اگر میخواهید یک بسته امضا شده برای آپلود در Play Console بسازید، ابتدا باید فایل build.gradle.kts
ماژول پایه را با اطلاعات امضای برنامه خود پیکربندی کنید. برای کسب اطلاعات بیشتر، به بخش نحوه پیکربندی Gradle برای امضای برنامه خود بروید. سپس، برای مثال، میتوانید نسخه انتشار برنامه خود را بسازید، و Gradle به طور خودکار یک بسته نرم افزاری ایجاد میکند و آن را با اطلاعات امضایی که در فایل build.gradle.kts
ارائه میدهید امضا میکند.
اگر در عوض میخواهید یک بسته برنامه را به عنوان یک مرحله جداگانه امضا کنید، میتوانید از jarsigner
برای امضای بسته برنامه خود از خط فرمان استفاده کنید. دستور ساخت بسته نرم افزاری به این صورت است:
jarsigner -keystore pathToKeystore app-release.aab keyAlias
bundletool
یک ابزار خط فرمان است که Android Studio، پلاگین Android Gradle و Google Play برای تبدیل کد و منابع کامپایل شده برنامه شما به بستههای برنامه و تولید APKهای قابل استقرار از آن بستهها استفاده میکنند.
بنابراین، در حالی که آزمایش بستههای برنامه با bundletool
و بازسازی محلی نحوه تولید فایلهای APK توسط Google Play مفید است، معمولاً نیازی به فراخوانی bundletool
برای ساختن خود بسته نرمافزاری ندارید—در عوض باید از Android Studio یا Gradle tasks استفاده کنید، همانطور که در قبل توضیح داده شد. بخش ها
با این حال، اگر نمیخواهید از Android Studio یا Gradle برای ساختن بستهها استفاده کنید - برای مثال، اگر از یک زنجیره ابزار ساخت سفارشی استفاده میکنید، میتوانید از bundletool
از خط فرمان برای ایجاد یک بسته نرم افزاری از کدها و منابع از پیش کامپایل شده استفاده کنید. . اگر قبلاً این کار را نکرده اید، bundletool
از مخزن GitHub دانلود کنید .
این بخش نحوه بسته بندی کدها و منابع کامپایل شده برنامه خود و نحوه استفاده از bundletool
از خط فرمان برای تبدیل آنها به یک برنامه Android App Bundle را شرح می دهد.
bundletool
نیاز دارد که اطلاعات خاصی در مورد پروژه برنامه شما، مانند مانیفست و منابع برنامه، در قالب پروتکل بافر Google باشد - که به عنوان "protobuf" نیز شناخته می شود و از پسوند فایل *.pb
استفاده می کند. Protobufs مکانیزمی بی طرف از زبان، پلتفرم خنثی و قابل توسعه را برای سریال سازی داده های ساختاریافته ارائه می دهد - شبیه به XML، اما کوچکتر، سریعتر و ساده تر.
با استفاده از آخرین نسخه AAPT2 از مخزن Google Maven، می توانید فایل مانیفست و جدول منابع برنامه خود را در قالب protobuf ایجاد کنید.
برای دانلود AAPT2 از مخزن Maven گوگل به صورت زیر عمل کنید:
- به com.android.tools.build > aapt2 در فهرست مخزن بروید.
- نام آخرین نسخه AAPT2 را کپی کنید.
نام نسخه ای را که کپی کرده اید در URL زیر وارد کنید و سیستم عامل مورد نظر خود را مشخص کنید: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version /aapt2- aapt2-version - [windows | linux | osx] .جار
به عنوان مثال، برای دانلود نسخه 3.2.0-alpha18-4804415 برای ویندوز، از https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ 3.2.0- استفاده کنید. alpha18-4804415 /aapt2- 3.2.0-alpha18-4804415 - windows .jar
در یک مرورگر به URL بروید—AAPT2 باید به زودی دانلود شود.
فایل JAR را که به تازگی دانلود کرده اید از بسته بندی خارج کنید.
از AAPT2 برای کامپایل منابع برنامه خود با دستور زیر استفاده کنید:
aapt2 compile \ project_root/module_root/src/main/res/drawable/Image1.png \ project_root/module_root/src/main/res/drawable/Image2.png \ -o compiled_resources/
در مرحله پیوند، جایی که AAPT2 منابع مختلف کامپایل شده شما را به یک APK پیوند می دهد، به AAPT2 دستور دهید تا مانیفست و منابع کامپایل شده برنامه شما را با گنجاندن پرچم --proto-format
به فرمت protobuf تبدیل کند، همانطور که در زیر نشان داده شده است:
aapt2 link --proto-format -o output.apk \ -I android_sdk/platforms/android_version/android.jar \ --manifest project_root/module_root/src/main/AndroidManifest.xml \ -R compiled_resources/*.flat \ --auto-add-overlay
سپس میتوانید محتوا را از APK خروجی استخراج کنید، مانند AndroidManifest.xml
، resources.pb
، و سایر فایلهای منبع برنامهتان - اکنون در قالب protobuf. به این فایلها نیاز دارید وقتی که bundletool
ورودی برای ساختن بسته نرمافزاری نیاز دارد، همانطور که در بخش زیر توضیح داده شده است.
قبل از اینکه bundletool
برای تولید یک بسته نرم افزاری برای برنامه خود استفاده کنید، ابتدا باید فایل های ZIP را ارائه کنید که هر کدام حاوی کد و منابع کامپایل شده برای یک ماژول برنامه خاص باشد. محتوا و سازماندهی فایل ZIP هر ماژول بسیار شبیه به فرمت Android App Bundle است. به عنوان مثال، شما باید یک فایل base.zip
برای ماژول پایه برنامه خود ایجاد کنید و محتویات آن را به صورت زیر سازماندهی کنید:
فایل یا دایرکتوری | توضیحات |
---|---|
manifest/AndroidManifest.xml | مانیفست ماژول در قالب protobuf. |
dex/... | دایرکتوری با یک یا چند فایل DEX کامپایل شده برنامه شما. این فایل ها باید به صورت زیر نامگذاری شوند: classes.dex ، classes2.dex ، classes3.dex و غیره. |
res/... | حاوی منابع ماژول در فرمت protobuf برای تمام تنظیمات دستگاه است. زیردایرکتوری ها و فایل ها باید شبیه به یک APK معمولی سازماندهی شوند. |
root/... , assets/... و lib/... | این دایرکتوری ها با مواردی که در بخش مربوط به قالب بسته برنامه Android توضیح داده شده است، یکسان هستند. |
resources.pb | جدول منابع برنامه شما در قالب protobuf. |
پس از اینکه فایل ZIP را برای هر ماژول برنامه خود آماده کردید، می توانید آن را به bundletool
ارسال کنید تا بسته نرم افزاری خود را بسازد، همانطور که در بخش زیر توضیح داده شده است.
برای ساختن بسته نرم افزاری خود، از دستور bundletool build-bundle
، مانند شکل زیر استفاده می کنید:
bundletool build-bundle --modules=base.zip --output=mybundle.aab
جدول زیر پرچمهای دستور build-bundle
با جزئیات بیشتری توضیح میدهد:
پرچم | توضیحات |
---|---|
--modules= path-to-base.zip , path-to-module2.zip , path-to-module3.zip | فهرستی از ماژول فایلهای ZIP bundletool که باید برای ساختن بسته نرم افزاری شما استفاده کند، مشخص میکند. |
--output= path-to-output.aab | مسیر و نام فایل خروجی فایل *.aab را مشخص می کند. |
--config= path-to-BundleConfig.json | مسیر یک فایل پیکربندی اختیاری را که میتوانید برای سفارشی کردن فرآیند ساخت از آن استفاده کنید، مشخص میکند. برای کسب اطلاعات بیشتر، بخش مربوط به سفارشیسازی تولید APK پاییندستی را ببینید. |
--metadata-file= target-bundle-path : local-file-path | به bundletool دستور می دهد تا یک فایل فراداده اختیاری را در بسته نرم افزاری شما بسته بندی کند. میتوانید از این فایل برای گنجاندن دادههایی مانند نگاشتهای ProGuard یا فهرست کامل فایلهای DEX برنامهتان استفاده کنید، که ممکن است برای سایر مراحل در زنجیره ابزار یا فروشگاه برنامه شما مفید باشد.target-bundle-path مسیری را نسبت به ریشه اپ باندل مشخص می کند که می خواهید فایل ابرداده در آن بسته بندی شود و local-file-path مسیر خود فایل ابرداده محلی را مشخص می کند. |
بستههای برنامه شامل فایل BundleConfig.pb
است که ابردادههایی را ارائه میکند که فروشگاههای برنامه، مانند Google Play، هنگام تولید فایلهای APK از بسته به آن نیاز دارند. اگرچه bundletool
این فایل را برای شما ایجاد میکند، میتوانید برخی از جنبههای فراداده را در یک فایل BundleConfig.json
پیکربندی کنید و آن را به دستور bundletool build-bundle
ارسال کنید— bundletool
بعداً این فایل را با نسخه protobuf موجود در هر بسته برنامه تبدیل و ادغام میکند.
برای مثال، میتوانید کنترل کنید که کدام دسته از APKهای پیکربندی فعال یا غیرفعال شوند. مثال زیر از یک فایل BundleConfig.json
، APKهای پیکربندی را غیرفعال میکند که هر کدام زبان متفاوتی را هدف قرار میدهند (یعنی منابع همه زبانها در پایه یا ویژگیهای APK مربوطه شامل میشوند):
{
"optimizations": {
"splitsConfig": {
"splitDimension": [{
"value": "LANGUAGE",
"negate": true
}]
}
}
}
در فایل BundleConfig.json
خود، همچنین میتوانید نوع فایلهایی را که هنگام بستهبندی APK با استفاده از الگوهای glob غیرفشرده باقی میمانند، به شرح زیر مشخص کنید:
{
"compression": {
"uncompressedGlob": ["res/raw/**", "assets/**.uncompressed"]
}
}
به خاطر داشته باشید که بهطور پیشفرض، bundletool
کتابخانههای بومی برنامه شما (در اندروید 6.0 یا بالاتر) و جدول منابع ( resources.arsc
) را فشرده نمیکند. برای توضیح کامل آنچه می توانید در BundleConfig.json
خود پیکربندی کنید، فایل bundletool
config.proto
را که با استفاده از دستور Proto3 نوشته شده است، بررسی کنید.
اگر یک بسته نرم افزاری ساخته و امضا کرده اید، از bundletool
برای تولید فایل های APK و استقرار آنها در دستگاه استفاده کنید .
برای امضای برنامه خود نیازی به اندروید استودیو ندارید. میتوانید با استفاده از apksigner
برای فایلهای APK یا jarsigner
برای بستههای برنامه، برنامه خود را از خط فرمان امضا کنید، یا Gradle را پیکربندی کنید تا در حین ساخت آن را برای شما امضا کند. در هر صورت، ابتدا باید یک کلید خصوصی با استفاده از keytool
ایجاد کنید، همانطور که در زیر نشان داده شده است:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
مثال بالا از شما میخواهد پسوردهای ذخیرهسازی کلید و کلید، و فیلدهای «نام متمایز» را برای کلیدتان انتخاب کنید. سپس ذخیرهسازی کلید را بهعنوان فایلی به نام my-release-key.jks
تولید میکند و آن را در فهرست فعلی ذخیره میکند (شما میتوانید آن را به هر کجا که میخواهید منتقل کنید). فروشگاه کلید حاوی یک کلید است که 10000 روز اعتبار دارد.
اکنون میتوانید APK یا بسته نرمافزاری خود را به صورت دستی امضا کنید، یا Gradle را پیکربندی کنید تا برنامه شما را در طول فرآیند ساخت امضا کند، همانطور که در بخشهای زیر توضیح داده شده است.
اگر میخواهید یک بسته برنامه را از خط فرمان امضا کنید، میتوانید از jarsigner
استفاده کنید. اگر به جای آن می خواهید یک APK را امضا کنید، باید از zipalign
و apksigner
همانطور که در زیر توضیح داده شده است استفاده کنید.
- یک خط فرمان را از Android Studio باز کنید، View > Tool Windows > Terminal را انتخاب کنید و به فهرستی که APK امضا نشده شما در آن قرار دارد بروید.
APK بدون امضا را با استفاده از
zipalign
تراز کنید:zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
zipalign
تضمین می کند که تمام داده های فشرده نشده با یک تراز بایتی خاص نسبت به شروع فایل شروع می شود، که ممکن است میزان RAM مصرف شده توسط یک برنامه را کاهش دهد.APK خود را با کلید خصوصی خود با استفاده از
apksigner
امضا کنید:apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
این مثال، APK امضا شده را در
my-app-release.apk
پس از امضای آن با یک کلید خصوصی و گواهی که در یک فایل KeyStore ذخیره میشود، خروجی میدهد:my-release-key.jks
.ابزار
apksigner
از سایر گزینههای امضا، از جمله امضای یک فایل APK با استفاده از کلید خصوصی جداگانه و فایلهای گواهی، و امضای APK با استفاده از چندین امضاکننده پشتیبانی میکند. برای جزئیات بیشتر، به مرجعapksigner
مراجعه کنید.توجه: برای استفاده از ابزار
apksigner
، باید نسخه 24.0.3 یا بالاتر Android SDK Build Tools را نصب کرده باشید. می توانید این بسته را با استفاده از SDK Manager به روز کنید.تأیید کنید که APK شما امضا شده است:
apksigner verify my-app-release.apk
فایل build.gradle.kts
در سطح ماژول را باز کنید و بلوک signingConfigs {}
را با ورودیهای storeFile
، storePassword
، keyAlias
و keyPassword
اضافه کنید، و سپس آن شی را به ویژگی signingConfig
در نوع ساخت خود منتقل کنید. به عنوان مثال:
android { ... defaultConfig { ... } signingConfigs { create("release") { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile = file("my-release-key.jks") storePassword = "password" keyAlias = "my-alias" keyPassword = "password" } } buildTypes { getByName("release") { signingConfig = signingConfigs.getByName("release") ... } } }
android { ... defaultConfig { ... } signingConfigs { release { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile file("my-release-key.jks") storePassword "password" keyAlias "my-alias" keyPassword "password" } } buildTypes { release { signingConfig signingConfigs.release ... } } }
اکنون، وقتی برنامه خود را با فراخوانی یک وظیفه Gradle میسازید، Gradle برنامه شما را امضا میکند (و zipalign را اجرا میکند) برای شما.
علاوه بر این، از آنجایی که نسخه انتشار را با کلید امضای خود پیکربندی کرده اید، وظیفه "نصب" برای آن نوع ساخت در دسترس است. بنابراین میتوانید APK انتشار را روی یک شبیهساز یا دستگاه با کار installRelease
بسازید، تراز کنید، امضا کنید و نصب کنید.
برنامه ای که با کلید خصوصی شما امضا شده است برای توزیع آماده است، اما ابتدا باید درباره نحوه انتشار برنامه خود بیشتر بخوانید و چک لیست راه اندازی Google Play را مرور کنید.