在jni中运行的本机C代码与在Android中的shell中运行之间存在差异

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

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

那么他们之间有什么区别? 我是否需要授予我的应用程序一些权限?

我认为您的设备已植根。

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

也许你用su运行这个命令,可以毫无问题地执行它。

但是,如果您通过JNI从App执行二进制文件,那么您实际上正在运行具有普通用户权限的命令,如果您的C代码调用某些内核函数,则可能会出现问题。

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

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

这里有一些参考资料http://muzikant-android.blogspot.com/2011/02/how-to-get-root-access-and-execute.html?_sm_au_=iqsHGF7FqZfPGrJb