چندین APK برای اندازه های مختلف صفحه ایجاد کنید

اگر برنامه خود را در Google Play منتشر می‌کنید، باید یک Android App Bundle بسازید و آپلود کنید. وقتی این کار را انجام می‌دهید، Google Play به‌طور خودکار فایل‌های APK بهینه‌شده را برای پیکربندی دستگاه هر کاربر تولید و ارائه می‌کند، بنابراین آنها فقط کد و منابعی را که برای اجرای برنامه شما نیاز دارند دانلود می‌کنند. اگر در Google Play منتشر نمی کنید، انتشار چندین APK مفید است، اما باید خودتان هر APK را بسازید، امضا کنید و مدیریت کنید.

هنگامی که برنامه اندروید خود را برای استفاده از چندین APK در Google Play توسعه می‌دهید، مهم است که برخی از روش‌های خوب را از همان ابتدا اتخاذ کنید و از سردردهای غیرضروری بیشتر در فرآیند توسعه جلوگیری کنید. این درس به شما نشان می‌دهد که چگونه می‌توانید چندین APK از برنامه خود ایجاد کنید، که هر کدام کلاس متفاوتی از اندازه صفحه را پوشش می‌دهند. همچنین برخی از ابزارهای لازم برای حفظ یک پایگاه کد APK چندگانه را تا حد امکان بدون دردسر به دست خواهید آورد.

تأیید کنید که به چندین APK نیاز دارید

هنگام تلاش برای ایجاد برنامه‌ای که در اندازه‌های مختلف دستگاه‌های اندرویدی کار می‌کند، طبیعتاً می‌خواهید برنامه شما از تمام فضای موجود در دستگاه‌های بزرگ‌تر استفاده کند، بدون اینکه سازگاری یا قابلیت استفاده در صفحه‌نمایش‌های کوچک‌تر را به خطر بیندازد. ممکن است در ابتدا به نظر برسد که پشتیبانی از چندین APK بهترین راه حل است، اما اغلب اینطور نیست. بخش استفاده از یک APK به جای راهنمای برنامه‌نویس چندگانه APK حاوی اطلاعات مفیدی در مورد نحوه انجام این کار با یک APK منفرد، از جمله استفاده از کتابخانه پشتیبانی ما است. همچنین باید راهنمای پشتیبانی از چند صفحه نمایش را بخوانید و حتی یک کتابخانه پشتیبانی وجود دارد که می‌توانید با استفاده از Android SDK دانلود کنید، که به شما امکان می‌دهد از قطعات در دستگاه‌های قبل از Honeycomb استفاده کنید (پشتیبانی از چند صفحه در یک APK را بسیار آسان‌تر می‌کند).

اگر بتوانید آن را مدیریت کنید، محدود کردن برنامه خود به یک APK دارای چندین مزیت است، از جمله:

  • انتشار و تست آسان تر است
  • تنها یک پایگاه کد برای نگهداری وجود دارد
  • برنامه شما می تواند با تغییرات پیکربندی دستگاه سازگار شود
  • بازیابی برنامه در همه دستگاه ها فقط کار می کند
  • لازم نیست نگران ترجیحات بازار، رفتار «ارتقای» از یک APK به دیگری، یا اینکه کدام APK با کدام دسته از دستگاه ها می رود، باشید.

بقیه این درس فرض می‌کند که درباره موضوع تحقیق کرده‌اید، مطالب موجود در منابع مرتبط را با دقت جذب کرده‌اید و تشخیص داده‌اید که چندین APK مسیر مناسبی برای برنامه شما هستند.

خواسته های خود را نمودار کنید

با ایجاد یک نمودار ساده شروع کنید تا به سرعت تعیین کنید به چند APK نیاز دارید و هر APK چه اندازه صفحه نمایشی را پوشش می دهد. خوشبختانه، ترسیم سریع و آسان نیازهای خود و داشتن یک مرجع برای بعد آسان است. با ردیفی از سلول‌ها شروع کنید که نشان‌دهنده اندازه‌های مختلف صفحه نمایش موجود در پلتفرم Android است.

کوچک عادی بزرگ xlarge

اکنون فقط در نمودار طوری رنگ کنید که هر رنگ یک APK را نشان دهد. در اینجا یک مثال از نحوه اعمال هر APK در محدوده مشخصی از اندازه های صفحه آورده شده است.

کوچک عادی بزرگ xlarge

بسته به نیازتان، می‌توانید دو APK نیز داشته باشید، «small and Everything other» یا «xlarge and Everything other». رنگ‌آمیزی در نمودار همچنین ارتباطات درون تیمی را آسان‌تر می‌کند—حالا می‌توانید به سادگی به هر APK به‌عنوان «آبی»، «سبز» یا «قرمز» اشاره کنید، مهم نیست که چه تعداد صفحه‌نمایش مختلف را پوشش می‌دهد.

همه کدها و منابع رایج را در یک پروژه کتابخانه قرار دهید

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

توجه: در حالی که جزئیات پیاده‌سازی نحوه ایجاد و گنجاندن پروژه‌های کتابخانه فراتر از محدوده این درس است، می‌توانید با خواندن «ایجاد کتابخانه Android» سرعت خود را افزایش دهید.

اگر در حال تبدیل یک برنامه موجود برای استفاده از پشتیبانی APK چندگانه هستید، پایگاه کد خود را برای هر فایل رشته محلی، فهرست مقادیر، رنگ‌های تم، نمادهای منو و طرح‌بندی که قرار نیست در APK تغییر کند، جستجو کنید و همه آن‌ها را در پروژه کتابخانه کدی که قرار نیست تغییر زیادی کند باید در پروژه کتابخانه نیز قرار گیرد. احتمالاً متوجه خواهید شد که این کلاس ها را برای اضافه کردن یک یا دو روش از APK به APK گسترش می دهید.

از سوی دیگر، اگر برنامه را از ابتدا ایجاد می‌کنید، تا حد امکان سعی کنید ابتدا کد را در پروژه کتابخانه بنویسید، سپس در صورت لزوم آن را به یک APK جداگانه منتقل کنید. مدیریت این کار در درازمدت بسیار ساده‌تر از اضافه کردن آن به یکی، سپس دیگری، سپس دیگری، سپس ماه‌ها بعد تلاش برای کشف این موضوع است که آیا می‌توان این لکه را به بخش کتابخانه منتقل کرد، بدون اینکه چیزی خراب شود.

پروژه های جدید APK ایجاد کنید

برای هر APK که می‌خواهید منتشر کنید، باید یک پروژه اندروید جداگانه وجود داشته باشد. برای سازماندهی آسان، پروژه کتابخانه و تمام پروژه های APK مرتبط را در یک پوشه والد قرار دهید. همچنین به یاد داشته باشید که هر APK باید نام بسته یکسانی داشته باشد، اگرچه آنها لزوماً نیازی به اشتراک گذاری نام بسته با کتابخانه ندارند. اگر قرار بود 3 APK داشته باشید که طبق طرحی که قبلا توضیح داده شد، دایرکتوری ریشه شما ممکن است به شکل زیر باشد:

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

پس از ایجاد پروژه ها، پروژه کتابخانه را به عنوان مرجع به هر پروژه APK اضافه کنید. در صورت امکان، شروع فعالیت خود را در پروژه کتابخانه تعریف کنید و آن فعالیت را در پروژه APK خود گسترش دهید. داشتن یک فعالیت شروع که در پروژه کتابخانه تعریف شده است به شما این فرصت را می دهد که تمام مقداردهی اولیه برنامه خود را در یک مکان قرار دهید، به طوری که هر APK جداگانه مجبور به اجرای مجدد وظایف "جهانی" مانند شروع به تجزیه و تحلیل، اجرای بررسی های مجوز، و سایر موارد نیست. سایر مراحل اولیه سازی که از APK به APK تغییر چندانی نمی کنند.

مانیفست ها را تنظیم کنید

وقتی کاربر برنامه‌ای را دانلود می‌کند که از چندین APK استفاده می‌کند، APK صحیح برای استفاده با استفاده از دو قانون ساده انتخاب می‌شود:

  • مانیفست باید نشان دهد که APK خاص واجد شرایط است
  • از بین فایل‌های APK واجد شرایط، بیشترین تعداد نسخه برنده می‌شود

به عنوان مثال، بیایید مجموعه چندین APK را که قبلاً توضیح داده شد، در نظر بگیریم، و فرض کنیم که هر APK برای پشتیبانی از تمام اندازه‌های صفحه بزرگتر از اندازه صفحه «هدف» تنظیم شده است. به صورت جداگانه، محدوده احتمالی هر APK به شکل زیر است:

کوچک عادی بزرگ xlarge
کوچک عادی بزرگ xlarge
کوچک عادی بزرگ xlarge

با این حال، با استفاده از قانون «بیشترین تعداد نسخه برنده»، اگر ویژگی versionCode را در هر APK به گونه‌ای تنظیم کنیم که قرمز ≥ سبز ≥ آبی باشد، نمودار عملاً به این شکل جمع می‌شود:

کوچک عادی بزرگ xlarge

حالا، بیایید بیشتر فرض کنیم که Red APK دارای برخی الزامات است که دو مورد دیگر ندارند. صفحه فیلترها در Google Play راهنمای برنامه‌نویس Android فهرست کاملی از مقصران احتمالی دارد. برای مثال، اجازه دهید فرض کنیم که رنگ قرمز به دوربین جلویی نیاز دارد. در واقع، تمام هدف APK قرمز استفاده از فضای اضافی صفحه نمایش برای انجام کارهای سرگرم کننده با دوربین جلو است. اما، به نظر می رسد، همه دستگاه های xlarge حتی دوربین جلو ندارند! وحشت!

خوشبختانه، اگر کاربری در حال مرور Google Play از یکی از این دستگاه‌ها باشد، Google Play به مانیفست نگاه می‌کند، می‌بیند که Red دوربین جلویی را به عنوان یک الزام فهرست می‌کند و به آرامی آن را نادیده می‌گیرد و تشخیص می‌دهد که Red و آن دستگاه یک دستگاه نیستند. مسابقه ساخته شده در بهشت ​​دیجیتال سپس متوجه می‌شود که گرین نه تنها با دستگاه‌های xlarge سازگار است، بلکه برای آن مهم نیست که دوربین جلویی وجود دارد یا نه! این برنامه همچنان می تواند توسط کاربر از Google Play دانلود شود، زیرا علیرغم تمام اتفاقات ناگوار دوربین جلو، هنوز یک APK وجود دارد که از آن اندازه صفحه نمایش خاص پشتیبانی می کند.

برای اینکه همه فایل‌های APK خود را در مسیرهای جداگانه نگه دارید، داشتن یک طرح کد نسخه خوب مهم است. مورد توصیه شده را می توان در قسمت کدهای نسخه راهنمای توسعه دهنده ما یافت. از آنجایی که مجموعه نمونه APK فقط با یکی از 3 بعد ممکن سروکار دارد، کافی است هر APK را با 1000 و افزایش از آنجا جدا کنید. این ممکن است به نظر برسد:

آبی: 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 با تگ supports-screens یا تگ compatible-screens کار خواهند کرد. پشتیبانی از صفحه نمایش به طور کلی ترجیح داده می شود، و به طور کلی ایده بسیار بدی است که از هر دو برچسب در یک مانیفست استفاده کنید. همه چیز را بیهوده پیچیده می کند و فرصت خطا را افزایش می دهد. همچنین توجه داشته باشید که به جای استفاده از مقادیر پیش‌فرض (کوچک و معمولی همیشه به طور پیش‌فرض درست هستند)، مانیفست‌ها به صراحت مقدار را برای هر اندازه صفحه تنظیم می‌کنند. این می تواند شما را از سردرد نجات دهد. به عنوان مثال، یک مانیفست با هدف SDK کمتر از 9 دارای xlarge به طور خودکار روی false تنظیم می شود، زیرا آن اندازه هنوز وجود نداشته است. پس صریح باشید!

چک لیست قبل از راه اندازی خود را مرور کنید

قبل از آپلود در Google Play، موارد زیر را دوباره بررسی کنید. به یاد داشته باشید که این موارد به طور خاص به چندین APK مرتبط هستند و به هیچ وجه یک چک لیست کامل برای همه برنامه‌هایی که در Google Play آپلود می‌شوند را نشان نمی‌دهند.

  • همه APK ها باید یک نام بسته داشته باشند
  • همه فایل‌های APK باید با یک گواهی امضا شوند
  • هر اندازه صفحه‌ای که می‌خواهید APK شما پشتیبانی کند، در مانیفست روی true تنظیم شود. هر اندازه صفحه‌ای که می‌خواهید از آن اجتناب شود، روی نادرست تنظیم کنید
  • فیلترهای مانیفست خود را برای اطلاعات متناقض بررسی کنید (یک APK که فقط از کیک کوچک در صفحه‌های XLARGE پشتیبانی می‌کند توسط کسی دیده نمی‌شود)
  • مانیفست هر APK باید حداقل در یکی از صفحات پشتیبانی شده، بافت openGL یا نسخه پلت فرم منحصر به فرد باشد
  • سعی کنید هر APK را حداقل در یک دستگاه آزمایش کنید. به غیر از آن، شما یکی از قابل تنظیم ترین شبیه سازهای دستگاه را در کسب و کار دارید که روی دستگاه توسعه خود نشسته است. دیوانه شوید!

همچنین ارزش آن را دارد که APK کامپایل شده را قبل از ورود به بازار بررسی کنید تا مطمئن شوید که هیچ شگفتی وجود ندارد که بتواند برنامه شما را در Google Play پنهان کند. این در واقع با استفاده از ابزار "aapt" بسیار ساده است. Aapt (ابزار بسته بندی دارایی اندروید) بخشی از فرآیند ساخت برای ایجاد و بسته بندی برنامه های اندرویدی شما است و همچنین ابزار بسیار مفیدی برای بازرسی آنها است.

>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 را بررسی می‌کنید، مطمئن شوید که مقادیر متناقضی برای صفحه‌های پشتیبانی و صفحه‌های سازگار نداشته باشید، و مقادیر «مصرف-ویژگی» ناخواسته‌ای که در نتیجه مجوزهای شما اضافه شده‌اند نداشته باشید. تنظیم در مانیفست در مثال بالا، APK برای اکثر دستگاه‌ها نامرئی خواهد بود.

چرا؟ با افزودن مجوز مورد نیاز SEND_SMS، ویژگی مورد نیاز android.hardware.telephony به طور ضمنی اضافه شد. از آنجایی که اکثر (اگر نه همه) دستگاه‌های xlarge تبلت‌هایی هستند که سخت‌افزار تلفن در آن‌ها وجود ندارد، Google Play در این موارد این APK را فیلتر می‌کند، تا زمانی که دستگاه‌های آینده عرضه شوند که هم به اندازه کافی بزرگ باشند که اندازه صفحه نمایش xlarge را گزارش کنند و هم دارای سخت‌افزار تلفن باشند.

خوشبختانه این مشکل با افزودن موارد زیر به مانیفست خود به راحتی برطرف می شود:

<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، پشتیبانی از چند APK را بخوانید.