Android 11 ابزارهای توسعهدهنده جدیدی را برای آزمایش و اشکالزدایی برنامهتان دربرابر تغییرات رفتاری در نسخههای جدیدتر پلاتفرم Android معرفی کرده است. این ابزارها بخشی از چارچوب همسازی هستند که به توسعهدهندگان نرمافزار امکان میدهند تغییرات ناسازگار را بهطور جداگانه بااستفاده از گزینههای توسعهدهندگان یا ADB روشن و خاموش کنند. از این انعطافپذیری برای آماده شدن جهت هدفیابی جدیدترین نسخه پایدار میانای برنامهسازی کاربردی و آزمایش کردن برنامهتان با نسخه پیشنمایش انتشار بعدی Android استفاده کنید.
وقتی از ابزارهای چارچوب همسازی استفاده میکنید، پلاتفرم Android
بهطور خودکار منطق داخلی خود را تطبیق میدهد، بنابراین لازم نیست
targetSDKVersion را تغییر دهید یا برنامهتان را برای انجام آزمایشهای پایه بازهمگردانی کنید. چون
تغییرات بهصورت جداگانه قابلتغییر هستند، میتوانید یک تغییر رفتار را در هر زمان جداسازی، آزمایش، و اشکالزدایی کنید یا اگر لازم است ابتدا چیز دیگری را آزمایش کنید، تغییر واحدی را که باعث ایجاد مشکل میشود غیرفعال کنید.
نحوه شناسایی تغییرات فعالشده
وقتی تغییر رفتار فعال میشود، میتواند بر نحوه دسترسی برنامه شما به میاناهای برنامهسازی کاربردی پلاتفرم که تحت تأثیر آن تغییر قرار گرفتهاند تأثیر بگذارد. میتوانید بررسی کنید کدام تغییرات رفتاری بااستفاده از گزینههای توسعهدهنده، logcat، یا فرمانهای ADB فعال شدهاند.
شناسایی تغییرات فعالشده بااستفاده از گزینههای توسعهدهندگان
شکل ۱. صفحه «تغییرات سازگاری برنامه» در گزینههای توسعهدهندگان.
میتوانید ببینید کدام تغییرات فعال هستند و آن تغییرات را در گزینههای توسعهدهنده دستگاه روشن یا خاموش کنید. برای دسترسی به این گزینهها، این مراحل را دنبال کنید:
- اگر گزینههای توسعهدهندگان ازقبل فعال نشده است، آنها را فعال کنید.
- برنامه «تنظیمات» دستگاه را باز کنید و به سیستم > پیشرفته > گزینههای توسعهدهنده > تغییرات سازگاری برنامه بروید.
برنامهتان را از فهرست انتخاب کنید.
هر تغییر رفتار معمولاً به یکی از دو دسته زیر تعلق دارد:
تغییراتی که بر همه برنامههایی که در آن نسخه Android اجرا میشوند تأثیر میگذارد، صرفنظر از
targetSdkVersionبرنامه.این تغییرات بهطور پیشفرض در چارچوب همسازی فعال هستند و در میانای کاربری در بخش تغییرات فعالشده پیشفرض فهرست شدهاند.
تغییراتی که فقط بر برنامههایی تأثیر میگذارد که نسخههای خاصی از Android را هدف قرار میدهند. ازآنجاییکه این تغییرات فقط بر برنامههایی تأثیر میگذارد که نسخه خاصی از Android را هدف قرار میدهند، به آنها تغییراتی که توسط
targetSDKVersionمحدود شدهاند نیز گفته میشود.اگر برنامه شما نسخه بالاتری از نسخه میانای برنامهسازی کاربردی فهرستشده را هدف قرار دهد، این تغییرات بهطور پیشفرض در چارچوب همسازی فعال میشوند. برای مثال، تغییر رفتاری که توسط
targetSDKVersionدر Android 13 (سطح میانای برنامهسازی کاربردی ۳۳) محدود شده است، در واسط کاربر در بخشی با عنوان فعالشده برای targetSdkVersion >=33 فهرست میشود. در برخیاز نسخههای قدیمیتر Android، این بخش با عنوان «فعالشده پساز کیت توسعه نرمافزار API_LEVEL» نشان داده میشود.
همچنین در شکل ۱، بخشی با عنوان تغییرات غیرفعال پیشفرض خواهید دید. تغییراتی که در این بخش قرار میگیرند میتوانند اهداف مختلفی داشته باشند. قبلاز فعال کردن این تغییرات، شرح تغییر را در فهرست چارچوب همسازی برای آن نسخه Android بخوانید.
شناسایی تغییرات فعالشده بااستفاده از logcat
برای هر تغییر رفتار، اولین باری که درطول فرایند برنامهتان، برنامه شما میانای برنامهسازی کاربردی تحتتأثیر را فراخوانی میکند، سیستم پیام logcat مانند این را خروجی میدهد:
D CompatibilityChangeReporter: Compat change id reported: 194833441; UID 10265; state: ENABLED
هر پیام logcat شامل اطلاعات زیر است:
- تغییر شناسه
- نشان میدهد کدام تغییر بر برنامه تأثیر میگذارد. این مقدار به یکی از
تغییرات رفتاری که در صفحه تغییرات سازگاری برنامه فهرست شده است نگاشت میشود
(شکل ۱ را ببینید). در این مثال،
194833441بهNOTIFICATION_PERM_CHANGE_IDنگاشت میشود. - شماره شناسایی یکتا
- نشان میدهد کدام برنامه تحتتأثیر این تغییر قرار گرفته است.
- ایالت
نشان میدهد که آیا این تغییر بر برنامه تأثیر میگذارد یا نه.
وضعیت میتواند یکی از این مقادیر باشد:
ایالت معنی ENABLEDتغییر فعال شده است و اگر برنامه از میاناهای برنامهسازی کاربردی تغییریافته استفاده کند، بر رفتار برنامه تأثیر خواهد گذاشت. DISABLEDتغییر غیرفعال است و بر برنامه تأثیر نخواهد گذاشت.
توجه: اگر این تغییر غیرفعال شده است چون
targetSDKVersionبرنامه کمتر از آستانه لازم است، وقتی برنامهtargetSDKVersionخود را برای هدفیابی نسخه بالاتر افزایش دهد، این تغییر بهطور پیشفرض فعال خواهد شد.LOGGEDاین تغییر ازطریق چارچوب همسازی ثبت میشود اما نمیتوان آن را روشن یا خاموش کرد. اگرچه این تغییر را نمیتوان روشن یا خاموش کرد، ممکن است همچنان بر رفتار برنامهتان تأثیر بگذارد. برای اطلاعات بیشتر، شرح تغییر را در فهرست چارچوب همسازی برای آن نسخه Android ببینید. در بسیاری از موارد، این نوع تغییرات آزمایشی هستند و میتوان آنها را نادیده گرفت.
شناسایی تغییرات فعالشده بااستفاده از ADB
فرمان ADB زیر را اجرا کنید تا مجموعه کامل تغییرات (هم فعالشده و هم غیرفعالشده) را در کل دستگاه ببینید:
adb shell dumpsys platform_compat
برونداد اطلاعات زیر را برای هر تغییر فهرست میکند:
- تغییر شناسه
- شناسه یکتا برای این تغییر رفتار. برای مثال،
194833441. - نام
- نام این تغییر رفتار. برای مثال،
NOTIFICATION_PERM_CHANGE_ID. - معیارهای targetSDKVersion
کدام
targetSDKVersionتغییر را محدود میکند (درصورت وجود).برای مثال، اگر این تغییر فقط برای برنامههایی فعال شده باشد که نسخه ۳۳ یا بالاتر کیت توسعه نرمافزار را هدف قرار میدهند،
enableAfterTargetSdk=32خروجی است. اگر تغییر توسطtargetSDKVersionمحدود نشده باشد،enableAfterTargetSdk=0برونداد است.- لغو کردن بسته
نام هر بسته که در آن وضعیت پیشفرض تغییر (فعال یا غیرفعال) لغو شده است.
برای مثال، اگر این تغییری است که بهطور پیشفرض فعال شده است، اگر تغییر را بااستفاده از گزینههای توسعهدهنده یا ADB خاموش کنید، نام بسته برنامهتان فهرست میشود. در این مورد، برونداد این خواهد بود:
packageOverrides={com.my.package=false}تغییراتی که توسط
targetSDKVersionمحدود شدهاند میتوانند بهطور پیشفرض فعال یا غیرفعال باشند، بنابراین فهرست بستهها میتواند شامل نمونههایی از هر دوtrueیاfalseباشد، بسته بهtargetSDKVersionهرکدام از آن برنامهها. برای مثال:packageOverrides={com.my.package=true, com.another.package=false}
درباره تغییرات خاص بیشتر بدانید
فهرست کامل تغییرات رفتاری در چارچوب همسازی بهعنوان بخشی از اسناد هر نسخه Android گنجانده شده است. برای کسب اطلاعات بیشتر، بسته به نسخه Android که برنامهتان را برای آن آزمایش میکنید، پیوندهای زیر را ببینید:
- Android 16 (سطح میانای برنامهسازی کاربردی 36)
- Android 15 (سطح میانای برنامهسازی کاربردی 35)
- Android 14 (سطح میانای برنامهسازی کاربردی 34)
- Android 13 (سطح میانای برنامهسازی کاربردی ۳۳)
- Android 12 (سطوح میانای برنامهسازی کاربردی ۳۱ و ۳۲)
- Android 11 (سطح میانای برنامهسازی کاربردی 30)
زمان تغییر وضعیت
هدف اصلی چارچوب همسازی این است که هنگام آزمایش برنامهتان با نسخههای جدیدتر Android، کنترل و انعطافپذیری را برای شما فراهم کند. این بخش برخیاز استراتژیهایی را که میتوانید برای تعیین زمان روشن یا خاموش کردن تغییرات هنگام آزمایش و اشکالزدایی برنامهتان استفاده کنید شرح میدهد.
زمان خاموش کردن تغییرات
تصمیمگیری درباره زمان خاموش کردن تغییرات معمولاً به این بستگی دارد که آیا تغییر توسط targetSDKVersion محدود شده است یا نه.
- تغییرات برای همه برنامهها فعال شد
تغییراتی که بر همه برنامهها تأثیر میگذارد بهطور پیشفرض برای نسخه پلاتفرم خاصی فعال میشود، صرفنظر از
targetSDKVersionبرنامهتان، بنابراین میتوانید با اجرای برنامهتان در آن نسخه پلاتفرم ببینید آیا برنامهتان تحتتأثیر قرار میگیرد یا نه.برای مثال، اگر درحال آماده شدن برای هدف قرار دادن Android 16 (سطح API ۳۶) هستید، میتوانید برنامهتان را در دستگاهی که Android 16 دارد نصب کنید و برنامهتان را بااستفاده از گردش کار آزمایشی معمول خود آزمایش کنید. اگر برنامهتان با مشکل مواجه شد، میتوانید تغییری را که باعث مشکل شده است غیرفعال کنید و آزمایش را برای مشکلات دیگر ادامه دهید.
این تغییرات میتواند بر همه برنامهها، صرفنظر از
targetSDKVersion، تأثیر بگذارد، بنابراین برنامهتان را برای این تغییرات قبلاز تغییراتی که توسطtargetSDKVersionمحدود شدهاند آزمایش و بهروز کنید. این کار کمک میکند مطمئن شوید که تجربه کاربران هنگام بهروزرسانی به نسخه جدید پلاتفرم افت نمیکند.همچنین باید آزمایش این تغییرات را در اولویت قرار دهید زیرا هنگام استفاده از ساخت نسخه پخش عمومی Android نمیتوانید این تغییرات را خاموش کنید. در حالت ایدهآل، باید این تغییرات را برای هر نسخه از Android درحالیکه آن نسخه در حالت پیشنمایش است آزمایش کنید.
- تغییرات محدودشده توسط
targetSDKVersion اگر برنامه شما
targetSDKVersionخاصی را هدفیابی میکند، هر تغییری که توسط آن نسخه محدود شده باشد بهطور پیشفرض فعال میشود. بنابراین، وقتیtargetSDKVersionبرنامهتان را به نسخه جدیدی تغییر میدهید، برنامهتان بهطور همزمان تحتتأثیر تغییرات جدید زیادی قرار میگیرد.چون ممکن است برنامهتان تحتتأثیر بیشاز یکی از این تغییرات قرار بگیرد، شاید لازم باشد برخیاز این تغییرات را بهطور جداگانه خاموش کنید تا بتوانید برنامهتان را آزمایش و اشکالزدایی کنید.
زمان فعال کردن تغییرات
تغییراتی که توسط targetSDKVersion خاصی محدود شدهاند، بهطور پیشفرض غیرفعال هستند
هرگاه برنامهای نسخه کیت توسعه نرمافزار پایینتری را نسبتبه نسخه محدودشده هدف قرار دهد.
معمولاً وقتی برای هدفیابی targetSdkVersion جدیدی آماده میشوید، فهرستی از تغییرات رفتاری خواهید داشت که باید برنامهتان را برای آنها آزمایش و اشکالزدایی کنید.
برای مثال، ممکن است برنامهتان را دربرابر مجموعهای از تغییرات پلاتفرم در targetSdkVersion بعدی آزمایش کنید. بااستفاده از گزینههای توسعهدهندگان یا فرمانهای ADB، میتوانید هر تغییر محدودشده را بهجای تغییر مانیفست برنامه و موافقت با همه تغییرات بهطور همزمان، بهصورت تکی فعال و آزمایش کنید.
این کنترل اضافی میتواند به شما کمک کند تغییرات را بهصورت مجزا آزمایش کنید و از اشکالزدایی و بهروزرسانی همزمان چندین بخش از برنامهتان جلوگیری کنید.
پساز فعال کردن تغییر، میتوانید برنامهتان را بااستفاده از گردشهای کاری آزمایشی معمول خودتان آزمایش و اشکالزدایی کنید. اگر با مشکلی مواجه شدید، گزارشهایتان را بررسی کنید تا به تعیین علت مشکل کمک کند. اگر مشخص نیست که مشکل بهدلیل تغییر پلاتفرم فعالشده است یا نه، آن تغییر را غیرفعال کنید و سپس آن بخش از برنامهتان را دوباره آزمایش کنید.
روشن یا خاموش کردن تغییرات
چارچوب همسازی به شما امکان میدهد هر تغییر را بااستفاده از گزینههای توسعهدهندگان یا فرمانهای ADB روشن یا خاموش کنید. ازآنجاییکه روشن یا خاموش کردن تغییرات میتواند باعث ازکار افتادن برنامه شما شود یا تغییرات امنیتی مهم را غیرفعال کند، محدودیتهایی برای زمان روشن یا خاموش کردن تغییرات وجود دارد.
تغییرات را بااستفاده از گزینههای توسعهدهندگان تغییر دهید
از گزینههای توسعهدهنده برای روشن یا خاموش کردن تغییرات استفاده کنید. برای پیدا کردن گزینههای توسعهدهنده، این مراحل را دنبال کنید:
- اگر گزینههای توسعهدهندگان ازقبل فعال نشده است، آنها را فعال کنید.
- برنامه «تنظیمات» دستگاه را باز کنید و به سیستم > پیشرفته > گزینههای توسعهدهنده > تغییرات سازگاری برنامه بروید.
- برنامهتان را از فهرست انتخاب کنید.
- از فهرست تغییرات، تغییری را که میخواهید روشن یا خاموش کنید پیدا کنید و روی کلید تکضرب بزنید.
تغییرات را بااستفاده از ADB روشن/خاموش کنید
برای روشن یا خاموش کردن تغییر بااستفاده از ADB، یکی از فرمانهای زیر را اجرا کنید:
adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAMEadb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
CHANGE_ID (برای مثال، 194833441) یا
CHANGE_NAME (برای مثال،
NOTIFICATION_PERM_CHANGE_ID) و
PACKAGE_NAME برنامهتان را ارسال کنید.
همچنین میتوانید از فرمان زیر برای بازنشانی تغییر به حالت پیشفرض آن استفاده کنید، که هرگونه لغو تنظیمشده بااستفاده از ADB یا گزینههای توسعهدهنده را حذف میکند:
adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
محدودیتهای مربوط به تغییرات کلید روشن/خاموش
بهطور پیشفرض، هر تغییر رفتار یا فعال است یا غیرفعال. تغییراتی که
بر همه برنامهها تأثیر میگذارد بهطور پیشفرض فعال است. تغییرات دیگر توسط
targetSdkVersion محدود شده است. این تغییرات بهطور پیشفرض زمانی فعال میشوند که برنامه نسخه کیت توسعه نرمافزار مربوطه یا بالاتر را هدف قرار دهد و بهطور پیشفرض زمانی غیرفعال میشوند که برنامه نسخه کیت توسعه نرمافزار پایینتر از نسخه محدودشده را هدف قرار دهد. وقتی تغییری را روشن یا خاموش میکنید، حالت پیشفرض آن را لغو میکنید.
برای جلوگیری از استفاده مخرب از چارچوب همسازی، محدودیتهایی برای زمان تغییر دادن تنظیمات وجود دارد. اینکه بتوانید تغییری را فعال یا غیرفعال کنید یا نه به نوع تغییر، قابلاشکالزدایی بودن برنامهتان، و نوع ساخت درحال اجرا در دستگاهتان بستگی دارد. جدول زیر توضیح میدهد که چه زمانی مجاز هستید انواع مختلف تغییرات را تغییر دهید:
| نوع ساخت | برنامه غیرقابلاشکالزدایی | برنامه قابلاشکالزدایی | |
|---|---|---|---|
| همه تغییرات | تغییرات محدودشده توسط targetSDKVersion | همه تغییرات دیگر | |
| ساخت «پیشنمای توسعهدهندگان نرمافزار» یا «بتا» | تغییر وضعیت امکانپذیر نیست | میتواند روشن/خاموش کند | میتواند روشن/خاموش کند |
| ساخت کاربر عمومی | تغییر وضعیت امکانپذیر نیست | میتواند روشن/خاموش کند | تغییر وضعیت امکانپذیر نیست |