Android NDK原生权限

4
Android操作系统如何处理在NDK编译的.apk文件中运行的本机代码的权限?因为JNI只是调用本机函数,所以实际的本机代码不应受Android权限的影响。例如,我想开发一个Android应用程序(.apk),将文件写入data/system目录下。AOS已经将data/system挂载为RW,所以我已经能够轻松地开发一个执行写入操作的本机程序。我的想法是,当我使用NDK实现这个功能时,由于本机实现,我将不必设置写入该目录的权限。这个假设正确吗?
谢谢, 大卫

幸运的是,没有一种简单的方法可以绕过用户授予权限。你的假设可能适用于其中一些,但并非全部。 - harism
1个回答

1
我的想法是,当我使用NDK实现时,由于本地实现,我将不必设置写入目录的权限。这个假设正确吗? 绝对不是。权限会影响整个过程,无论您选择用什么编程语言编写。

你能详细说明一下吗?据我所知,当应用程序对给定的活动进行意图时,Activity Manager Service会执行所有Android权限。如果通过应用程序运行本地代码,它如何执行这些权限呢?在我的看来,因为意图对象仅存在于Java级别的实现中,本地代码将绕过整个过程。我还认为,在本地级别上,唯一执行的权限是由内核完成的,它可以防止某些UID和GID访问某些硬件... - David
@David:“当应用程序为给定的活动创建意图时,Activity Manager服务强制执行所有Android权限”--不是这样的。权限与Intents没有太大关系。“它如何执行这些权限?”--因为权限在需要的地方被执行。“我还以为在本地级别上,唯一执行的权限是由内核完成的,它会防止某些UID和GID访问某些硬件”--虽然可能会这样做,但有很多内核级别的权限检查(例如,INTERNET)。 - CommonsWare
根据developer.android.com中的进一步阅读,"Intent 对象被传递给Context.startActivity()或Activity.startActivityForResult()以启动活动或让现有活动执行新操作"。在检查了 ActivityManagerService.java 后,AMS 接收到启动活动的意图后,它会调用PackageManageService来检查相关的意图权限是否位于packages.xml中。我们可以看到当应用程序调用此本机代码时,没有任何活动被启动,因此您能否详细说明如何执行这些权限? - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接