نمای کلی تحویل ویژگی Play

مدل سرویس‌دهی برنامه 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 ماژول ویژگی حذف کنید:

ارتباطی با ماژول پایه برقرار کنید

هنگامی که 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) برنامه خود را مانند حالت عادی روی دستگاه متصل نصب کنید. در نوار ابزار).

اگر پروژه برنامه شما شامل یک یا چند ماژول ویژگی است، می‌توانید با تغییر پیکربندی اجرا/اشکال‌زدایی موجود خود، انتخاب کنید که چه ویژگی‌هایی در هنگام استقرار برنامه‌تان شامل شود:

  1. از نوار منو Run > Edit Configurations را انتخاب کنید.
  2. از پانل سمت چپ کادر گفتگوی Run/Debug Configurations ، پیکربندی برنامه Android مورد نظر خود را انتخاب کنید.
  3. در بخش ویژگی‌های پویا برای استقرار در برگه عمومی ، کادر کنار هر ماژول ویژگی را که می‌خواهید هنگام استقرار برنامه خود اضافه کنید علامت بزنید.
  4. روی 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 خود و تعیین نام بسته استفاده کنید:

تصویری از APK Analyzer که محتویات یک فایل منبع کامپایل شده را بررسی می کند.

شکل 2. از APK Analyzer برای بررسی نام بسته در یک فایل منبع کامپایل شده استفاده کنید.

ملاحظات مربوط به ماژول های ویژگی

با ماژول‌های ویژگی، می‌توانید سرعت ساخت و سرعت مهندسی را بهبود ببخشید و به‌طور گسترده‌ای برای کاهش اندازه برنامه، تحویل ویژگی‌های برنامه‌تان را سفارشی کنید. با این حال، برخی از محدودیت ها و موارد لبه وجود دارد که هنگام استفاده از ماژول های ویژگی باید در نظر داشت:

  • نصب 50 یا بیشتر ماژول ویژگی روی یک دستگاه، از طریق تحویل مشروط یا بر اساس تقاضا، ممکن است منجر به مشکلات عملکرد شود. ماژول‌های زمان نصب، که به‌عنوان قابل جابجایی پیکربندی نشده‌اند، به‌طور خودکار در ماژول پایه قرار می‌گیرند و تنها به عنوان یک ماژول ویژگی در هر دستگاه به حساب می‌آیند.
  • تعداد ماژول‌هایی را که به‌عنوان قابل جابجایی برای تحویل در زمان نصب پیکربندی می‌کنید به 10 یا کمتر محدود کنید. در غیر این صورت، زمان دانلود و نصب برنامه شما ممکن است افزایش یابد.
  • فقط دستگاه‌های دارای Android نسخه 5.0 (سطح API 21) و بالاتر از دانلود و نصب ویژگی‌های درخواستی پشتیبانی می‌کنند. برای در دسترس قرار دادن ویژگی خود در نسخه های قبلی Android، هنگام ایجاد یک ماژول ویژگی ، Fusing را فعال کنید.
  • SplitCompat را فعال کنید تا برنامه شما به ماژول های ویژگی بارگیری شده دسترسی داشته باشد که در صورت تقاضا تحویل داده می شوند.
  • ماژول‌های ویژگی نباید فعالیت‌هایی را در مانیفست خود با android:exported true کنند. دلیل آن این است که هیچ تضمینی وجود ندارد که دستگاه زمانی که برنامه دیگری تلاش می کند فعالیت را راه اندازی کند، ماژول ویژگی را دانلود کرده باشد. علاوه بر این، برنامه شما باید قبل از تلاش برای دسترسی به کد و منابع آن، تأیید کند که یک ویژگی دانلود شده است. برای کسب اطلاعات بیشتر، مدیریت ماژول های نصب شده را بخوانید.
  • از آنجایی که «تحویل ویژگی Play» از شما می‌خواهد که برنامه خود را با استفاده از بسته برنامه منتشر کنید، مطمئن شوید که از مشکلات شناخته شده بسته برنامه آگاه هستید.

مرجع مانیفست ماژول ویژگی

هنگام ایجاد یک ماژول ویژگی جدید با استفاده از Android Studio، IDE شامل بسیاری از ویژگی‌های مانیفست است که ماژول برای رفتار مانند یک ماژول ویژگی به آن نیاز دارد. علاوه بر این، برخی از ویژگی‌ها در زمان کامپایل توسط سیستم ساخت تزریق می‌شوند، بنابراین نیازی نیست خودتان آنها را مشخص یا تغییر دهید. جدول زیر ویژگی های مانیفست را توضیح می دهد که برای ویژگی های ماژول ها مهم هستند.

صفت توضیحات
<manifest
...
این بلوک <manifest> معمولی شماست.
xmlns:dist="http://schemas.android.com/apk/distribution" یک dist: فضای نام XML که در زیر بیشتر توضیح داده شده است.
split=" split_name " وقتی Android Studio دسته برنامه شما را می‌سازد، این ویژگی را برای شما در بر می‌گیرد. بنابراین، شما نباید خودتان این ویژگی را وارد یا تغییر دهید .

نام ماژول را که برنامه شما هنگام درخواست ماژول درخواستی با استفاده از کتابخانه تحویل ویژگی Play مشخص می کند، تعیین می کند.

چگونه Gradle مقدار این ویژگی را تعیین می کند:

به‌طور پیش‌فرض، وقتی یک ماژول ویژگی را با استفاده از Android Studio ایجاد می‌کنید، IDE از چیزی که شما به‌عنوان نام ماژول خود مشخص کرده‌اید، استفاده می‌کند تا ماژول را به عنوان یک پروژه فرعی Gradle در فایل تنظیمات Gradle شما شناسایی کند.

هنگامی که بسته نرم افزاری خود را می سازید، Gradle از آخرین عنصر مسیر زیر پروژه برای تزریق این ویژگی مانیفست در مانیفست ماژول استفاده می کند. به عنوان مثال، اگر یک ماژول ویژگی جدید در پوشه MyAppProject/features/ ایجاد کنید و "dynamic_feature1" را به عنوان نام ماژول آن مشخص کنید، IDE ':features:dynamic_feature1' به عنوان یک پروژه فرعی در فایل settings.gradle شما اضافه می کند. هنگام ساختن بسته نرم افزاری، Gradle سپس <manifest split="dynamic_feature1"> را در مانیفست ماژول تزریق می کند.

android:isFeatureSplit="true | false"> وقتی Android Studio دسته برنامه شما را می‌سازد، این ویژگی را برای شما در بر می‌گیرد. بنابراین، شما نباید این ویژگی را به صورت دستی اضافه یا تغییر دهید .

مشخص می کند که این ماژول یک ماژول ویژگی است. مانیفست‌ها در ماژول پایه و APKهای پیکربندی یا این ویژگی را حذف می‌کنند یا آن را روی false تنظیم می‌کنند.

<dist:module این عنصر XML جدید ویژگی هایی را تعریف می کند که نحوه بسته بندی و توزیع ماژول را به عنوان APK تعیین می کند.
dist:instant="true | false" مشخص می کند که آیا ماژول باید از طریق Google Play Instant به عنوان یک تجربه فوری در دسترس باشد یا خیر.

اگر برنامه شما شامل یک یا چند ماژول ویژگی با قابلیت فوری است، باید ماژول پایه را نیز به صورت فوری فعال کنید. وقتی از Android Studio نسخه 3.5 یا بالاتر استفاده می‌کنید، IDE این کار را برای شما انجام می‌دهد، وقتی که یک ماژول ویژگی فعال فوری ایجاد می‌کنید .

شما نمی توانید این عنصر XML را روی true تنظیم کنید، در حالی که <dist:on-demand/> را نیز تنظیم می کنید. با این حال، همچنان می‌توانید با استفاده از کتابخانه تحویل ویژگی Play، ماژول‌های ویژگی فعال فوری خود را به‌عنوان تجربه‌های فوری درخواست کنید. هنگامی که کاربر برنامه شما را دانلود و نصب می کند ، دستگاه به طور پیش فرض ماژول های ویژگی فعال فوری برنامه شما را به همراه APK پایه دانلود و نصب می کند.

dist:title="@string/feature_name" عنوان کاربر را برای ماژول مشخص می کند. به عنوان مثال، دستگاه ممکن است این عنوان را هنگامی که درخواست تأیید دانلود می کند، نمایش دهد.

شما باید منبع رشته را برای این عنوان در فایل module_root /src/ source_set /res/values/strings.xml ماژول پایه قرار دهید.

<dist:fusing dist:include="true | false" />
</dist:module>
مشخص می‌کند که آیا ماژول در چند APK که دستگاه‌های دارای Android نسخه 4.4 (سطح API 20) و پایین‌تر را هدف قرار می‌دهند، قرار گیرد یا خیر.

به‌علاوه، وقتی از bundletool برای تولید فایل‌های APK از یک بسته برنامه استفاده می‌کنید ، فقط ماژول‌های ویژگی‌ای که این ویژگی را روی true تنظیم می‌کنند در APK جهانی گنجانده می‌شوند - که یک APK یکپارچه است که شامل کد و منابع برای همه پیکربندی‌های دستگاهی است که برنامه شما پشتیبانی می‌کند.

<dist:delivery> همانطور که در زیر نشان داده شده است، گزینه هایی را در بر می گیرد که تحویل ماژول را سفارشی می کند. به خاطر داشته باشید، هر ماژول ویژگی باید تنها یک نوع از این گزینه های تحویل سفارشی را پیکربندی کند.
<dist:install-time> مشخص می کند که ماژول باید در زمان نصب در دسترس باشد. این رفتار پیش‌فرض برای ماژول‌های ویژگی است که نوع دیگری از گزینه تحویل سفارشی را مشخص نمی‌کنند.

برای کسب اطلاعات بیشتر درباره دانلودهای زمان نصب، پیکربندی تحویل زمان نصب را بخوانید.

این گره همچنین می‌تواند شرایطی را مشخص کند که ماژول را به دستگاه‌هایی محدود می‌کند که شرایط خاصی را برآورده می‌کنند، مانند ویژگی‌های دستگاه، کشور کاربر یا حداقل سطح API. برای کسب اطلاعات بیشتر، پیکربندی تحویل مشروط را بخوانید.

<dist:removable dist:value="true | false" />

وقتی تنظیم نشود یا روی false تنظیم شود، bundletool هنگام تولید فایل‌های APK تقسیم‌شده از بسته، ماژول‌های زمان نصب را در ماژول پایه ترکیب می‌کند. از آنجایی که در نتیجه ادغام فایل‌های APK تقسیم‌شده کمتری وجود خواهد داشت، این تنظیم ممکن است عملکرد برنامه شما را بهبود بخشد.

وقتی removable روی true تنظیم شود: ماژول های زمان نصب در ماژول پایه ترکیب نمی شوند. اگر می‌خواهید ماژول‌ها را در آینده حذف کنید روی true تنظیم کنید. با این حال، پیکربندی بیش از حد ماژول ها برای قابل جابجایی ممکن است زمان نصب برنامه شما را افزایش دهد.

پیش فرض ها به false . تنها زمانی لازم است که این مقدار را در مانیفست تنظیم کنید که می‌خواهید فیوزینگ را برای یک ماژول ویژگی غیرفعال کنید.

توجه: این ویژگی فقط در صورت استفاده از پلاگین Android Gradle 4.2 یا هنگام استفاده از bundletool v1.0 از خط فرمان در دسترس است.

</dist:install-time>
<dist:on-demand/> مشخص می‌کند که ماژول باید به‌عنوان دانلود درخواستی در دسترس باشد. یعنی ماژول در زمان نصب در دسترس نیست، اما برنامه شما ممکن است بعداً درخواست دانلود آن را بدهد.

برای اطلاعات بیشتر در مورد دانلودهای درخواستی، پیکربندی تحویل درخواستی را بخوانید.

</dist:delivery>
<application
android:hasCode ="true | false">
...
</application>
اگر ماژول ویژگی هیچ فایل DEX تولید نمی کند - یعنی حاوی هیچ کدی نیست که بعداً به فرمت فایل DEX کامپایل شود - باید موارد زیر را انجام دهید (در غیر این صورت، ممکن است خطاهای زمان اجرا دریافت کنید):
  1. android:hasCode را در مانیفست ماژول ویژگی روی "false" تنظیم کنید.
  2. موارد زیر را به مانیفست ماژول پایه خود اضافه کنید:
    <application
      android:hasCode="true"
      tools:replace="android:hasCode">
      ...
    </application>

منابع اضافی

برای کسب اطلاعات بیشتر در مورد استفاده از ماژول های ویژگی، منابع زیر را امتحان کنید.

پست های وبلاگ

ویدیوها

شرایط خدمات و ایمنی داده ها

با دسترسی یا استفاده از کتابخانه تحویل ویژگی Play، با شرایط خدمات کیت توسعه نرم‌افزار Play Core موافقت می‌کنید. لطفاً قبل از دسترسی به کتابخانه همه شرایط و سیاست های قابل اجرا را بخوانید و درک کنید.

ایمنی داده ها

کتابخانه‌های Play Core رابط زمان اجرا برنامه شما با فروشگاه Google Play هستند. به این ترتیب، هنگامی که از Play Core در برنامه خود استفاده می‌کنید، فروشگاه Play فرآیندهای خود را اجرا می‌کند، که شامل مدیریت داده‌ها مطابق با شرایط خدمات Google Play می‌شود. اطلاعات زیر نحوه مدیریت داده‌ها را کتابخانه‌های Play Core برای پردازش درخواست‌های خاص از برنامه شما توضیح می‌دهد.

API زبان های دیگر

داده های جمع آوری شده در مورد استفاده لیست زبان های نصب شده
هدف از جمع آوری داده ها داده های جمع آوری شده برای ارائه نسخه های زبان های مختلف برنامه و حفظ زبان های نصب شده پس از به روز رسانی برنامه استفاده می شود.
رمزگذاری داده ها داده ها رمزگذاری شده است.
به اشتراک گذاری داده ها داده ها به هیچ شخص ثالثی منتقل نمی شود.
حذف داده ها داده ها پس از یک دوره نگهداری ثابت حذف می شوند.

بازی تحویل ویژگی

داده های جمع آوری شده در مورد استفاده فراداده دستگاه
نسخه برنامه
هدف از جمع آوری داده ها داده های جمع آوری شده برای ارائه ماژول مناسب به دستگاه و حفظ ماژول های نصب شده پس از به روز رسانی و پشتیبان گیری و بازیابی استفاده می شود.
رمزگذاری داده ها داده ها رمزگذاری شده است.
به اشتراک گذاری داده ها داده ها به هیچ شخص ثالثی منتقل نمی شود.
حذف داده ها داده ها پس از یک دوره نگهداری ثابت حذف می شوند.

در حالی که هدف ما شفاف‌سازی تا حد امکان است، شما تنها مسئول تصمیم‌گیری در مورد نحوه پاسخگویی به فرم بخش ایمنی داده‌های Google Play در رابطه با جمع‌آوری، اشتراک‌گذاری و شیوه‌های امنیتی داده‌های کاربر برنامه خود هستید.

،

مدل سرویس‌دهی برنامه 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 ماژول ویژگی حذف کنید:

ارتباطی با ماژول پایه برقرار کنید

هنگامی که 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) برنامه خود را مانند حالت عادی روی دستگاه متصل نصب کنید. در نوار ابزار).

اگر پروژه برنامه شما شامل یک یا چند ماژول ویژگی است، می‌توانید با تغییر پیکربندی اجرا/اشکال‌زدایی موجود خود، انتخاب کنید که چه ویژگی‌هایی در هنگام استقرار برنامه‌تان شامل شود:

  1. از نوار منو Run > Edit Configurations را انتخاب کنید.
  2. از پانل سمت چپ کادر گفتگوی Run/Debug Configurations ، پیکربندی برنامه Android مورد نظر خود را انتخاب کنید.
  3. در بخش ویژگی‌های پویا برای استقرار در برگه عمومی ، کادر کنار هر ماژول ویژگی را که می‌خواهید هنگام استقرار برنامه خود اضافه کنید علامت بزنید.
  4. روی OK کلیک کنید.

به‌طور پیش‌فرض، Android Studio برنامه شما را با استفاده از بسته‌های برنامه برای استقرار برنامه شما اجرا نمی‌کند. در عوض، IDE فایل‌های APK را در دستگاه شما می‌سازد و نصب می‌کند که برای سرعت استقرار به‌جای اندازه APK بهینه‌سازی شده‌اند. برای پیکربندی Android Studio برای ساختن و استقرار فایل‌های APK و تجربیات فوری از یک بسته برنامه، پیکربندی اجرا/اشکال‌زدایی خود را تغییر دهید .

از ماژول های ویژگی برای تحویل سفارشی استفاده کنید

یکی از مزایای منحصر به فرد ماژول های ویژگی، امکان سفارشی کردن نحوه و زمان بارگیری ویژگی های مختلف برنامه شما در دستگاه های دارای 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 خود و تعیین نام بسته استفاده کنید:

تصویری از APK Analyzer که محتویات یک فایل منبع کامپایل شده را بررسی می کند.

شکل 2. از APK Analyzer برای بررسی نام بسته در یک فایل منبع کامپایل شده استفاده کنید.

ملاحظات مربوط به ماژول های ویژگی

با ماژول‌های ویژگی، می‌توانید سرعت ساخت و سرعت مهندسی را بهبود ببخشید و به‌طور گسترده‌ای برای کاهش اندازه برنامه، تحویل ویژگی‌های برنامه‌تان را سفارشی کنید. با این حال، برخی از محدودیت ها و موارد لبه وجود دارد که هنگام استفاده از ماژول های ویژگی باید در نظر داشت:

  • نصب 50 یا بیشتر ماژول ویژگی روی یک دستگاه، از طریق تحویل مشروط یا بر اساس تقاضا، ممکن است منجر به مشکلات عملکرد شود. ماژول‌های زمان نصب، که به‌عنوان قابل جابجایی پیکربندی نشده‌اند، به‌طور خودکار در ماژول پایه قرار می‌گیرند و تنها به عنوان یک ماژول ویژگی در هر دستگاه به حساب می‌آیند.
  • تعداد ماژول‌هایی را که به‌عنوان قابل جابجایی برای تحویل در زمان نصب پیکربندی می‌کنید به 10 یا کمتر محدود کنید. در غیر این صورت، زمان دانلود و نصب برنامه شما ممکن است افزایش یابد.
  • فقط دستگاه‌های دارای Android نسخه 5.0 (سطح API 21) و بالاتر از دانلود و نصب ویژگی‌های درخواستی پشتیبانی می‌کنند. برای در دسترس قرار دادن ویژگی خود در نسخه های قبلی Android، هنگام ایجاد یک ماژول ویژگی ، Fusing را فعال کنید.
  • SplitCompat را فعال کنید تا برنامه شما به ماژول های ویژگی بارگیری شده دسترسی داشته باشد که در صورت تقاضا تحویل داده می شوند.
  • ماژول‌های ویژگی نباید فعالیت‌هایی را در مانیفست خود با android:exported true کنند. دلیل آن این است که هیچ تضمینی وجود ندارد که دستگاه زمانی که برنامه دیگری تلاش می کند فعالیت را راه اندازی کند، ماژول ویژگی را دانلود کرده باشد. علاوه بر این، برنامه شما باید قبل از تلاش برای دسترسی به کد و منابع آن، تأیید کند که یک ویژگی دانلود شده است. برای کسب اطلاعات بیشتر، مدیریت ماژول های نصب شده را بخوانید.
  • از آنجایی که «تحویل ویژگی Play» از شما می‌خواهد که برنامه خود را با استفاده از بسته برنامه منتشر کنید، مطمئن شوید که از مشکلات شناخته شده بسته برنامه آگاه هستید.

مرجع مانیفست ماژول ویژگی

هنگام ایجاد یک ماژول ویژگی جدید با استفاده از Android Studio ، IDE شامل بسیاری از ویژگی های مانیفست است که ماژول برای رفتار مانند یک ماژول ویژگی نیاز دارد. علاوه بر این ، برخی از ویژگی ها توسط سیستم ساخت در زمان کامپایل تزریق می شوند ، بنابراین لازم نیست خودتان آنها را مشخص کنید یا اصلاح کنید. در جدول زیر ویژگی های مانیفست که برای ماژول ها مهم هستند ، شرح می دهد.

صفت توضیحات
<manifest
...
این بلوک معمولی <manifest> شما است.
xmlns:dist="http://schemas.android.com/apk/distribution" یک dist: فضای نام XML که در زیر توضیح داده شده است.
split=" split_name " هنگامی که Android Studio بسته نرم افزاری برنامه شما را می سازد ، این ویژگی را برای شما شامل می شود. بنابراین ، شما نباید خودتان این ویژگی را درج کنید یا اصلاح کنید .

نام ماژول را که برنامه شما هنگام درخواست ماژول On Demand با استفاده از کتابخانه تحویل ویژگی Play مشخص می کند ، تعریف می کند.

چگونه Gradle مقدار این ویژگی را تعیین می کند:

به طور پیش فرض ، هنگامی که شما یک ماژول ویژگی را با استفاده از Android Studio ایجاد می کنید ، IDE از آنچه شما به عنوان نام ماژول آن مشخص می کنید برای شناسایی ماژول به عنوان زیر مجموعه درجه در پرونده تنظیمات Gradle استفاده می کند.

هنگامی که بسته برنامه خود را می سازید ، Gradle از آخرین عنصر مسیر Subproject برای تزریق این ویژگی آشکار در مانیفست ماژول استفاده می کند. به عنوان مثال ، اگر یک ماژول ویژگی جدید را در MyAppProject/features/ دایرکتوری ایجاد کنید و "Dynamic_Feature1" را به عنوان نام ماژول آن مشخص کنید ، IDE اضافه می کند ':features:dynamic_feature1' به عنوان یک زیر مجموعه در پرونده settings.gradle خود. هنگام ساختن بسته نرم افزاری برنامه خود ، Gradle سپس <manifest split="dynamic_feature1"> را در مانیفست ماژول تزریق می کند.

android:isFeatureSplit="true | false"> هنگامی که Android Studio بسته نرم افزاری برنامه شما را می سازد ، این ویژگی را برای شما شامل می شود. بنابراین ، شما نباید این ویژگی را به صورت دستی وارد یا اصلاح کنید .

مشخص می کند که این ماژول یک ماژول ویژگی است. در ماژول پایه و APK های پیکربندی تجلی می یابد یا این ویژگی را حذف می کند یا آن را به false تنظیم می کند.

<dist:module این عنصر XML جدید ویژگی هایی را تعیین می کند که چگونه ماژول بسته بندی شده و به عنوان APK ها توزیع می شود.
dist:instant="true | false" مشخص می کند که آیا ماژول باید از طریق Google Play Instant به عنوان یک تجربه فوری در دسترس باشد.

اگر برنامه شما شامل یک یا چند ماژول ویژگی با قابلیت فوری است ، شما باید ماژول پایه را نیز فوری کنید. هنگام استفاده از Android Studio 3.5 یا بالاتر ، IDE این کار را برای شما انجام می دهد وقتی یک ماژول ویژگی با قابلیت فوری ایجاد می کنید .

شما نمی توانید این عنصر XML را روی true تنظیم کنید در حالی که <dist:on-demand/> را نیز تنظیم کنید. با این حال ، شما هنوز هم می توانید در صورت تقاضای بارگیری ماژول های ویژگی فوری خود به عنوان تجربیات فوری با استفاده از کتابخانه تحویل ویژگی بازی درخواست کنید. هنگامی که کاربر برنامه شما را بارگیری و نصب می کند ، دستگاه ماژول های ویژگی فوری برنامه خود را به همراه پایه APK بارگیری و نصب می کند.

dist:title="@string/feature_name" عنوان کاربر را برای ماژول مشخص می کند. به عنوان مثال ، دستگاه ممکن است هنگام درخواست تأیید بارگیری ، این عنوان را نمایش دهد.

شما باید منبع رشته ای برای این عنوان را در پرونده ماژول پایه ماژول module_root /src/ source_set /res/values/strings.xml درج کنید.

<dist:fusing dist:include="true | false" />
</dist:module>
مشخص می کند که آیا ماژول را در چند اپلیکیشن قرار دهید که دستگاه های Android 4.4 (API سطح 20) و پایین را هدف قرار می دهند.

علاوه بر این ، هنگامی که از bundletool برای تولید APK ها از یک بسته نرم افزاری استفاده می کنید ، فقط ماژول های ویژگی ای که این true تنظیم می کنند در APK جهانی گنجانده شده اند - که یک APK یکپارچه است که شامل کد و منابع برای تمام تنظیمات دستگاه شما است.

<dist:delivery> گزینه هایی را که تحویل ماژول را سفارشی می کند ، همانطور که در شکل زیر نشان داده شده است. به خاطر داشته باشید ، هر ماژول ویژگی باید فقط یک نوع از این گزینه های تحویل سفارشی را پیکربندی کند.
<dist:install-time> مشخص می کند که ماژول باید در زمان نصب در دسترس باشد. این رفتار پیش فرض برای ماژول های ویژگی است که نوع دیگری از گزینه تحویل سفارشی را مشخص نمی کند.

برای کسب اطلاعات بیشتر در مورد بارگیری های نصب ، تنظیم تحویل زمان را بخوانید.

این گره همچنین می تواند شرایطی را تعیین کند که ماژول را به دستگاه هایی که نیازهای خاصی را برآورده می کنند ، از جمله ویژگی های دستگاه ، کشور کاربر یا حداقل سطح API محدود کنند. برای کسب اطلاعات بیشتر ، تحویل شرطی را بخوانید.

<dist:removable dist:value="true | false" />

در صورت عدم استفاده یا قرار گرفتن در false ، Bundletool هنگام تولید APK های تقسیم شده از بسته نرم افزاری ، ماژول های نصب را در ماژول پایه فیوز می کند. از آنجا که در نتیجه فیوز ، APK های تقسیم شده کمتری وجود خواهد داشت ، این تنظیم ممکن است عملکرد برنامه شما را بهبود بخشد.

هنگامی که removable روی true تنظیم شده است: ماژول های نصب در ماژول پایه ذوب نمی شوند. اگر می خواهید ماژول ها را در آینده حذف کنید ، true تنظیم کنید. با این حال ، پیکربندی ماژول های زیادی برای جابجایی ممکن است زمان نصب برنامه شما را افزایش دهد.

پیش فرض به false . اگر می خواهید فیوژن برای یک ماژول ویژگی را غیرفعال کنید ، فقط لازم است این مقدار را در مانیفست قرار دهید.

توجه: این ویژگی فقط در هنگام استفاده از افزونه Android Gradle 4.2 یا هنگام استفاده از Bundletool v1.0 از خط فرمان در دسترس است.

</dist:install-time>
<dist:on-demand/> مشخص می کند که ماژول باید به عنوان بارگیری در تقاضا در دسترس باشد. یعنی ماژول در زمان نصب در دسترس نیست ، اما برنامه شما ممکن است درخواست کند بعداً آن را بارگیری کند.

برای کسب اطلاعات بیشتر در مورد بارگیری در تقاضا ، پیکربندی را در مورد تحویل تقاضا بخوانید.

</dist:delivery>
<application
android:hasCode ="true | false">
...
</application>
اگر ماژول ویژگی هیچ فایل DEX ایجاد نکند ، یعنی هیچ کدی که بعداً در قالب پرونده DEX جمع آوری شود - شما باید موارد زیر را انجام دهید (در غیر این صورت ، ممکن است خطاهای زمان اجرا را دریافت کنید):
  1. android:hasCode در مانیفست ماژول ویژگی "False" را "false" کنید.
  2. موارد زیر را به مانیفست ماژول پایه خود اضافه کنید:
    <application
      android:hasCode="true"
      tools:replace="android:hasCode">
      ...
    </application>

منابع اضافی

برای کسب اطلاعات بیشتر در مورد استفاده از ماژول های ویژگی ، منابع زیر را امتحان کنید.

پست های وبلاگ

ویدیوها

شرایط خدمات و ایمنی داده ها

با دسترسی یا استفاده از کتابخانه تحویل ویژگی Play ، شما با شرایط خدمات کیت توسعه نرم افزار Play Core موافقت می کنید. لطفاً قبل از دسترسی به کتابخانه ، تمام اصطلاحات و خط مشی های قابل اجرا را بخوانید و درک کنید.

ایمنی داده ها

کتابخانه های Play Core رابط کاربردی برنامه شما با فروشگاه Google Play هستند. به همین ترتیب ، هنگامی که از Play Core در برنامه خود استفاده می کنید ، فروشگاه Play فرآیندهای خاص خود را اجرا می کند ، که شامل مدیریت داده هایی است که توسط شرایط خدمات Google Play اداره می شود. اطلاعات زیر توضیح می دهد که چگونه کتابخانه های اصلی بازی داده ها را برای پردازش درخواست های خاص از برنامه شما کنترل می کنند.

زبانهای اضافی API

داده های جمع آوری شده در استفاده لیست زبانهای نصب شده
هدف از جمع آوری داده ها از داده های جمع آوری شده برای ارائه نسخه های مختلف زبان برنامه و حفظ زبانهای نصب شده پس از بروزرسانی برنامه استفاده می شود.
رمزگذاری داده ها داده ها رمزگذاری شده است.
به اشتراک گذاری داده ها داده ها به اشخاص ثالث منتقل نمی شوند.
حذف داده ها داده ها پس از یک دوره نگهداری ثابت حذف می شوند.

تحویل ویژگی

داده های جمع آوری شده در استفاده ابرداده دستگاه
نسخه کاربردی
هدف از جمع آوری داده ها از داده های جمع آوری شده برای ارائه ماژول مناسب برای دستگاه و حفظ ماژول های نصب شده پس از بروزرسانی و تهیه نسخه پشتیبان و بازیابی استفاده می شود.
رمزگذاری داده ها داده ها رمزگذاری شده است.
به اشتراک گذاری داده ها داده ها به هیچ شخص ثالث منتقل نمی شوند.
حذف داده ها داده ها پس از یک دوره نگهداری ثابت حذف می شوند.

در حالی که هدف ما این است که تا حد امکان شفاف باشیم ، شما فقط مسئولیت تصمیم گیری در مورد نحوه پاسخگویی به فرم بخش ایمنی داده های Google Play را در مورد جمع آوری داده های کاربر برنامه ، اشتراک و شیوه های امنیتی برنامه خود دارید.