پیکربندی تحویل مشروط

تحویل مشروط به شما امکان می‌دهد الزامات پیکربندی دستگاه خاصی را برای ماژول‌های ویژگی تنظیم کنید تا در حین نصب برنامه به‌طور خودکار دانلود شوند. برای مثال، می‌توانید یک ماژول ویژگی را پیکربندی کنید که شامل قابلیت‌هایی برای واقعیت افزوده (AR) باشد تا در نصب برنامه فقط برای دستگاه‌هایی که AR را پشتیبانی می‌کنند در دسترس باشد.

این مکانیسم تحویل در حال حاضر از کنترل دانلود یک ماژول در زمان نصب برنامه بر اساس پیکربندی‌های دستگاه زیر پشتیبانی می‌کند:

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

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

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

ساده ترین راه برای ایجاد یک ماژول ویژگی جدید با تحویل مشروط از طریق جادوگر New Module به شرح زیر است:

  1. برای باز کردن کادر گفتگوی New Module ، File > New > New Module را از نوار منو انتخاب کنید.
  2. در گفتگوی ماژول جدید، ماژول ویژگی پویا را انتخاب کنید و روی Next کلیک کنید.
  3. ماژول خود را به طور معمول پیکربندی کنید و روی Next کلیک کنید.
  4. در قسمت گزینه های دانلود ماژول موارد زیر را تکمیل کنید:

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

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. در منوی کشویی زیر Install-time inclusion ، فقط شامل ماژول در هنگام نصب برنامه برای دستگاه‌هایی با ویژگی‌های مشخص شده را انتخاب کنید، که ماژولی ایجاد می‌کند که در زمان نصب برنامه با برنامه شما همراه است فقط در دستگاه‌هایی با پیکربندی‌های خاصی که می‌توانید مشخص کنید، مانند ویژگی های دستگاه یا کشور Android Studio موارد زیر را در مانیفست ماژول تزریق می کند تا انتخاب شما را منعکس کند:

      <dist:module ... >
        <dist:delivery>
            <dist:install-time>
                <dist:conditions>
                    <!-- If you specify conditions, as described in the steps
                         below, the IDE includes them here. -->
                </dist:conditions>
            </dist:install-time>
        </dist:delivery>
      </dist:module>
      
    3. اگر می‌خواهید دانلود خودکار ماژول را به کشورهای خاصی یا حداقل سطح API محدود کنید، روی Finish کلیک کنید تا ایجاد ماژول کامل شود و سپس بخش نحوه تعیین شرایط بر اساس کشور یا حداقل سطح API را بخوانید. در غیر این صورت، روی + ویژگی دستگاه کلیک کنید تا ویژگی مورد نیاز دستگاه برای دانلود ماژول در زمان نصب اضافه شود.

    4. در کنار دستگاه-ویژگی ، یکی از گزینه های زیر را از منوی کشویی انتخاب کنید و مقدار آن را مشخص کنید:

      • نام: به شما امکان می‌دهد یک ویژگی سخت‌افزاری یا نرم‌افزاری را مشخص کنید که دستگاه برای دانلود ماژول در زمان نصب به آن نیاز دارد. ویژگی هایی که تحویل مشروط پشتیبانی می کند همان ویژگی هایی است که به عنوان ثابت های FEATURE_* توسط PackageManager فهرست شده است. اگر این گزینه را انتخاب کردید، شروع به تایپ بخشی از مقدار ثابت ویژگی، مانند "بلوتوث" در فیلد کنار منوی بازشو کنید و یکی از پیشنهاداتی را که ظاهر می شود انتخاب کنید.
      • نسخه OpenGL ES: به شما امکان می دهد نسخه ای از OpenGL ES را مشخص کنید که دستگاه برای دانلود ماژول در زمان نصب به آن نیاز دارد. اگر این گزینه را انتخاب کردید، شروع به تایپ نسخه مانند "0x00030001" در فیلد کنار منوی بازشو کنید و یکی از پیشنهادات ظاهر شده را انتخاب کنید.
    5. اگر می‌خواهید چند شرط را بر اساس ویژگی‌های موجود دستگاه اضافه کنید، برای هر شرایط ویژگی دستگاهی که می‌خواهید مشخص کنید، روی + ویژگی دستگاه کلیک کنید.

    6. اگر می‌خواهید این ماژول برای دستگاه‌های دارای Android 4.4 (سطح API 20) و پایین‌تر در دسترس باشد و در چند APK گنجانده شود، کادر کنار Fusing را علامت بزنید. این بدان معناست که می‌توانید رفتار درخواستی را برای این ماژول فعال کنید و فیوزینگ را غیرفعال کنید تا آن را از دستگاه‌هایی که از دانلود و نصب فایل‌های APK تقسیم‌شده پشتیبانی نمی‌کنند حذف کنید. Android Studio موارد زیر را در مانیفست ماژول تزریق می کند تا انتخاب شما را منعکس کند:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. وقتی پیکربندی گزینه‌های دانلود ماژول تمام شد، روی Finish کلیک کنید.

توجه داشته باشید که پلاگین Android Gradle از اجرای پرز از ماژول های با ویژگی پویا پشتیبانی نمی کند. پرزهای در حال اجرا از ماژول برنامه مربوطه، بر روی ماژول‌های با ویژگی پویا اجرا می‌شود و همه مشکلات را در گزارش پرز برنامه شامل می‌شود.

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

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

برای شروع، ابتدا باید مانیفست خود را به عنصر جدید <dist:delivery> منتقل کنید. قطعه کد زیر نمونه ای از نحو قدیمی را نشان می دهد:

<!-- This is the old syntax. -->
<dist:module
  dist:title="@string/feature_title" dist:onDemand="true">
  <dist:fusing dist:include="true"/>
</dist:module>

اکنون گزینه های تحویل فوق به صورت زیر مشخص شده اند.

<dist:module
  dist:title="@string/feature_title">
  <dist:delivery>
      <dist:on-demand/>
  </dist:delivery>
  <dist:fusing dist:include="true"/>
</dist:module>

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

<dist:module
    dist:title="@string/feature_title">
    <dist:delivery>
      <dist:on-demand/>
      <dist:install-time>
        <dist:conditions>
          <!-- Requires that the device support AR to download the module at
          app install-time.  -->
          <dist:device-feature dist:name="android.hardware.camera.ar"/>
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
    <dist:fusing dist:include="true"/>
</dist:module>

بخش‌های زیر گزینه‌های دیگری را برای تحویل مشروط، مانند بر اساس کشور یا حداقل سطح API، مورد بحث قرار می‌دهند.

سازگاری با سایر گزینه های دانلود ماژول

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

گزینه دانلود ماژول سازگاری با تحویل مشروط
فیوزینگ ( <dist:fusing dist:include="true"/> ) اگر یک ماژول این گزینه را روی true تنظیم کند، Google Play به گزینه‌های تحویل مشروط که هنگام استقرار برنامه خود در دستگاه‌های دارای API سطح 19 یا پایین‌تر تعیین می‌کنید، احترام نمی‌گذارد. یعنی، ماژول‌های ویژگی‌ای که فیوزینگ را فعال می‌کنند، همیشه در زمان نصب برای دستگاهی که API سطح 19 یا پایین‌تر دارد، گنجانده می‌شود.
Instant-enabled ( <dist:module dist:instant="true"/> ) گزینه های تحویل مشروط برای ماژول های ویژگی فعال فوری پشتیبانی نمی شوند.
در صورت تقاضا ( <dist:on-demand/> ) به‌طور پیش‌فرض، اگر گزینه‌های تحویل مشروط را مشخص کنید، ماژول در صورت تقاضا نیز در دسترس است.

شرایط را بر اساس کشور مشخص کنید

تحویل مشروط همچنین به شما این امکان را می‌دهد که مشخص کنید می‌خواهید کدام کشورها را از بارگیری ماژول خود در زمان نصب برنامه حذف کنید (یا شامل کنید). تعیین این شرط ممکن است مفید باشد، برای مثال، اگر ماژول شما روش پرداختی را اجرا کند که در مناطق خاصی در دسترس نیست.

در این زمینه، کشور دستگاه معمولاً با آدرس صورت‌حساب کاربر ثبت‌شده در حساب Google Play او تعیین می‌شود.

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

<dist:conditions>
   <!-- Set to "true" to specify countries to exclude from downloading
   this module at app install-time. By default, modules are available
   for download to all user countries. -->
  <dist:user-countries dist:exclude="true">
    <!-- Specifies the two-letter  CLDR country code for regions that should
    not download the module at app install-time. -->
    <dist:country dist:code="CN"/>
    <dist:country dist:code="HK"/>
  </dist:user-countries>
</dist:conditions>

شرایط را برای سطح API مشخص کنید

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

برای تنظیم یک شرط بر اساس حداقل یا حداکثر سطح API دستگاه، موارد زیر را در مانیفست ماژول ویژگی خود قرار دهید.

<dist:conditions>
    <!-- Specifies the minimum API level that the device must satisfy
         in order to download your module at app install-time. The API level you
         specify must be greater or equal to the module's own minSdkVersion. -->
   <dist:min-sdk dist:value="21"/>
    <!-- Specifies the maximum API level that the device cannot exceed
         in order to download your module at app install-time. The API level you
         specify must be less than or equal to the module's own maxSdkVersion. -->
   <dist:max-sdk dist:value="24"/>
</dist:conditions>