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

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

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

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

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

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

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

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

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

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. בתפריט הנפתח, בקטע הכללה של זמן ההתקנה, בוחרים באפשרות רק כוללים מודול בזמן התקנת האפליקציה במכשירים עם תכונות מסוימות, יוצרת מודול שנכלל באפליקציה בזמן ההתקנה של האפליקציה רק בזמן במכשירים עם הגדרות אישיות מסוימות שאפשר להגדיר, כמו מכשיר תכונות או מדינה. מערכת 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. אם רוצים שהמודול הזה יהיה זמין, מסמנים את התיבה לצד Fusing למכשירים שמותקנת בהם גרסת Android 4.4 (רמת API 20) ומטה ומופיעים חבילות APK מרובות. כלומר, אפשר להפעיל במודול הזה התנהגות על פי דרישה ומשביתים את ההיתוך כדי להשמיט אותו ממכשירים שלא תומכים הורדה והתקנה של חבילות APK מפוצלות. מערכת Android Studio מחדירה את במניפסט של המודול כדי לשקף את הבחירה שלכם:

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

הערה: הפלאגין Android Gradle לא תומך בהפעלה איתור שגיאות בקוד ממודולים של תכונות דינמיות. בתהליך של הרצת מו{/0} מודול האפליקציה המתאים יריץ איתור שגיאות בקוד במודולים של התכונות הדינמיות שלו ולכלול את כל הבעיות בדוח איתור השגיאות בקוד של האפליקציה.

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

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

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