有关此主题的其他问题已在这里提出:
Classes for Permission Checks Android
how are android security permissions checked at run-time?
How does Android enforce permissions?
但是他们都没有回答我要弄清楚的事情。我想知道在哪里可以找到从字面上检查我所请求的权限的函数或方法,以查看是否允许我拥有该权限。更具体地说,我想找出Android Instant Apps权限会发生什么,因为IA仅允许所有Android权限的一小部分(可以在https://developer.android.com/topic/google-play-instant/faqs处找到列表)。
对于他们来说,必须在某处进行检查,白名单方法可以获取我所请求的权限,可以理解我的应用程序是Instant App(而不是普通应用程序),因此它知道可以针对我的请求进行检查仅限于该列表。这样一来,可以确保我无法提出甚至不应该允许的权限。
我想了解并查看发生这种情况的地方,这些检查的源代码,尤其是对于Instant Apps。我从实现Android运行时权限时使用的checkSelfPermissions()函数开始。通过Android Studio和外部参照(http://androidxref.com)中的函数调用跟踪功能 我尽可能地回去,直到找到Context.java文件(http://androidxref.com/8.1.0_r33/xref/frameworks/base/core/java/android/content/Context.java),该文件包含原型声明以及每个函数的注释。
公共抽象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 native c ++领域...
任何帮助或指针都将不胜感激,只需阅读AOSP源代码就不那么难了,对吧?