Другие вопросы по этой теме были заданы здесь:
Классы для проверки разрешений Android
как проверяются разрешения безопасности Android при запуске -время?
Как Android применяет разрешения?
Но ни один из них не отвечает на то, что я пытаюсь выяснить. Я хочу знать, где именно я могу найти функции или методы, которые буквально проверяют разрешения, которые я запрашиваю, чтобы узнать, разрешено ли мне иметь это разрешение. В частности, я хочу узнать, что происходит с разрешениями Android Instant Apps, поскольку IA разрешает только часть всех разрешений Android (список можно найти здесь https://developer.android.com/topic/google-play-instant/faqs).
Для них должна быть где-то проверка, метод белого списка, который принимает разрешения, которые я запрашиваю, понимает, что мое приложение является мгновенным приложением (а не обычным), и поэтому он знает, что нужно проверять то, что я запросил, по этому ограниченному списку. Только. Таким образом, я не могу запрашивать разрешения, которые даже не должны быть разрешены.
Я хочу понять и посмотреть, где это происходит, исходный код этих проверок, особенно для Instant Apps. Я начал с функции checkSelfPermissions(), используемой при реализации разрешений среды выполнения Android. Благодаря функции трассировки вызова функции в Android Studio и внешней ссылке (http://androidxref.com) я вернулся к насколько это возможно, пока не нашел файл Context.java (http://androidxref.com/8.1.0_r33/xref/frameworks/base/core/java/android/content/Context.java), в котором есть объявления прототипа с комментариями для каждой функции.
public abstract int checkPermission(@NonNull Разрешение строки, int pid, int uid);
Я просто не знаю, где найти определения с фактическим телом функции и кодом для нее. В Context.java их нет. И я думаю, что я все больше и больше спускаюсь в кроличью нору и слишком низкоуровневый с этим: http://androidxref.com/8.1.0_r33/xref/frameworks/base/core/java/android/content/pm/PackageManager.java#532
http://androidxref.com/8.1.0_r33/xref/frameworks/native/libs/binder/IPermissionController.cpp#39
http://androidxref.com/8.1.0_r33/xref/frameworks/native/libs/binder/IPermissionController.cpp#39
особенно последние два, которые я не только не знаю, на правильном ли я пути с ними, но я пытаюсь выяснить, что функция remote()->transact сейчас и где она определена, но мы находимся в Android Родная территория С++ теперь...
Любая помощь или указатели будут очень признательны, ведь не так уж сложно просто просмотреть исходный код AOSP, верно?