我有一个本机C Android应用程序。首先,我将本机C代码构建到共享库中,jni将使用该库。该库使用一些内核可加载模块.ko,一些已加载,一些必须通过“ insmod”命令加载。
我还构建了一个使用此库的可执行文件,它可以通过命令行正常运行。但是,与可执行文件运行功能相同的jni在调用需要加载内核模块的函数时失败。
那么它们之间有什么区别?我需要为我的应用授予一些权限吗?
答案 0 :(得分:1)
我认为您的设备已扎根。
我还构建了一个使用此库的可执行文件,它可以通过命令行正常运行。
也许您可以使用su
运行此命令,并且可以毫无问题地执行它。
但是,如果您通过JNI从App执行二进制文件,那么实际上您是在具有普通用户权限的情况下运行命令的,如果您的C代码调用某些内核函数,则可能会出现问题。
您是否尝试过在应用程序中使用以下代码?
Runtime.getRuntime().exec("su").