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

Different between native C code run in jni and run in the shell in Android

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

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

那么它们有什么区别呢?我需要为我的应用授予一些权限吗?

我认为您的设备已获得 root 权限。

I also build an executable that use this library and it run ok by command line.

也许你 运行 使用 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