اگر برنامه خود را در Google Play منتشر میکنید، باید یک Android App Bundle بسازید و آپلود کنید. وقتی این کار را انجام میدهید، Google Play بهطور خودکار فایلهای APK بهینهشده را برای پیکربندی دستگاه هر کاربر تولید و ارائه میکند، بنابراین آنها فقط کد و منابعی را که برای اجرای برنامه شما نیاز دارند دانلود میکنند. اگر در Google Play منتشر نمی کنید، انتشار چندین APK مفید است، اما باید خودتان هر APK را بسازید، امضا کنید و مدیریت کنید.
هنگامی که برنامه اندروید خود را برای استفاده از چندین APK در Google Play توسعه میدهید، مهم است که برخی از روشهای خوب را از همان ابتدا اتخاذ کنید و از سردردهای غیرضروری بیشتر در فرآیند توسعه جلوگیری کنید. این درس به شما نشان می دهد که چگونه چندین APK از برنامه خود ایجاد کنید که هر کدام مح��وده کمی متفاوت از سطوح API را پوشش می دهند. همچنین برخی از ابزارهای لازم برای حفظ یک پایگاه کد APK چندگانه را تا حد امکان بدون دردسر به دست خواهید آورد.
تأیید کنید که به چندین APK نیاز دارید
هنگام تلاش برای ایجاد برنامهای که در چندین نسل از پلتفرم اندروید کار میکند، طبیعتاً میخواهید برنامه شما از ویژگیهای جدید در دستگاههای جدید استفاده کند، بدون اینکه سازگاری با عقب را به خطر بیندازید. ممکن است در ابتدا به نظر برسد که پشتیبانی از چندین APK بهترین راه حل است، اما اغلب اینطور نیست. بخش استفاده از یک APK به جای راهنمای برنامهنویس چندگانه APK حاوی اطلاعات مفیدی در مورد نحوه انجام این کار با یک APK منفرد، از جمله استفاده از کتابخانه پشتیبانی ما است. همچنین میتوانید نحوه نوشتن کدی را که فقط در سطوح API خاصی در یک APK اجرا میشود، بدون استفاده از تکنیکهای محاسباتی گرانقیمت مانند بازتاب از این مقاله بیاموزید.
اگر بتوانید آن را مدیریت کنید، محدود کردن برنامه خود به یک APK دارای چندین مزیت است، از جمله:
- انتشار و تست آسان تر است
- تنها یک پایگاه کد برای نگهداری وجود دارد
- برنامه شما می تواند با تغییرات پیکربندی دستگاه سازگار شود
- بازیابی برنامه در همه دستگاه ها فقط کار می کند
- لازم نیست نگران ترجیحات بازار، رفتار «ارتقای» از یک APK به دیگری، یا اینکه کدام APK با کدام دسته از دستگاه ها می رود، باشید.
بقیه این درس فرض میکند که درباره موضوع تحقیق کردهاید، مطالب موجود در منابع مرتبط را با دقت جذب کردهاید و تشخیص دادهاید که چندین APK مسیر مناسبی برای برنامه شما هستند.
خواسته های خود را نمودار کنید
با ایجاد یک نمودار ساده شروع کنید تا به سرعت تعیین کنید به چند APK نیاز دارید و هر APK چه محدوده API را پوشش می دهد. برای مرجع مفید، صفحه نسخههای پلتفرم وبسایت برنامهنویس Android دادههایی را درباره تعداد نسبی دستگاههای فعالی که یک نسخه معین از پلتفرم Android را اجرا میکنند، ارائه میکند. همچنین، اگرچه در ابتدا آسان به نظر می رسد، ردیابی مجموعه ای از سطوح API که هر APK قرار است هدف قرار دهد، به سرعت دشوار می شود، به خصوص اگر قرار باشد مقداری همپوشانی وجود داشته باشد (اغلب وجود دارد). خوشبختانه، ترسیم نیازهای خود به سرعت، به راحتی و داشتن یک مرجع آسان برای بعد آسان است.
برای ایجاد نمودار APK چندگانه، با ردیفی از سلولها شروع کنید که سطوح مختلف API پلتفرم Android را نشان میدهند. یک سلول اضافی در انتهای آن قرار دهید تا نسخههای آینده اندروید را نشان دهد.
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | + |
اکنون فقط در نمودار طوری رنگ کنید که هر رنگ یک APK را نشان دهد. در اینجا یک مثال از نحوه اعمال هر APK در محدوده خاصی از سطوح API آورده شده است.
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | + |
هنگامی که این نمودار را ایجاد کردید، آن را در تیم خود توزیع کنید. ارتباط تیمی در پروژه شما بلافاصله سادهتر شد، زیرا به جای اینکه بپرسید "APK برای سطوح API 3 تا 6 چگونه است، میدانید، Android 1.x one. چطور پیش میآید؟" شما می توانید به سادگی بگویید "APK Blue چگونه به دست می آید؟"
همه کدها و منابع رایج را در یک پروژه کتابخانه قرار دهید
چه در حال تغییر یک برنامه اندرویدی موجود باشید و چه از ابتدا شروع کنید، این اولین کاری است که باید با پایگاه کد انجام دهید و تا حد زیادی مهمترین آن است. هر چیزی که وارد پروژه کتابخانه می شود فقط باید یک بار به روز شود (به رشته های محلی سازی شده با زبان، تم های رنگی، اشکالات رفع شده در کد مشترک فکر کنید)، که زمان توسعه شما را بهبود می بخشد و احتمال اشتباهاتی را کاهش می دهد که به راحتی می توان از آنها اجتناب کرد.
توجه: در حالی که جزئیات پیادهسازی نحوه ایجاد و گنجاندن پروژههای کتابخانه فراتر از محدوده این درس است، میتوانید با خواندن «ایجاد کتابخانه 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 را که قبلاً توضیح داده شد، در نظر بگیریم و فرض کنیم که حداکثر سطح API را برای هیچ یک از APK ها تنظیم نکرده ایم. به صورت جداگانه، محدوده احتمالی هر APK به شکل زیر است:
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | + |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | + |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | + |
از آنجا که لازم است یک APK با minSdkVersion بالاتر نیز دارای کد نسخه بالاتر باشد، میدانیم که از نظر مقادیر versionCode، قرمز ≥ سبز ≥ آبی است. بنابراین می توانیم به طور موثر نمودار را به شکل زیر جمع کنیم:
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | + |
حالا، بیایید بیشتر فرض کنیم که Red APK دارای برخی الزامات است که دو مورد دیگر ندارند. فیلترها در صفحه Google Play راهنمای برنامه نویس اندروید دارای فهرست کاملی از مقصران احتمالی است. برای مثال، اجازه دهید فرض کنیم که رنگ قرمز به دوربین جلویی نیاز دارد. در واقع، تمام هدف APK قرمز ترکیب دوربین جلو با عملکرد جدید شیرینی است که در API 11 اضافه شده است. اما، معلوم شد، همه دستگاه هایی که از API 11 پشتیبانی می کنند، حتی دوربین جلو ندارند! وحشت!
خوشبختانه، اگر کاربری در حال مرور Google Play از یکی از این دستگاهها باشد، Google Play به مانیفست نگاه میکند، میبیند که Red دوربین جلویی را به عنوان یک الزام فهرست میکند و به آرامی آن را نادیده میگیرد و تشخیص میدهد که Red و آن دستگاه یک دستگاه نیستند. مسابقه ساخته شده در بهشت دیجیتال سپس متوجه میشود که گرین نه تنها با دستگاههای دارای API 11 سازگاری رو به جلو دارد (از آنجایی که maxSdkVersion تعریف نشده است)، بلکه برای آن مهم نیست که دوربین جلویی وجود داشته باشد یا خیر! این برنامه همچنان می تواند توسط کاربر از Google Play دانلود شود، زیرا علیرغم تمام اتفاقات ناگوار دوربین جلو، هنوز یک APK وجود داشت که از آن سطح API خاص پشتیبانی می کرد.
برای اینکه همه فایلهای APK خود را در مسیرهای جداگانه نگه دارید، داشتن یک طرح کد نسخه خوب مهم است. مورد تو��یه شده را می توان در قسمت کدهای نسخه راهنمای توسعه دهنده ما یافت. از آنجایی که مجموعه نمونه APK فقط با یکی از 3 بعد ممکن سروکار دارد، کافی است هر APK را 1000 جدا کنید، دو رقم اول را روی minSdkVersion برای آن APK خاص تنظیم کنید و از آنجا افزایش دهید. این ممکن است به نظر برسد:
آبی: 03001, 03002, 03003, 03004...
سبز: 07001, 07002, 07003, 07004...
قرمز: 11001، 11002، 11003، 11004...
با کنار هم گذاشتن همه اینها، مانیفست های Android شما احتمالاً چیزی شبیه به زیر است:
آبی:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="03001" android:versionName="1.0" package="com.example.foo"> <uses-sdk android:minSdkVersion="3" /> ...
سبز:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="07001" android:versionName="1.0" package="com.example.foo"> <uses-sdk android:minSdkVersion="7" /> ...
قرمز:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="11001" android:versionName="1.0" package="com.example.foo"> <uses-sdk android:minSdkVersion="11" /> ...
چک لیست قبل از راه اندازی خود را مرور کنید
قبل از آپلود در Google Play، موارد زیر را دوباره بررسی کنید. به یاد داشته باشید که این موارد به طور خاص به چندین APK مرتبط هستند و به هیچ وجه یک چک لیست کامل برای همه برنامههایی که در Google Play آپلود میشوند را نشان نمیدهند.
- همه APK ها باید یک نام بسته داشته باشند
- همه فایلهای APK باید با یک گواهی امضا شوند
- اگر فایلهای APK در نسخه پلتفرم همپوشانی دارند، نسخه با minSdkVersion بالاتر باید کد نسخه بالاتری داشته باشد.
- فیلترهای مانیفست خود را برای اطلاعات متناقض بررسی کنید (یک 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: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240'
وقتی خروجی aapt را بررسی میکنید، مطمئن شوید که مقادیر متناقضی برای صفحههای پشتیبانی و صفحههای سازگار نداشته باشید، و مقادیر «مصرف-ویژگی» ناخواستهای که در نتیجه مجوزهای شما اضافه شدهاند نداشته باشید. در مانیفست تنظیم شود. در مثال بالا، APK برای بسیاری از دستگاهها قابل مشاهده نخواهد بود.
چرا؟ با افزودن مجوز مورد نیاز SEND_SMS، ویژگی مورد نیاز android.hardware.telephony به طور ضمنی اضافه شد. از آنجایی که API 11 Honeycomb است (نسخه اندرویدی که به طور خاص برای تبلت ها بهینه شده است) و هیچ دستگاه Honeycomb دارای سخت افزار تلفنی نیست، Google Play این APK را در همه موارد فیلتر می کند، تا زمانی که دستگاه های بعدی در سطح API بالاتری قرار بگیرند و دارای آن باشند. سخت افزار تلفن
خوشبختانه این مشکل با افزودن موارد زیر به مانیفست خود به راحتی برطرف می شود:
<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 ها دستگاه های مورد نظر را هدف قرار می دهند، برنامه را روی هر دستگاه آزمایشی که ممکن است داشته باشید دانلود کنید. تبریک می گویم، کار شما تمام شد!