הגדרת הצגה מותנית

הפצה מותנית מאפשרת לכם להגדיר דרישות מסוימות לתצורת המכשיר כדי שמודולים של תכונות יורדו באופן אוטומטי במהלך התקנת האפליקציה. לדוגמה, אפשר להגדיר מודול של תכונות שכולל פונקציונליות של מציאות רבודה (AR) שיהיה זמין בהתקנת האפליקציה רק במכשירים שתומכים ב-AR.

מנגנון ההעברה הזה תומך כרגע בשליטה בהורדה של מודול בזמן התקנת האפליקציה, על סמך הגדרות המכשיר הבאות:

אם המכשיר לא עומד בכל הדרישות שציינתם, המודול לא יורד בזמן התקנת האפליקציה. עם זאת, האפליקציה יכולה לבקש בהמשך להוריד את המודול על פי דרישה באמצעות Play Core SDK.

לפני שמתחילים, חשוב לוודא שאתם משתמשים ב-Android Studio מגרסה 3.5 ואילך. בקטעים הבאים מוסבר איך להוסיף תמיכה בהעברה מותנית למודולים של התכונות.

הוספת מודול חדש עם אפשרויות להצגה מותנית

הדרך הקלה ביותר ליצור מודול של תכונות חדש עם מסירה מותנית היא באמצעות האשף New Module, באופן הבא:

  1. כדי לפתוח את תיבת הדו-שיח New Module, בסרגל התפריטים לוחצים על File > New > New Module.
  2. בתיבת הדו-שיח New Module, בוחרים באפשרות מודול של תכונות דינמי ולוחצים על Next.
  3. מגדירים את המודול כרגיל ולוחצים על Next (הבא).
  4. בקטע Module Download Options, מבצעים את הפעולות הבאות:

    1. מציינים את שם המודול (עד 50 תווים). הפלטפורמה משתמשת בשם הזה כדי לזהות את המודול למשתמשים, למשל, כדי לאשר אם המשתמש רוצה להוריד את המודול. לכן, המודול הבסיסי של האפליקציה חייב לכלול את שם המודול כמשאב מחרוזת, שאותו אפשר לתרגם. כשיוצרים את המודול באמצעות Android Studio, סביבת הפיתוח המשולבת (IDE) מוסיפה את משאב המחרוזת למודול הבסיס ומוסיפה את הרשומה הבאה למניפסט של מודול התכונות:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. בתפריט הנפתח בקטע Install-time inclusion, בוחרים באפשרות Only include module at app install for devices with specified features. כך יוצרים מודול שנכלל באפליקציה בזמן ההתקנה רק במכשירים עם הגדרות מסוימות שאפשר לציין, כמו תכונות המכשיר או המדינה. ‫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 מינימלית, לוחצים על סיום כדי להשלים את יצירת המודול ואז קוראים את הקטע בנושא ציון תנאים על סמך מדינה או רמת API מינימלית. אחרת, לוחצים על + תכונת מכשיר כדי להוסיף תכונה שהמכשיר צריך כדי להוריד את המודול בזמן ההתקנה.

    4. לצד device-feature, בוחרים אחת מהאפשרויות הבאות בתפריט הנפתח ומציינים את הערך שלה:

      • Name: מאפשר לציין תכונת חומרה או תוכנה שהמכשיר צריך כדי להוריד את המודול בזמן ההתקנה. התכונות שנתמכות בהצגה מותנית הן אותן תכונות שמופיעות כקבועים של FEATURE_* ב-PackageManager. אם בוחרים באפשרות הזו, מתחילים להקליד כל חלק מהערך הקבוע של התכונה, כמו "bluetooth", בשדה שליד התפריט הנפתח, ובוחרים באחת מההצעות שמופיעות.
      • גרסת OpenGL ES: מאפשרת לציין גרסה של OpenGL ES שנדרשת במכשיר כדי להוריד את המודול בזמן ההתקנה. אם בוחרים באפשרות הזו, מתחילים להקליד את הגרסה, למשל "0x00030001", בשדה שליד התפריט הנפתח, ובוחרים באחת מההצעות שמופיעות.
    5. אם רוצים להוסיף כמה תנאים על סמך תכונות המכשיר הזמינות, לוחצים על + תכונת מכשיר לכל תנאי של תכונת מכשיר שרוצים לציין.

    6. מסמנים את התיבה לצד Fusing אם רוצים שהמודול הזה יהיה זמין למכשירים עם Android מגרסה 4.4 (רמת API ‏20) ומטה, וייכלל בכמה קובצי APK. זה אומר שאפשר להפעיל את ההתנהגות על פי דרישה במודול הזה ולהשבית את המיזוג כדי להשמיט אותו ממכשירים שלא תומכים בהורדה ובהתקנה של קובצי APK מפוצלים. ‫Android Studio מוסיף את הקוד הבא למניפסט של המודול כדי לשקף את הבחירה שלכם:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. כשמסיימים להגדיר את אפשרויות ההורדה של המודולים, לוחצים על סיום.

שימו לב שהפלאגין של Android Gradle לא תומך בהפעלת lint ממודולים של תכונות דינמיות. אם תפעילו את lint ממודול האפליקציה המתאים, הוא יפעל על המודולים של התכונות הדינמיות ויכלול את כל הבעיות בדוח ה-lint של האפליקציה.

הוספת אפשרויות של הפצה מותנית למודול קיים של תכונות

אפשר להוסיף אפשרויות של הצגה מותנית למודול קיים של תכונות דרך המניפסט של המודול. עם זאת, קודם כדאי לקרוא על התאימות של אפשרויות מסירה מותנית לאפשרויות מסירה אחרות שכבר הפעלתם.

כדי להתחיל, קודם צריך להעביר את המניפסט לרכיב <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 או פחות.
גרסה ללא התקנה (<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 של המכשיר יכולה להיות שימושית אם מודול של תכונות תלוי בממשקי API שזמינים רק בגרסאות מסוימות של פלטפורמת Android.

כדי להגדיר תנאי שמבוסס על רמת 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>

הגדרת תנאים למאפיינים אחרים של המכשיר (בטא)

כדי לציין תנאים למאפייני מכשיר אחרים, כמו שם הדגם, זיכרון RAM, תכונות המערכת ומערכת על שבב (SoC), אתם יכולים להשתמש בקובץ תצורה של טירגוט לפי מכשיר.

כדי ליצור קובץ תצורה של טירגוט לפי מכשיר, עיינו במסמכי התיעוד בנושא טירגוט לפי מכשיר.

אחרי שיוצרים את קובץ התצורה, אפשר לציין קבוצות מכשירים למודול על ידי הכללת הפרטים הבאים במניפסט של המודול של התכונות.

<dist:conditions>
   <dist:device-groups>
      <dist:device-group dist:name="myCustomGroup1"/>
      <dist:device-group dist:name="myCustomGroup2"/>
   </dist:device-groups>
</dist:conditions>