Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在jni中运行的本机C代码与在Android中在shell中运行的本机C代码不同_Java_Android_C_Java Native Interface_Native - Fatal编程技术网

Java 在jni中运行的本机C代码与在Android中在shell中运行的本机C代码不同

Java 在jni中运行的本机C代码与在Android中在shell中运行的本机C代码不同,java,android,c,java-native-interface,native,Java,Android,C,Java Native Interface,Native,我有一个原生的C安卓应用程序。首先,我将本机C代码构建到共享库中,jni将使用这个库。这个库使用一些内核可加载的module.ko,一些已经加载,一些必须通过“insmod”命令加载 我还构建了一个使用这个库的可执行文件,它通过命令行正常运行。但是,当jni调用需要加载内核模块的函数时,执行与可执行文件相同的工作的jni运行失败 那么它们之间的区别是什么呢?我需要为我的应用程序授予一些权限吗?我认为你的设备已根目录 我还构建了一个使用这个库的可执行文件,它通过命令行正常运行 也许您可以使用su运

我有一个原生的C安卓应用程序。首先,我将本机C代码构建到共享库中,jni将使用这个库。这个库使用一些内核可加载的module.ko,一些已经加载,一些必须通过“insmod”命令加载

我还构建了一个使用这个库的可执行文件,它通过命令行正常运行。但是,当jni调用需要加载内核模块的函数时,执行与可执行文件相同的工作的jni运行失败


那么它们之间的区别是什么呢?我需要为我的应用程序授予一些权限吗?

我认为你的设备已根目录

我还构建了一个使用这个库的可执行文件,它通过命令行正常运行

也许您可以使用
su
运行此命令,并且可以毫无问题地执行它

但是,如果您通过JNI从应用程序执行二进制代码,那么您实际上是使用普通用户权限运行该命令,如果您的C代码调用某些内核函数,则可能会出现问题

您是否在应用程序中尝试了以下代码

Runtime.getRuntime().exec("su").

这里有一些参考资料供您参考

在本例中,JNI构建了一个共享库,它不是一个独立的可执行文件。它只包含将在应用程序中使用的类和方法。您构建的可执行文件实际上是一个“可执行文件”。它有自己的入口点,当从命令行调用时,它将成为一个单独的进程。感谢您的帮助。我的情况和你想的完全一样。我尝试使用Runtime.getRuntime().exec(“su”)并将其添加到清单中,但我遇到了权限被拒绝的问题。我的设备是根设备。我还检查了,我的应用程序运行时使用的是用户“u0_a41”,而不是“root”,就像我在命令行中使用可执行文件一样。所以你的答案是正确的,似乎它没有调用内核函数的权限。@NVDQ,如果我的答案对你有帮助,请你投票支持并接受它好吗?谢谢