安卓开发,JNI如何使用ROOT权限运行

JNI中的CPP函数如何以ROOT身份运行?
如题,在CSDN提问之前,我已经查了很多资料,总结有以下几种方法:

  1. 用java的Runtime.getRuntime.exec("su -c " + "myJniPath");
    实验发现,这种方法没用,即使在清单文件加了所需的权限。

  2. 在cpp函数中需要用到超级权限之前:system("su");
    经实验无用。

  1. 使用面具作者提供的libsu轮子,使运行的程序具有su权限。
    这个过于复杂,一时间看不懂,希望能看懂的给讲一下,库地址:https://github.com/topjohnwu/libsu

  2. 向GPT提问。
    这个就有得搞了,提问了不少于三十次,每次都要改代码试验一下,但是AI提供的方法没有一个是有效的。

我的cpp函数也不复杂,就是跨进程读内存值的,在优化过的多开框架运行可以顺利读取,但是在ROOT机器上运行却无法读取,返回值为127,这个值好像是读取进程失败的意思。哪位同学能给提供下思路和解决方案。

  1. 在C++代码中直接调用系统命令获得ROOT权限。你可以调用system("su")或popen("su -c 命令")等方式获得ROOT权限执行操作。
  2. 使用libsu库。这个库封装了获得ROOT权限的操作,你可以引用这个库调用其API获得ROOT权限。不过这个库比较复杂,需要仔细研究。
  3. 在Java层使用Runtime.getRuntime().exec("su -c 命令")启动一个子进程执行C++函数。不过你说这个方法无效,可能是权限配置的问题。你需要在AndroidManifest.xml加上root权限:
    xml 并确保你的设备已获得ROOT权限。
  4. 不使用ROOT权限,通过其他方式实现跨进程内存读取。比如:
  • 使用Ashmem内存共享让其他进程映射读取
  • 使用Socket通信,在C++函数中读取内存数据发送给Java层
  • 使用Messenger通信,发送读取内存请求给C++层,在C++层读取并回传数据
    这些方式无需ROOT权限就可以实现跨进程通信和数据读取。
    总的来说,获得ROOT权限实现你的需求是一种方案,但是也存在一定风险。我更推荐你使用标准的Android IPC机制实现跨进程数据读取,这种方式更加稳定和安全。