יצירת כמה חבילות APK לגדלים שונים של מסכים

אם אתם מפרסמים את האפליקציה ב-Google Play, עליכם ליצור ולהעלות קובץ Android App Bundle. כשעושים זאת, Google Play מופעל באופן אוטומטי יוצר ומציג חבילות APK שעברו אופטימיזציה בהתאם לתצורת המכשיר של כל משתמש, כך שהמשתמשים מורידים רק את הקוד והמשאבים הדרושים להם כדי להפעיל את האפליקציה. פרסום של חבילות APK מרובות שימושי אם לא מפרסמים ב-Google Play, אבל עליכם ליצור, לחתום ולנהל כל APK בעצמכם.

כשמפתחים אפליקציה ל-Android כדי ליהנות מהיתרונות של חבילות APK מרובות ב-Google Play, חשוב לאמץ כמה שיטות מומלצות כבר מההתחלה כדי למנוע כאבי ראש מיותרים בשלב מתקדם יותר של תהליך הפיתוח. בשיעור הזה מוסבר איך ליצור כמה חבילות APK כאשר כל אחד מהם מכסה סיווג אחר של גודל מסך. תקבלו גם כמה כלים שדרושים כדי להקל ככל האפשר על תחזוקה של מספר קוד בסיס של APK.

אישור שדרוש לך מספר חבילות APK

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

אם ניתן לנהל אותו, להגבלת האפליקציה ל-APK אחד יש מספר יתרונות: כולל:

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

שאר השיעור מניח שאתם חקרתם את הנושא, במשאבים המקושרים, והגענו למסקנה שכמה חבילות APK הן המסלול המתאים תרגום מכונה.

תרשים של הדרישות

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

קטנות רגיל גדולה xlarge

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

קטנות רגיל גדולה xlarge

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

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

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

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

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

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

יצירת פרויקטים חדשים של APK

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

alexlucas:~/code/multi-apks-root$ ls
foo-blue
foo-green
foo-lib
foo-red

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

שינוי המניפסטים

כשמשתמש מוריד אפליקציה שמשתמשת בכמה חבילות APK דרך Google Play, בחירת ה-APK לשימוש בשני כללים פשוטים:

  • במניפסט צריך להראות שחבילת APK מסוימת עומדת בדרישות
  • מתוך חבילות ה-APK שעומדות בדרישות, מספר הגרסה הגבוה ביותר זוכה

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

קטנות רגיל גדולה xlarge
קטנות רגיל גדולה xlarge
קטנות רגיל גדולה xlarge

עם זאת, השימוש ב"מספר הגרסה הגבוה ביותר יזכה" כלל, אם נגדיר את מאפיין versionCode כל חבילת APK, כך שאדום ≥ ירוק ≥ כחול, התרשים מתכווץ בפועל לערך הבא:

קטנות רגיל גדולה xlarge

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

למרבה המזל, אם משתמש מעיין ב-Google Play ממכשיר כזה, Google Play תבחן את שימו לב שאדום מפרט את המצלמה הקדמית כדרישה, ומתעלמים ממנה בשקט, שאדום ומכשיר ההוא לא תואמים לגן עדן דיגיטלי. ואז הוא יראה את זה בצבע ירוק לא רק תואם למכשירים בגודל xlarge, אלא גם לא משנה אם יש או לא מצלמה קדמית! המשתמש עדיין יכול להוריד את האפליקציה מ-Google Play, כי למרות כל התקלה במצלמה הקדמית, עדיין היה APK שתומך במסך הספציפי הזה. גודל.

כדי להשאיר את כל חבילות ה-APK ב'מסלולים' נפרדים, חשוב להשתמש בקוד גרסה טוב scheme. הגרסה המומלצת נמצאת באזור Version Codes (קודי גרסאות) של במדריך למפתחים. מאחר שקבוצת ה-APK לדוגמה מטפלת רק באחת מתוך 3 החבילות האפשריות, מספיק להפריד בין חבילות ה-APK ב-1, 000 ולהוסיף אותן משם. הזה יכול להיראות כך:

כחול: 1001, 1002, 1003, 1004...
ירוק: 2001, 2002, 2003, 2004...
אדום:3001, 3002, 3003, 3004...

בסופו של דבר, המניפסט של Android כנראה ייראה בערך כך הבאים:

כחול:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

ירוק:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

אדום:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="false"
        android:xlargeScreens="true" />
    ...

הערה: טכנית, כמה חבילות APK יפעלו עם המסכים הנתמכים או התג התואם של screen. בדרך כלל עדיף להשתמש במסכים, באופן כללי, מומלץ מאוד להשתמש בשני התגים באותו מניפסט. הוא מסבך דברים שלא לצורך, ומעלה את הסיכוי לשגיאות. כמו כן, שימו לב שבמקום לנצל את ערכי ברירת המחדל (קטן ו- רגיל הם תמיד true כברירת מחדל), המניפסטים מגדירים באופן מפורש את הערך עבור בכל גודל מסך. כך תוכלו לחסוך כאבי ראש בהמשך. לדוגמה, מניפסט עם SDK מטורגט של < 9 יוגדר באופן אוטומטי כ-xlarge כ-False, מאחר שהגודל עדיין לא היה קיים. לכן, חשוב להתנסח בצורה מפורשת.

לבדיקת רשימת המשימות לפני השקה

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

  • שם החבילה של כל חבילות ה-APK צריך להיות זהה
  • כל חבילות ה-APK צריכות להיות חתומות באמצעות אותו אישור
  • בכל גודל מסך שבו אתם רוצים שה-APK יתמוך, יש להגדיר את הערך True במניפסט. כל גודל מסך שאתם רוצים למנוע, מגדירים את הערך False
  • בודקים היטב את מסנני המניפסט לאיתור מידע סותר (APK שתומך רק ב-APK אף אחד לא יראה את הקאפקייק במסכי XLARGE)
  • המניפסט של כל APK חייב להיות ייחודי לפחות במסך אחד נתמך, במרקם של openGL או גרסת פלטפורמה
  • מומלץ לבדוק כל חבילת APK במכשיר אחד לפחות. מלבד זאת, יש לכם אחד אמולטורים של מכשירים שניתן להתאים אישית בעסק, שממוקמים במכונת הפיתוח שלכם. השתגע!

כדאי גם לבדוק את ה-APK המורכב לפני שדוחפים אותו לשוק, כדי לוודא שאין בו הפתעות שעלולות להסתיר את האפליקציה ב-Google Play. זה בעצם די פשוט באמצעות 'aapt' של Google. Aapt (הכלי לאריזת נכסים של Android) הוא חלק מתהליך ה-build ליצירה לארוז את אפליקציות Android, והוא גם כלי שימושי מאוד לבדיקתן.

>aapt dump badging
package: name='com.example.hello' versionCode='1' versionName='1.0'
sdkVersion:'11'
uses-permission:'android.permission.SEND_SMS'
application-label:'Hello'
application-icon-120:'res/drawable-ldpi/icon.png'
application-icon-160:'res/drawable-mdpi/icon.png'
application-icon-240:'res/drawable-hdpi/icon.png'
application: label='Hello' icon='res/drawable-mdpi/icon.png'
launchable-activity: name='com.example.hello.HelloActivity'  label='Hello' icon=''
uses-feature:'android.hardware.telephony'
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

כשבוחנים פלט aapt, חשוב לוודא שאין לך ערכים מתנגשים תומך במסכים ובמסכים תואמים, ושאין לך מכשיר שמתכוון ל-'uses-feature' ערכים שנוספו כתוצאה מהרשאות שהגדרת במניפסט. בדוגמה שלמעלה, ה-APK יהיה בלתי גלוי לרוב המכשירים, אם לא לכל המכשירים.

למה? בהוספה של ההרשאה הנדרשת SEND_SMS, הדרישה של התכונה android.hardware.telephony נוספה באופן לא מפורש. אם רוב המכשירים המוגדלים (אם לא כולם) הם טאבלטים שאין בהם חומרת טלפוניה, במקרים כאלה מערכת Google Play תסנן את ה-APK הזה, עד שמכשירים עתידיים יהיו גדולים מספיק כדי לדווח כמסך גדול במיוחד ומחזיקים בחומרת טלפוניה.

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

<uses-feature android:name="android.hardware.telephony" android:required="false" />

גם הדרישה android.hardware.touchscreen מתווספת באופן לא מפורש. כדי שה-APK יהיה גלוי בטלוויזיות שאינן מכשירים עם מסך מגע, עליך להוסיף את הפרטים הבאים למניפסט:

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

לאחר השלמת רשימת המשימות טרום-השקה, יש להעלות את חבילות ה-APK ל-Google Play. יכול להיות שיעבור קצת זמן עד שהאפליקציה תופיע בזמן הגלישה ב-Google Play, אבל כשהיא מופיעה, מבצעים בדיקה אחת אחרונה. מורידים את האפליקציה לכל מכשיר בדיקה שבו מוודאים שחבילות ה-APK מטרגטות את המכשירים הרצויים.

למידע נוסף על פרסום כמה חבילות APK ב-Google Play, אפשר לקרוא תמיכה ב-APKs מרובים.