محدودیت‌های واسط‌های غیرکیت توسعه نرم‌افزار

از Android 9 (سطح API ‏۲۸)، پلاتفرم واسط‌های غیرکیت توسعه نرم‌افزاری را که برنامه‌تان می‌تواند استفاده کند محدود می‌کند. این محدودیت‌ها هر زمان که برنامه‌ای به میانای غیرکیت توسعه نرم‌افزار ارجاع دهد یا تلاش کند بااستفاده از بازتاب یا JNI دستگیره آن را دریافت کند اعمال می‌شود. این محدودیت‌ها برای کمک به بهبود تجربه کاربر و توسعه‌دهنده و کاهش خطر خرابی برای کاربران و عرضه اضطراری برای توسعه‌دهندگان اعمال شده است. برای اطلاعات بیشتر درباره این تصمیم، بهبود پایداری با کاهش استفاده از میاناهای غیرکیت توسعه نرم‌افزار را ببینید.

تشخیص تفاوت بین میاناهای کیت توسعه نرم‌افزار و میاناهای غیر کیت توسعه نرم‌افزار

به‌طور کلی، میاناهای عمومی «کیت توسعه نرم‌افزار» آن‌هایی هستند که در نمایه بسته چارچوب Android مستند شده‌اند. مدیریت میاناهای غیرکیت توسعه نرم‌افزار جزئیات پیاده‌سازی است که میانای برنامه‌سازی کاربردی آن را انتزاعی می‌کند، بنابراین این میان‌ها ممکن است بدون اطلاع قبلی تغییر کنند.

برای جلوگیری از خرابی و رفتار غیرمنتظره، برنامه‌ها باید فقط از بخش‌های مستندشده رسمی کلاس‌ها در کیت توسعه نرم‌افزار استفاده کنند. این یعنی وقتی با کلاسی بااستفاده از سازوکارهایی مثل بازتاب تعامل می‌کنید، نباید به روش‌ها یا فیلدهایی که در کیت توسعه نرم‌افزار فهرست نشده‌اند دسترسی پیدا کنید.

فهرست‌های میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار

با هر نسخه جدید Android، میاناهای غیرکیت توسعه نرم‌افزار بیشتری محدود می‌شوند. می‌دانیم این محدودیت‌ها می‌تواند بر گردش کار انتشار شما تأثیر بگذارد و می‌خواهیم مطمئن شویم که ابزارهای لازم برای شناسایی استفاده از میاناهای غیر SDK را دارید، فرصتی برای ارائه بازخورد به ما دارید، و زمان کافی برای برنامه‌ریزی و سازگاری با خط‌مشی‌های جدید دارید.

برای به‌حداقل رساندن تأثیر محدودیت‌های غیرکیت توسعه نرم‌افزار بر گردش کار توسعه، میاناهای غیرکیت توسعه نرم‌افزار به فهرست‌هایی تقسیم می‌شوند که میزان محدودیت استفاده از آن‌ها را براساس سطح میانای برنامه‌سازی کاربردی هدف تعریف می‌کنند. جدول زیر هریک از این فهرست‌ها را شرح می‌دهد:

فهرست برچسب‌های کد شرح
فهرست مسدودها
  • blocked
  • منسوخ‌شده: blacklist
میاناهای غیرکیت توسعه نرم‌افزار که صرف‌نظر از سطح میانای برنامه‌سازی کاربردی هدف برنامه‌تان نمی‌توانید از آن‌ها استفاده کنید. اگر برنامه‌تان تلاش کند به یکی از این میاناهای دسترسی پیدا کند، سیستم خطایی را نشان می‌دهد.
مسدودشده مشروط
  • max-target-x
  • منسوخ‌شده: greylist-max-x

از Android 9 (سطح ای‌پی‌آی ۲۸)، هر سطح ای‌پی‌آی دارای میاناهای غیرکیت توسعه نرم‌افزار است که وقتی برنامه‌ای آن سطح ای‌پی‌آی را هدف قرار می‌دهد، محدود می‌شوند.

این فهرست‌ها با حداکثر سطح میانای برنامه‌سازی کاربردی (max-target-x) برچسب‌گذاری شده‌اند که برنامه می‌تواند قبل‌از اینکه دیگر نتواند به میاناهای غیرکیت توسعه نرم‌افزار در آن فهرست دسترسی داشته باشد، هدف قرار دهد. برای مثال، میانای غیرکیت توسعه نرم‌افزار که در Android Pie مسدود نشده بود اما اکنون در Android 10 مسدود شده است بخشی از فهرست max-target-p (greylist-max-p) است که در آن «p» به‌معنای Pie یا Android 9 (سطح میانای برنامه‌سازی کاربردی ۲۸) است.

اگر برنامه‌تان تلاش کند به میانایی دسترسی پیدا کند که برای سطح میانای برنامه‌سازی کاربردی هدف شما محدود شده است، سیستم طوری رفتار می‌کند که گویی میانای برنامه‌سازی کاربردی بخشی از فهرست غیرمجازها است.

پشتیبانی‌نشده
  • unsupported
  • منسوخ‌شده: greylist
میاناهای غیرکیت توسعه نرم‌افزار که نامحدود هستند و برنامه‌تان می‌تواند از آن‌ها استفاده کند. بااین‌حال، توجه داشته باشید که این میاناهای کاربری پشتیبانی نمی‌شوند و ممکن است بدون اطلاع قبلی تغییر کنند. انتظار می‌رود این میاناهای کاربری در نسخه‌های آتی Android به‌طور مشروط در فهرست max-target-x مسدود شوند.
کیت توسعه نرم‌افزار (SDK)
  • ‫public-api و sdk
  • منسوخ‌شده: public-api و whitelist
میاناهایی که می‌توانند آزادانه استفاده شوند و اکنون به‌عنوان بخشی از نمایه بسته چارچوب Android که به‌طور رسمی مستند شده است پشتیبانی می‌شوند.
میاناهای برنامه‌سازی کاربردی آزمایشی
  • test-api
میاناهایی که برای آزمایش سیستم داخلی استفاده می‌شوند، مثل میاناهای برنامه‌سازی کاربردی که آزمایش را ازطریق «مجموعه آزمایش سازگاری» (CTS) تسهیل می‌کنند. میاناهای برنامه‌سازی کاربردی آزمایشی بخشی از کیت توسعه نرم‌افزار نیستند. از Android 11 (سطح API‏ ۳۰)، میاناهای برنامه‌سازی کاربردی آزمایشی در فهرست غیرمجازها قرار می‌گیرند، بنابراین برنامه‌ها بدون توجه به سطح میانای برنامه‌سازی کاربردی هدفشان مجاز به استفاده از آن‌ها نیستند. همه میاناهای برنامه‌سازی کاربردی آزمایشی پشتیبانی‌نشده هستند و ممکن است بدون اطلاع قبلی تغییر کنند، صرف‌نظر از سطح میانای برنامه‌سازی کاربردی پلاتفرم.

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

تعیین اینکه میانای موردنظر به کدام فهرست تعلق دارد

فهرست‌های میاناهای غیرکیت توسعه نرم‌افزار به‌عنوان بخشی از پلاتفرم ساخته شده‌اند. برای کسب اطلاعات درباره هر نسخه Android، بخش‌های زیر را ببینید.

‫Android 16

برای Android 16 (سطح میانای برنامه‌سازی کاربردی ۳۶)، می‌توانید فایل زیر را که همه میاناهای غیرکیت توسعه نرم‌افزار و فهرست‌های مربوطه آن‌ها را شرح می‌دهد بارگیری کنید:

فایل: hiddenapi-flags.csv

جمع‌آزمای SHA-256: 9102af02fe6ab68b92464bdff5e5b09f3bd62c65d1130aaf85d3296f17d38074

برای کسب اطلاعات بیشتر درباره تغییرات فهرست میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار در Android 16، به‌روزرسانی‌های محدودیت‌های میانای غیرکیت توسعه نرم‌افزار در Android 16 را ببینید.

Android 15

برای Android 15 (سطح API‏ ۳۵)، می‌توانید فایل زیر را که همه میاناهای غیرکیت توسعه نرم‌افزار و فهرست‌های مربوطه آن‌ها را شرح می‌دهد بارگیری کنید:

فایل: hiddenapi-flags.csv

جمع‌آزمای SHA-256: 40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9

برای کسب اطلاعات بیشتر درباره تغییرات فهرست میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار در Android 15، به‌روزرسانی‌های محدودیت‌های میانای غیرکیت توسعه نرم‌افزار در Android 15 را ببینید.

Android 14

برای Android 14 (سطح API‏ ۳۴)، می‌توانید فایل زیر را که همه میاناهای غیرکیت توسعه نرم‌افزار و فهرست‌های مربوطه آن‌ها را شرح می‌دهد بارگیری کنید:

فایل: hiddenapi-flags.csv

جمع‌آزمای SHA-256: 7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f

برای کسب اطلاعات بیشتر درباره تغییرات فهرست میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار در Android 14، به‌روزرسانی‌های محدودیت‌های میانای غیرکیت توسعه نرم‌افزار در Android 14 را ببینید.

Android 13

برای Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳)، می‌توانید فایل زیر را بارگیری کنید که همه میاناهای غیرکیت توسعه نرم‌افزار و فهرست‌های مربوط به آن‌ها را شرح می‌دهد:

فایل: hiddenapi-flags.csv

جمع‌آزمای SHA-256: 233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3

برای آشنایی بیشتر با تغییرات فهرست میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار در Android 13، ازجمله جایگزین‌های پیشنهادی میانای برنامه‌سازی کاربردی عمومی برای میاناهای برنامه‌سازی کاربردی که به‌طور مشروط در Android 13 مسدود شده‌اند، به به‌روزرسانی‌های محدودیت‌های میانای غیرکیت توسعه نرم‌افزار در Android 13 مراجعه کنید.

‫Android نسخه ۱۲

برای Android 12 (سطح میانای برنامه‌سازی کاربردی ۳۱)، می‌توانید فایل زیر را که همه واسط‌های غیرکیت توسعه نرم‌افزار و فهرست‌های مربوط به آن‌ها را شرح می‌دهد بارگیری کنید:

فایل: hiddenapi-flags.csv

جمع‌آزمای SHA-256: 40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761

برای کسب اطلاعات بیشتر درباره تغییرات فهرست میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار در Android 12، ازجمله جایگزین‌های میانای برنامه‌سازی کاربردی عمومی پیشنهادی برای میاناهای برنامه‌سازی کاربردی که به‌طور مشروط در Android 12 مسدود شده‌اند، به تغییرات فهرست برای Android 12 مراجعه کنید.

Android 11

برای Android 11 (سطح میانای برنامه‌سازی کاربردی ۳۰)، می‌توانید فایل زیر را بارگیری کنید که همه میاناهای غیر کیت توسعه نرم‌افزار و فهرست‌های مربوط به آن‌ها را شرح می‌دهد:

فایل: hiddenapi-flags.csv

جمع‌آزمای SHA-256: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

برای کسب اطلاعات بیشتر درباره تغییرات فهرست میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار در Android 11، ازجمله جایگزین‌های میانای برنامه‌سازی کاربردی عمومی پیشنهادی برای میاناهای برنامه‌سازی کاربردی که به‌طور مشروط در Android 11 مسدود شده‌اند، به تغییرات فهرست برای Android 11 مراجعه کنید.

‫Android 10

برای Android 10 (سطح میانای برنامه‌سازی کاربردی ۲۹)، می‌توانید فایل زیر را که همه میاناهای غیر کیت توسعه نرم‌افزار و فهرست‌های مربوطه آن‌ها را شرح می‌دهد بارگیری کنید:

فایل: hiddenapi-flags.csv

جمع‌آزمای SHA-256: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

برای کسب اطلاعات بیشتر درباره تغییرات فهرست میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار در Android 10، ازجمله جایگزین‌های میانای برنامه‌سازی کاربردی عمومی پیشنهادی برای میاناهای برنامه‌سازی کاربردی که به‌طور مشروط در Android 10 مسدود شده‌اند، به تغییرات فهرست برای Android 10 مراجعه کنید.

Android 9

برای Android 9 (سطح میانای برنامه‌سازی کاربردی ۲۸)، فایل نوشتاری زیر حاوی فهرست میاناهای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار است که محدود نشده‌اند (در فهرست خاکستری قرار دارند): hiddenapi-light-greylist.txt.

فهرست غیرمجازها (blacklist) و فهرست میاناهای برنامه‌سازی کاربردی مسدودشده به‌طور مشروط (فهرست خاکستری تیره) در زمان ساخت مشتق می‌شوند.

تولید فهرست از AOSP

هنگام کار با AOSP، می‌توانید فایل hiddenapi-flags.csv تولید کنید که شامل همه میاناهای غیرکیت توسعه نرم‌افزار و فهرست‌های مربوط به آن‌ها است. برای انجام این کار، منبع AOSP را بارگیری کنید و سپس فرمان زیر را اجرا کنید:

m out/soong/hiddenapi/hiddenapi-flags.csv

سپس می‌توانید فایل را در مکان زیر پیدا کنید:

out/soong/hiddenapi/hiddenapi-flags.csv

رفتار موردانتظار هنگام دسترسی به میاناهای غیر SDK محدودشده

جدول زیر رفتاری را شرح می‌دهد که می‌توانید انتظار داشته باشید اگر برنامه‌تان تلاش کند به میانای غیرکیت توسعه نرم‌افزار که بخشی از فهرست غیرمجازها است دسترسی پیدا کند.

روش‌های دسترسی نتیجه
دستورالعمل Dalvik که به فیلدی ارجاع می‌دهد ‫NoSuchFieldError پرتاب شد
دستورالعمل Dalvik که به روشی ارجاع می‌دهد ‫NoSuchMethodError پرتاب شد
بازتاب بااستفاده از Class.getDeclaredField() یا Class.getField() ‫NoSuchFieldException پرتاب شد
بازتاب بااستفاده از Class.getDeclaredMethod()، Class.getMethod() ‫NoSuchMethodException پرتاب شد
بازتاب بااستفاده از Class.getDeclaredFields()، Class.getFields() اعضای غیرکیت توسعه نرم‌افزار در نتایج نیستند
بازتاب بااستفاده از Class.getDeclaredMethods()، Class.getMethods() اعضای غیرکیت توسعه نرم‌افزار در نتایج نیستند
JNI بااستفاده از env->GetFieldID() ‫NULL برگردانده شد، NoSuchFieldError پرتاب شد
JNI بااستفاده از env->GetMethodID() ‫NULL برگردانده شد، NoSuchMethodError پرتاب شد

آزمایش کردن برنامه برای میاناهای غیرکیت توسعه نرم‌افزار

روش‌های متعددی وجود دارد که می‌توانید برای آزمایش میاناهای غیرکیت توسعه نرم‌افزار در برنامه‌تان استفاده کنید.

آزمایش بااستفاده از برنامه قابل‌اشکال‌زدایی

می‌توانید میاناهای غیر کیت توسعه نرم‌افزار را با ساختن و اجرای برنامه قابل‌اشکال‌زدایی در دستگاه یا شبیه‌ساز دارای Android نسخه ۹ (سطح میانای برنامه‌سازی کاربردی ۲۸) یا بالاتر آزمایش کنید. مطمئن شوید دستگاه یا شبیه‌سازی که استفاده می‌کنید با سطح میانای برنامه‌سازی کاربردی هدف برنامه‌تان مطابقت داشته باشد.

هنگام اجرای آزمایش‌ها در برنامه‌تان، اگر برنامه‌تان به میاناهای غیرکیت توسعه نرم‌افزار خاصی دسترسی داشته باشد، سیستم پیام گزارش چاپ می‌کند. می‌توانید پیام‌های گزارش برنامه را بازرسی کنید تا جزئیات زیر را پیدا کنید:

  • کلاس، نام، و نوع اعلام‌کننده (در قالبی که توسط زمان اجرای Android استفاده می‌شود).
  • روش دسترسی: پیوند دادن، استفاده از بازتاب، یا استفاده از JNI.
  • میانای غیر کیت توسعه نرم‌افزار به کدام فهرست تعلق دارد.

می‌توانید از adb logcat برای دسترسی به این پیام‌های گزارش استفاده کنید که در زیر شناسه پردازش برنامه درحال اجرا نشان داده می‌شود. برای مثال، ورودی گزارش ممکن است به‌صورت زیر باشد:

Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)

آزمایش بااستفاده از StrictMode API

همچنین می‌توانید بااستفاده از میانای برنامه‌سازی کاربردی StrictMode، واسط‌های غیرکیت توسعه نرم‌افزار را آزمایش کنید. از روش detectNonSdkApiUsage برای فعال کردن این مورد استفاده کنید. پس‌از فعال کردن StrictMode API، می‌توانید بااستفاده از penaltyListener، که در آن می‌توانید مدیریت سفارشی را پیاده‌سازی کنید، برای هر استفاده از میانای غیرکیت توسعه نرم‌افزار، یک فراخوانی برگشتی دریافت کنید. شیء Violation ارائه‌شده در فراخوانی برگشتی از Throwable مشتق شده است و ردیابی پشته ضمیمه‌شده بافت استفاده را ارائه می‌دهد.

آزمایش بااستفاده از ابزار lint در «استودیو Android»

هرزمان که برنامه‌تان را در Android Studio می‌سازید، ابزار lint کد شما را برای مشکلات احتمالی بررسی می‌کند. اگر برنامه‌تان از میاناهای غیر کیت توسعه نرم‌افزار استفاده می‌کند، ممکن است بسته به اینکه این میاناهای به کدام فهرست تعلق دارند، خطاها یا هشدارهای ساخت را ببینید.

همچنین می‌توانید ابزار lint را از خط فرمان اجرا کنید یا بازرسی‌ها را به‌صورت دستی روی پروژه، پوشه، یا فایل خاصی اجرا کنید.

آزمایش بااستفاده از «کنسول Play»

وقتی برنامه‌تان را در دسته هدف آزمایشی در «کنسول Play» بارگذاری می‌کنید، برنامه‌تان به‌طور خودکار ازنظر مشکلات احتمالی آزمایش می‌شود و گزارش پیش‌از راه‌اندازی تولید می‌شود. اگر برنامه‌تان از میاناهای غیر کیت توسعه نرم‌افزار استفاده می‌کند، بسته به اینکه این میاناهای به کدام فهرست تعلق دارند، خطا یا هشداری در گزارش پیش‌ازراه‌اندازی نمایش داده می‌شود.

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

درخواست میانای برنامه‌سازی کاربردی عمومی جدید

اگر نمی‌توانید جایگزینی برای استفاده از میانای غیرکیت توسعه نرم‌افزار برای ویژگی‌ای در برنامه‌تان پیدا کنید، می‌توانید با ایجاد درخواست ویژگی در ردیاب مشکل ما، میانای برنامه‌سازی کاربردی عمومی جدیدی درخواست کنید.

هنگام ایجاد درخواست ویژگی، اطلاعات زیر را ارائه دهید:

  • از کدام میانای برنامه‌سازی کاربردی پشتیبانی‌نشده استفاده می‌کنید، ازجمله توصیف‌گر کامل دیده‌شده در پیام Accessing hidden ... logcat.
  • چرا باید از این میاناهای برنامه‌سازی کاربردی استفاده کنید، ازجمله جزئیاتی درباره ویژگی سطح بالا که میانای برنامه‌سازی کاربردی برای آن ضروری است، نه فقط جزئیات سطح پایین.
  • چرا میاناهای برنامه‌سازی کاربردی عمومی مرتبط با کیت توسعه نرم‌افزار برای اهداف شما کافی نیستند.
  • هر گزینه جایگزین دیگری که امتحان کرده‌اید و دلیل اینکه چرا این گزینه‌ها کارساز نبوده‌اند.

وقتی این جزئیات را در درخواست ویژگی‌تان ارائه می‌دهید، احتمال اینکه میانای برنامه‌سازی کاربردی عمومی جدیدی اعطا شود را افزایش می‌دهید.

پرسش‌های دیگر

این بخش شامل پاسخ به برخی سؤالات دیگری است که توسعه‌دهندگان اغلب می‌پرسند:

پرسش‌های عمومی

‫Google چطور می‌تواند مطمئن شود که می‌تواند نیازهای همه برنامه‌ها را ازطریق issuetracker دریافت کند؟

فهرست‌های اولیه را برای Android 9 (سطح API‏ ۲۸) ازطریق تحلیل ایستا برنامه‌هایی ایجاد کردیم که بااستفاده از روش‌های زیر تکمیل شده بودند:

  • آزمایش دستی برنامه‌های برتر Play و غیرPlay
  • گزارش‌های داخلی
  • جمع‌آوری خودکار داده‌ها از کاربران داخلی
  • گزارش‌های پیش‌نمای توسعه‌دهندگان نرم‌افزار
  • تجزیه‌وتحلیل ایستا اضافی که برای گنجاندن موارد مثبت کاذب بیشتر به‌صورت محافظه‌کارانه طراحی شده است

هنگام ارزیابی فهرست‌ها برای هر نسخه جدید، استفاده از میانای برنامه‌سازی کاربردی و همچنین بازخورد توسعه‌دهنده را ازطریق ردیاب مشکل درنظر می‌گیریم.

چگونه می‌توانم دسترسی به میاناهای غیرکیت توسعه نرم‌افزار را فعال کنم؟

بااستفاده از فرمان‌های adb برای تغییر خط‌مشی اجرای API، می‌توانید دسترسی به میاناهای غیرکیت توسعه نرم‌افزار را در دستگاه‌های توسعه فعال کنید. فرمان‌هایی که استفاده می‌کنید، بسته به سطح میانای برنامه‌سازی کاربردی متفاوت است. این فرمان‌ها به دستگاه با دسترسی ریشه‌ای نیاز ندارند.

‫Android 10 (سطح API‏ ۲۹) یا بالاتر

برای فعال کردن دسترسی، از adb زیر استفاده کنید

فرمان:

adb shell settings put global hidden_api_policy  1

برای بازنشانی خط‌مشی رویه‌های اجرایی میانای برنامه‌سازی کاربردی به تنظیمات پیش‌فرض، از فرمان زیر استفاده کنید:

adb shell settings delete global hidden_api_policy
Android 9 (سطح میانای برنامه‌سازی کاربردی ۲۸)

برای فعال کردن دسترسی، از فرمان‌های adb زیر استفاده کنید:

adb shell settings put global hidden_api_policy_pre_p_apps  1
adb shell settings put global hidden_api_policy_p_apps 1

برای بازنشانی خط‌مشی رویه‌های اجرایی میانای برنامه‌سازی کاربردی به تنظیمات پیش‌فرض، از فرمان‌های زیر استفاده کنید:

adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps

می‌توانید عدد صحیح را در خط‌مشی رویه‌های اجرایی API روی یکی از مقادیر زیر تنظیم کنید:

  • 0: غیرفعال کردن همه تشخیص‌های میاناهای غیر کیت توسعه نرم‌افزار. استفاده از این تنظیمات، همه پیام‌های گزارش را برای استفاده از میانای غیرکیت توسعه نرم‌افزار غیرفعال می‌کند و مانع از آزمایش برنامه‌تان بااستفاده از میانای برنامه‌سازی کاربردی StrictMode می‌شود. این تنظیم توصیه نمی‌شود.
  • ‫۱: دسترسی به همه میاناهای غیر کیت توسعه نرم‌افزار را فعال می‌کند، اما پیام‌های گزارش را با هشدارهایی برای هرگونه استفاده از میانای غیر کیت توسعه نرم‌افزار چاپ می‌کند. بااستفاده از این تنظیم همچنین می‌توانید برنامه‌تان را بااستفاده از StrictMode API آزمایش کنید.
  • ‫۲: استفاده از میاناهای غیرکیت توسعه نرم‌افزار را که به فهرست غیرمجازها تعلق دارند یا به‌طور مشروط برای سطح میانای برنامه‌سازی کاربردی هدف شما مسدود شده‌اند غیرمجاز کنید.

سؤالات درباره فهرست‌های میانای غیرکیت توسعه نرم‌افزار

کجا می‌توانم فهرست‌های میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار را در ایمیج سیستم پیدا کنم؟

آن‌ها در بیت‌های پرچم دسترسی به فیلد و روش در فایل‌های dex پلاتفرم کدگذاری شده‌اند. فایل جداگانه‌ای در ایمیج سیستم وجود ندارد که حاوی این فهرست‌ها باشد.

آیا فهرست‌های میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار در دستگاه‌های OEM مختلف با نسخه‌های Android یکسان، یکسان هستند؟

سازندگان تجهیزات اصلی می‌توانند میاناهای خودشان را به فهرست غیرمجازها (فهرست سیاه) اضافه کنند، اما نمی‌توانند میانایی را از فهرست‌های میانای برنامه‌سازی کاربردی غیرکیت توسعه نرم‌افزار AOSP بردارند. CDD از چنین تغییراتی جلوگیری می‌کند و آزمایش‌های CTS تضمین می‌کند که «زمان اجرای Android» این فهرست را اعمال می‌کند.

آیا محدودیتی برای میاناهای غیرNDK در کد بومی وجود دارد؟

کیت توسعه نرم‌افزار Android شامل میاناهای Java است. این پلاتفرم محدود کردن دسترسی به میاناهای غیر NDK را برای کد C/C++‎ بومی در Android 7 (سطح API‏ ۲۶) شروع کرد. برای اطلاعات بیشتر، بهبود پایداری با محدودیت‌های نماد خصوصی C/C++‎ در Android N را ببینید.

آیا برنامه‌ای برای محدود کردن dex2oat یا دستکاری فایل DEX وجود دارد؟

ما برنامه‌های فعالی برای محدود کردن دسترسی به باینری dex2oat نداریم، اما قصد نداریم قالب فایل DEX پایدار باشد یا به‌عنوان یک رابط عمومی فراتر از بخش‌هایی که به‌طور عمومی در قالب Dalvik Executable مشخص شده‌اند، عمل کند. ما این حق را برای خود محفوظ می‌داریم که dex2oat و بخش‌های نامشخص قالب DEX را در هر زمانی تغییر دهیم یا حذف کنیم. همچنین توجه داشته باشید که فایل‌های مشتق‌شده تولیدشده توسط dex2oat مانند ODEX (که با نام OAT نیز شناخته می‌شود)، VDEX، و CDEX همگی قالب‌های نامشخص هستند.

اگر یک کیت توسعه نرم‌افزار شخص ثالث حیاتی (برای مثال، یک مبهم‌ساز) نتواند از استفاده از میاناهای غیر کیت توسعه نرم‌افزار اجتناب کند، اما متعهد شود که سازگاری با نسخه‌های آینده Android را حفظ کند، چه اتفاقی می‌افتد؟ آیا Android می‌تواند در این مورد از الزامات سازگاری خود صرف‌نظر کند؟

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

آیا محدودیت‌های میانای غیرکیت توسعه نرم‌افزار برای همه برنامه‌ها ازجمله برنامه‌های سیستم و طرف اول اعمال می‌شود، نه فقط برنامه‌های طرف سوم؟

بله، اما برنامه‌هایی را که با کلید پلاتفرم امضا شده‌اند و برخی‌از برنامه‌های تصویر سیستم را معاف می‌کنیم. توجه داشته باشید که این معافیت‌ها فقط برای برنامه‌هایی اعمال می‌شود که بخشی از ایمیج سیستم هستند (یا برنامه‌های ایمیج سیستم به‌روزشده). این فهرست فقط برای برنامه‌هایی است که براساس میاناهای برنامه‌سازی کاربردی پلاتفرم خصوصی ساخته شده‌اند، نه میاناهای برنامه‌سازی کاربردی کیت توسعه نرم‌افزار (که LOCAL_PRIVATE_PLATFORM_APIS := true).