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

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

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

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

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

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

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

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

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

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. בתפריט הנפתח בקטע הכללה בזמן ההתקנה, בוחרים באפשרות 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, בוחרים אחת מהאפשרויות הבאות בתפריט הנפתח ומציינים את הערך שלה:

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

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

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

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

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

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

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