محدودیت در رابط های غیر SDK

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

بین رابط های SDK و غیر SDK تفاوت قائل شوید

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

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

لیست های غیر SDK API

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

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

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

با شروع Android 9 (سطح API 28)، هر سطح API دارای رابط های غیر SDK است که زمانی که یک برنامه آن سطح API را هدف قرار می دهد، محدود می شود.

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

اگر برنامه شما سعی کند به رابطی دسترسی پیدا کند که برای سطح API هدف شما محدود شده است، سیستم طوری رفتار می کند که گویی API بخشی از فهرست مسدود شده است .

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

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

تعیین کنید که یک رابط به کدام لیست تعلق دارد

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

Android 16 (پیش‌نمایش برنامه‌نویس)

برای اندروید 16، می‌توانید فایل زیر را دانلود کنید که تمام رابط‌های غیر SDK و لیست‌های مربوط به آن‌ها را توضیح می‌دهد:

فایل: hiddenapi-flags.csv

SHA-256 checksum: a22d5c2fa9c24ec0b864f0680208e9794222d1921114abe3245979143ce6d1c6

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

اندروید 15

برای Android 15 (سطح API 35)، می‌توانید فایل زیر را دانلود کنید که تمام رابط‌های غیر SDK و لیست‌های مربوط به آن‌ها را توضیح می‌دهد:

فایل: hiddenapi-flags.csv

SHA-256 checksum: 40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9

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

اندروید 14

برای Android 14 (سطح API 34)، می‌توانید فایل زیر را دانلود کنید که تمام رابط‌های غیر SDK و لیست‌های مربوط به آن‌ها را توضیح می‌دهد:

فایل: hiddenapi-flags.csv

SHA-256 checksum: 7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f

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

اندروید 13

برای Android 13 (سطح API 33)، می‌توانید فایل زیر را دانلود کنید که تمام رابط‌های غیر SDK و لیست‌های مربوط به آن‌ها را توضیح می‌دهد:

فایل: hiddenapi-flags.csv

SHA-256 checksum: 233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3

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

اندروید 12

برای Android 12 (سطح API 31)، می‌توانید فایل زیر را دانلود کنید که همه رابط‌های غیر SDK و لیست‌های مربوط به آن‌ها را توضیح می‌دهد:

فایل: hiddenapi-flags.csv

SHA-256 checksum: 40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761

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

اندروید 11

برای Android 11 (سطح API 30)، می‌توانید فایل زیر را دانلود کنید که همه رابط‌های غیر SDK و لیست‌های مربوط به آن‌ها را توضیح می‌دهد:

فایل: hiddenapi-flags.csv

SHA-256 checksum: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

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

اندروید 10

برای Android 10 (سطح API 29)، می‌توانید فایل زیر را دانلود کنید که تمام رابط‌های غیر SDK و لیست‌های مربوط به آن‌ها را توضیح می‌دهد:

فایل: hiddenapi-flags.csv

SHA-256 checksum: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

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

اندروید 9

برای Android 9 (سطح API 28)، فایل متنی زیر حاوی لیستی از APIهای غیر SDK است که محدود نیستند (فهرست خاکستری): hiddenapi-light-greylist.txt .

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

ایجاد لیست از AOSP

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

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

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

out/soong/hiddenapi/hiddenapi-flags.csv

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

جدول زیر رفتاری را توصیف می‌کند که می‌توانید در صورت تلاش برنامه شما برای دسترسی به یک رابط غیر SDK که بخشی از فهرست مسدود است، انتظار داشته باشید.

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

برنامه خود را برای رابط های غیر SDK آزمایش کنید

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

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

می‌توانید رابط‌های غیر SDK را با ساختن و اجرای یک برنامه قابل اشکال‌زدایی روی دستگاه یا شبیه‌ساز دارای Android 9 (سطح API 28) یا بالاتر آزمایش کنید. مطمئن شوید که دستگاه یا شبیه‌سازی که استفاده می‌کنید با سطح API هدف برنامه شما مطابقت داشته باشد.

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

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

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

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

با استفاده از StrictMode API تست کنید

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

با استفاده از ابزار veridex تست کنید

همچنین می توانید ابزار تجزیه و تحلیل استاتیک veridex را بر روی APK خود اجرا کنید. ابزار veridex کل پایگاه کد APK از جمله کتابخانه های شخص ثالث را اسکن می کند و هرگونه استفاده از رابط های غیر SDK را که پیدا می کند گزارش می دهد.

محدودیت های ابزار veridex شامل موارد زیر است:

  • نمی‌تواند فراخوان‌ها را از طریق JNI شناسایی کند.
  • فقط می تواند زیر مجموعه ای از فراخوان ها را از طریق بازتاب تشخیص دهد.
  • تجزیه و تحلیل آن برای مسیرهای کد غیرفعال به بررسی سطح API محدود می شود.
  • فقط می‌تواند روی ماشین‌هایی اجرا شود که دستورالعمل‌های SSE4.2 و POPCNT را پشتیبانی می‌کنند.

ویندوز

باینری های بومی ویندوز ارائه نشده اند، اما می توانید ابزار veridex را با اجرای باینری های لینوکس با استفاده از زیرسیستم ویندوز برای لینوکس (WSL) در ویندوز اجرا کنید. قبل از انجام مراحل این بخش، WSL را نصب کرده و Ubuntu را به عنوان توزیع لینوکس خود انتخاب کنید.

پس از نصب اوبونتو، ترمینال اوبونتو را راه اندازی کنید و مراحل زیر را دنبال کنید:

  1. ابزار veridex را از مخزن از پیش ساخته شده در زمان اجرا اندروید دانلود کنید.
  2. محتویات فایل appcompat.tar.gz را استخراج کنید.
  3. در پوشه استخراج شده، فایل veridex-linux.zip را پیدا کرده و آن را استخراج کنید.
  4. به پوشه زیپ نشده بروید و سپس دستور زیر را اجرا کنید، جایی که your-app.apk APKی است که می خواهید آزمایش کنید:

    ./appcompat.sh --dex-file=your-app.apk
    

macOS

برای اجرای ابزار veridex در macOS، مراحل زیر را دنبال کنید:

  1. ابزار veridex را از مخزن از پیش ساخته شده در زمان اجرا اندروید دانلود کنید.
  2. محتویات فایل appcompat.tar.gz را استخراج کنید.
  3. در پوشه استخراج شده، فایل veridex-mac.zip را پیدا کرده و آن را استخراج کنید.
  4. به پوشه زیپ نشده بروید و سپس دستور زیر را اجرا کنید، جایی که /path-from-root/your-app.apk مسیر APK است که می خواهید آزمایش کنید، از دایرکتوری ریشه سیستم شما شروع می شود:

    ./appcompat.sh --dex-file=/path-from-root/your-app.apk
    

لینوکس

برای اجرای ابزار veridex در لینوکس، مراحل زیر را دنبال کنید:

  1. ابزار veridex را از مخزن از پیش ساخته شده در زمان اجرا اندروید دانلود کنید.
  2. محتویات فایل appcompat.tar.gz را استخراج کنید.
  3. در پوشه استخراج شده، فایل veridex-linux.zip را پیدا کرده و آن را استخراج کنید.
  4. به پوشه زیپ نشده بروید و سپس دستور زیر را اجرا کنید، جایی که your-app.apk APKی است که می خواهید آزمایش کنید:

    ./appcompat.sh --dex-file=your-app.apk
    

با استفاده از ابزار لینت اندروید استودیو تست کنید

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

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

با استفاده از کنسول Play تست کنید

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

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

درخواست یک API عمومی جدید

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

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

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

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

سوالات دیگر

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

سوالات عمومی

چگونه گوگل می‌تواند مطمئن باشد که می‌تواند نیازهای همه برنامه‌ها را از طریق ردیاب صادر کند؟

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

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

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

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

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

Android 10 (سطح API 29) یا بالاتر

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

دستور:

adb shell settings put global hidden_api_policy  1

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

adb shell settings delete global hidden_api_policy
Android 9 (سطح API 28)

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

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

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

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

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

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

سوالاتی در مورد لیست های رابط غیر SDK

از کجا می توانم لیست های غیر SDK API را در تصویر سیستم پیدا کنم؟

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

آیا لیست‌های غیر SDK API در دستگاه‌های OEM مختلف با نسخه‌های Android یکسان یکسان هستند؟

OEM ها می توانند واسط های خود را به لیست بلاک (لیست سیاه) اضافه کنند، اما نمی توانند رابط ها را از لیست های AOSP غیر SDK API حذف کنند. CDD از چنین تغییراتی جلوگیری می‌کند و تست‌های CTS اطمینان حاصل می‌کنند که Android Runtime لیست را اجرا می‌کند.

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

Android SDK شامل رابط های جاوا است. این پلتفرم شروع به محدود کردن دسترسی به رابط های غیر NDK برای کدهای C/C++ در اندروید 7 (سطح API 26) کرد. برای اطلاعات بیشتر، به بهبود پایداری با محدودیت‌های نماد C/C++ خصوصی در Android N مراجعه کنید.

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

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

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

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

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

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