在jni中运行的本机C代码和在Android中的shell中运行的区别

时间:2018-08-14 14:48:28

标签: java android c java-native-interface native

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

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

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

1 个答案:

答案 0 :(得分:1)

我认为您的设备已扎根。

  

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

也许您可以使用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