Android权限是如何执行的?

如果我在JNI C方法中调用socket()函数,那么应用程序仍然会失败并出现权限错误。 如果我在AndroidManifest.xml中放置了一个uses-permission行,问题就解决了。

所以看起来Android的权限检查没有在Dalvik虚拟机上实现,因为我调用了一个本地C函数,仍然被检查。 我想知道在Android内核中执行检查的位置,或者应用程序使用ptrace来跟踪每个系统调用或其他任何方式。 非常感谢。

Solutions Collecting From Web of "Android权限是如何执行的?"

检查由Linux内核执行,使用组成员来确定访问权限。

如果您查看VM中的zygote fork代码 ,您可以使用setgroups()来查看它以设置补充组ID。 如果您在应用程序框架代码中追踪它,您可以看到它在哪里确定权限并将其传递给forkAndSpecialize()。

本地代码在SDK应用程序使用的同一个沙箱中运行,因此受到与SDK应用程序相同的安全模型的约束。

请参阅下载Android NDK :

如果您编写本机代码,则您的应用程序仍然打包为.apk文件,并且仍然在设备上的虚拟机内部运行。 基本的Android应用程序模型不会改变。