مدل سرویسدهی برنامه Google Play از Android App Bundles برای تولید و ارائه فایلهای APK بهینهشده برای پیکربندی دستگاه هر کاربر استفاده میکند، بنابراین کاربران فقط کد و منابعی را که برای اجرای برنامه شما نیاز دارند دانلود میکنند.
Play Feature Delivery از قابلیتهای پیشرفته بستههای برنامه استفاده میکند، که به برخی از ویژگیهای برنامه شما امکان میدهد به صورت مشروط تحویل داده شوند یا در صورت درخواست دانلود شوند. برای انجام این کار، ابتدا باید این ویژگی ها را از برنامه پایه خود به ماژول های ویژگی جدا کنید.
پیکربندی ساخت ماژول ویژگی
هنگامی که یک ماژول ویژگی جدید با استفاده از Android Studio ایجاد می کنید، IDE افزونه Gradle زیر را در فایل build.gradle
ماژول اعمال می کند.
// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.
plugins {
id 'com.android.dynamic-feature'
}
بسیاری از ویژگیهای موجود در پلاگین برنامه استاندارد برای ماژول ویژگی شما نیز موجود است. بخشهای زیر ویژگیهایی را که باید و نباید در پیکربندی ساخت ماژول ویژگی خود بگنجانید، توضیح میدهند.
مواردی که نباید در پیکربندی ساخت ماژول ویژگی گنجانده شود
از آنجا که هر ماژول ویژگی به ماژول پایه بستگی دارد، پیکربندی های خاصی را نیز به ارث می برد. بنابراین، باید موارد زیر را در فایل build.gradle
ماژول ویژگی حذف کنید:
- پیکربندیهای امضا: بستههای برنامه با استفاده از پیکربندیهای امضایی که در ماژول پایه مشخص کردهاید امضا میشوند.
- ویژگی
minifyEnabled
: شما می توانید کوچک کردن کد را برای کل پروژه برنامه خود فقط از پیکربندی ساخت ماژول پایه فعال کنید . بنابراین، شما باید این ویژگی را از ماژول های ویژگی حذف کنید. با این حال، می توانید قوانین ProGuard اضافی را برای هر ماژول ویژگی مشخص کنید . -
versionCode
andversionName
: هنگام ساخت بسته نرم افزاری، Gradle از اطلاعات نسخه برنامه که ماژول پایه ارائه می کند استفاده می کند. شما باید این ویژگی ها را از فایلbuild.gradle
ماژول ویژگی خود حذف کنید.
ارتباطی با ماژول پایه برقرار کنید
هنگامی که Android Studio ماژول ویژگی شما را ایجاد می کند، با افزودن ویژگی android.dynamicFeatures
به فایل build.gradle
ماژول پایه، آن را برای ماژول پایه قابل مشاهده می کند، همانطور که در زیر نشان داده شده است:
// In the base module’s build.gradle file.
android {
...
// Specifies feature modules that have a dependency on
// this base module.
dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}
علاوه بر این، Android Studio شامل ماژول پایه به عنوان یک ماژول ویژگی است، همانطور که در زیر نشان داده شده است:
// In the feature module’s build.gradle file:
...
dependencies {
...
// Declares a dependency on the base module, ':app'.
implementation project(':app')
}
قوانین اضافی ProGuard را مشخص کنید
اگرچه فقط پیکربندی ساخت ماژول پایه ممکن است کوچک کردن کد را برای پروژه برنامه شما فعال کند، میتوانید قوانین ProGuard سفارشی را با استفاده از ویژگی proguardFiles با استفاده از ویژگی proguardFiles
، مطابق زیر ارائه کنید.
android.buildTypes {
release {
// You must use the following property to specify additional ProGuard
// rules for feature modules.
proguardFiles 'proguard-rules-dynamic-features.pro'
}
}
توجه داشته باشید که این قوانین ProGuard با قوانین سایر ماژول ها (از جمله ماژول پایه) در زمان ساخت ادغام می شوند. بنابراین، در حالی که هر ماژول ویژگی ممکن است مجموعه جدیدی از قوانین را مشخص کند، این قوانین برای همه ماژول های پروژه برنامه اعمال می شود.
برنامه خود را مستقر کنید
در حالی که در حال توسعه برنامه خود با پشتیبانی از ماژولهای ویژگی هستید، میتوانید با انتخاب Run > Run از نوار منو (یا با کلیک بر روی Run) برنامه خود را مانند حالت عادی روی دستگاه متصل نصب کنید. در نوار ابزار).
اگر پروژه برنامه شما شامل یک یا چند ماژول ویژگی است، میتوانید با تغییر پیکربندی اجرا/اشکالزدایی موجود خود، انتخاب کنید که چه ویژگیهایی در هنگام استقرار برنامهتان شامل شود:
- از نوار منو Run > Edit Configurations را انتخاب کنید.
- از پانل سمت چپ کادر گفتگوی Run/Debug Configurations ، پیکربندی برنامه Android مورد نظر خود را انتخاب کنید.
- در بخش ویژگیهای پویا برای استقرار در برگه عمومی ، کادر کنار هر ماژول ویژگی را که میخواهید هنگام استقرار برنامه خود اضافه کنید علامت بزنید.
- روی OK کلیک کنید.
بهطور پیشفرض، Android Studio برنامه شما را با استفاده از بستههای برنامه برای استقرار برنامه شما اجرا نمیکند. در عوض، IDE فایلهای APK را در دستگاه شما میسازد و نصب میکند که برای سرعت استقرار بهجای اندازه APK بهینهسازی شدهاند. برای پیکربندی Android Studio برای ساخت و استقرار فایلهای APK و تجربیات فوری از یک بسته برنامه، پیکربندی run/debug خود را تغییر دهید .
از ماژول های ویژگی برای تحویل سفارشی استفاده کنید
یکی از مزایای منحصر به فرد ماژول های ویژگی، امکان سفارشی کردن نحوه و زمان بارگیری ویژگی های مختلف برنامه شما در دستگاه های دارای Android نسخه 5.0 (سطح API 21) یا بالاتر است. به عنوان مثال، برای کاهش حجم دانلود اولیه برنامه خود، میتوانید ویژگیهای خاصی را پیکربندی کنید تا در صورت نیاز یا فقط توسط دستگاههایی که از قابلیتهای خاصی پشتیبانی میکنند، مانند توانایی عکسبرداری یا پشتیبانی از ویژگیهای واقعیت افزوده، دانلود شوند.
اگر چه زمانی که برنامه خود را به عنوان یک بسته برنامه آپلود میکنید، بهطور پیشفرض دانلودهای بسیار بهینهسازی شدهای دریافت میکنید، گزینههای تحویل ویژگی پیشرفتهتر و قابل تنظیمتر نیاز به پیکربندی و مدولار کردن ویژگیهای برنامهتان با استفاده از ماژولهای ویژگی دارند. یعنی ماژولهای ویژگی بلوکهای ساختمانی را برای ایجاد ویژگیهای ماژولار فراهم میکنند که میتوانید برای دانلود هر کدام در صورت نیاز پیکربندی کنید.
اپلیکیشنی را در نظر بگیرید که به کاربران شما امکان خرید و فروش کالا در یک بازار آنلاین را می دهد. شما می توانید به طور منطقی هر یک از عملکردهای زیر برنامه را در ماژول های ویژگی جداگانه مدولار کنید:
- ورود به حساب کاربری و ایجاد
- گشت و گذار در بازار
- قرار دادن یک کالا برای فروش
- پردازش پرداخت ها
جدول زیر گزینههای تحویل متفاوتی را که ماژولها را پشتیبانی میکنند، و نحوه استفاده از آنها برای بهینهسازی حجم دانلود اولیه برنامه نمونه بازار را توضیح میدهد.
گزینه تحویل | رفتار | نمونه مورد استفاده | شروع کردن |
---|---|---|---|
تحویل در زمان نصب | ماژول های ویژگی که هیچ یک از گزینه های تحویل توضیح داده شده در بالا را پیکربندی نمی کنند، به طور پیش فرض در هنگام نصب برنامه دانلود می شوند. این یک رفتار مهم است زیرا به این معنی است که می توانید گزینه های تحویل پیشرفته را به تدریج اتخاذ کنید. برای مثال، میتوانید از مدولار کردن ویژگیهای برنامه خود بهره ببرید و تحویل درخواستی را تنها پس از اجرای کامل دانلودهای درخواستی با استفاده از کتابخانه Play Feature Delivery فعال کنید. علاوه بر این، برنامه شما میتواند در فرصتی دیگر درخواست حذف نصب ویژگیها را بدهد. بنابراین، اگر در نصب برنامه به ویژگیهای خاصی نیاز دارید، اما نه بعد از آن، میتوانید با درخواست حذف این ویژگی از دستگاه، اندازه نصب را کاهش دهید. | اگر برنامه دارای فعالیتهای آموزشی خاصی است، مانند راهنمای تعاملی در مورد نحوه خرید و فروش اقلام در بازار، میتوانید به طور پیشفرض آن ویژگی را در نصب برنامه اضافه کنید. با این حال، برای کاهش اندازه نصب شده برنامه، برنامه می تواند پس از اتمام آموزش، درخواست حذف ویژگی را داشته باشد. | برنامه خود را با استفاده از ماژول های ویژگی که هیچ گزینه تحویل پیشرفته ای را پیکربندی نمی کند، مدولار کنید . برای یادگیری نحوه کاهش اندازه نصب شده برنامه خود با حذف ماژولهای ویژگی خاصی که ممکن است کاربر دیگر به آنها نیاز نداشته باشد، مدیریت ماژولهای نصب شده را بخوانید. |
تحویل درخواستی | به برنامه شما اجازه میدهد تا ماژولهای ویژگی را در صورت نیاز درخواست و دانلود کند. | اگر تنها 20 درصد از کسانی که از برنامه بازار استفاده می کنند مواردی را برای فروش پست می کنند، یک استراتژی خوب برای کاهش حجم دانلود اولیه برای اکثر کاربران این است که قابلیت عکس برداری، از جمله توضیحات مورد، و قرار دادن یک مورد برای فروش را به عنوان دانلود بر حسب تقاضا در دسترس قرار دهد. به این معنا که میتوانید ماژول ویژگی را برای عملکرد فروش برنامه پیکربندی کنید تا فقط زمانی دانلود شود که کاربر علاقهای به قرار دادن اقلام برای فروش در بازار نشان دهد. علاوه بر این، اگر کاربر پس از مدت زمان معینی دیگر مواردی را نمی فروشد، برنامه می تواند با درخواست حذف این ویژگی، اندازه نصب شده خود را کاهش دهد. | یک ماژول ویژگی ایجاد کنید و در صورت تحویل درخواست پیکربندی کنید . سپس برنامه شما میتواند از کتابخانه تحویل ویژگی Play برای درخواست دانلود ماژول در صورت درخواست استفاده کند. |
تحویل مشروط | به شما امکان میدهد برخی از الزامات دستگاه کاربر، مانند ویژگیهای سختافزار، محلی، و حداقل سطح API را مشخص کنید تا مشخص کنید آیا یک ویژگی مدولار شده در نصب برنامه دانلود میشود یا خیر. | اگر برنامه بازار دسترسی جهانی دارد، ممکن است لازم باشد از روشهای پرداختی پشتیبانی کنید که فقط در مناطق خاص یا افراد محلی محبوب هستند. به منظور کاهش حجم دانلود اولیه برنامه، میتوانید ماژولهای ویژگی جداگانه برای پردازش انواع خاصی از روشهای پرداخت ایجاد کنید و آنها را به صورت مشروط بر روی دستگاه کاربر بر اساس محلی ثبتشدهاش نصب کنید. | یک ماژول ویژگی ایجاد کنید و تحویل مشروط را پیکربندی کنید . |
تحویل فوری | Google Play Instant به کاربران امکان می دهد بدون نیاز به نصب برنامه در دستگاه خود با برنامه شما تعامل داشته باشند. در عوض، آنها میتوانند برنامه شما را از طریق دکمه «اکنون امتحان کنید» در فروشگاه Google Play یا نشانی اینترنتی که ایجاد میکنید تجربه کنند. این شکل از ارائه محتوا افزایش تعامل با برنامه را برای شما آسان تر می کند. با تحویل فوری، میتوانید از Google Play Instant استفاده کنید تا به کاربران خود اجازه دهید فوراً ویژگیهای خاصی از برنامه شما را بدون نصب تجربه کنند. | بازی ای را در نظر بگیرید که چند سطح اول بازی را در یک ماژول ویژگی سبک وزن شامل می شود. میتوانید آن ماژول را فوراً فعال کنید تا کاربران بتوانند فوراً بازی را از طریق پیوند URL یا دکمه «اکنون امتحان کنید» بدون نصب برنامه تجربه کنند. | یک ماژول ویژگی ایجاد کنید و تحویل فوری را پیکربندی کنید . سپس برنامه شما میتواند از کتابخانه تحویل ویژگی Play برای درخواست دانلود ماژول در صورت درخواست استفاده کند. به خاطر داشته باشید، ماژولار کردن ویژگی های برنامه خود با استفاده از ماژول های ویژگی تنها اولین قدم است. برای پشتیبانی از Google Play Instant، اندازه دانلود ماژول پایه برنامه شما و یک ویژگی فعال فوری مشخص باید محدودیتهای اندازه دقیق را رعایت کند. برای کسب اطلاعات بیشتر، فعال کردن تجربههای فوری با کاهش اندازه برنامه یا بازی را بخوانید. |
ساخت URI برای یک منبع
اگر می خواهید با استفاده از URI به منبع ذخیره شده در یک ماژول ویژگی دسترسی داشته باشید، در اینجا نحوه ایجاد URI منبع ماژول ویژگی با استفاده از Uri.Builder()
آورده شده است:
کاتلین
val uri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded .appendPath(resources.getResourceTypeName(resId)) .appendPath(String.format("%s:%s", resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace. resources.getResourceEntryName(resId) )) .build()
جاوا
String uri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded .appendPath(resources.getResourceTypeName(resId)) .appendPath(String.format("%s:%s", resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace. resources.getResourceEntryName(resId) )) .build().toString();
هر قسمت از مسیر منبع در زمان اجرا ساخته میشود و اطمینان حاصل میکند که فضای نام صحیح پس از بارگیری APKهای تقسیمشده ایجاد میشود.
به عنوان نمونه ای از نحوه تولید URI، فرض کنید یک برنامه و ماژول های ویژگی با این نام ها دارید:
- نام بسته برنامه:
com.example.my_app_package
- نام بسته منابع ویژگی:
com.example.my_app_package.my_dynamic_feature
اگر resId
در قطعه کد بالا به یک منبع فایل خام به نام "my_video" در ماژول ویژگی شما اشاره دارد، کد Uri.Builder()
بالا خروجی زیر را خواهد داشت:
android.resource://com.example.my_app_package/raw/com.example.my_app_package.my_dynamic_feature:my_video
این URI سپس می تواند توسط برنامه شما برای دسترسی به منبع ماژول ویژگی استفاده شود.
برای اعتبارسنجی مسیرها در URI خود، میتوانید از APK Analyzer برای بررسی ماژول ویژگی APK خود و تعیین نام بسته استفاده کنید:
ملاحظات مربوط به ماژول های ویژگی
با ماژولهای ویژگی، میتوانید سرعت ساخت و سرعت مهندسی را بهبود ببخشید و بهطور گستردهای برای کاهش اندازه برنامه، تحویل ویژگیهای برنامهتان را سفارشی کنید. با این حال، برخی از محدودیت ها و موارد لبه وجود دارد که هنگام استفاده از ماژول های ویژگی باید در نظر داشت:
- نصب 50 یا بیشتر ماژول ویژگی روی یک دستگاه، از طریق تحویل مشروط یا بر اساس تقاضا، ممکن است منجر به مشکلات عملکرد شود. ماژولهای زمان نصب، که بهعنوان قابل جابجایی پیکربندی نشدهاند، بهطور خودکار در ماژول پایه قرار میگیرند و تنها به عنوان یک ماژول ویژگی در هر دستگاه به حساب میآیند.
- تعداد ماژولهایی را که بهعنوان قابل جابجایی برای تحویل در زمان نصب پیکربندی میکنید به 10 یا کمتر محدود کنید. در غیر این صورت، زمان دانلود و نصب برنامه شما ممکن است افزایش یابد.
- فقط دستگاههای دارای Android نسخه 5.0 (سطح API 21) و بالاتر از دانلود و نصب ویژگیهای درخواستی پشتیبانی میکنند. برای در دسترس قرار دادن ویژگی خود در نسخه های قبلی Android، هنگام ایجاد یک ماژول ویژگی، Fusing را فعال کنید.
- SplitCompat را فعال کنید تا برنامه شما به ماژول های ویژگی بارگیری شده دسترسی داشته باشد که در صورت تقاضا تحویل داده می شوند.
- ماژولهای ویژگی نباید فعالیتهایی را در مانیفست خود با