Возможное решение, которое я знаю, - это подписать ваше приложение как системное, которое, насколько я знаю, не совпадает с root: Как подписать приложение Android системной подписью? . Но я полагаю, это не то, что вы хотели.
Еще одна вещь, которую я сделал, - это создать собственное приложение, которое делает то, что нужно, и запускает его как внешний процесс. Но необходимо дать этому собственному приложению необходимые привилегии и бит suid, если раздел не является nosuid. Но я полагаю, это не то, что вам было нужно.
Код C, вызываемый через JNI, должен быть подвержен тем же ограничениям, что и жизнь в том же процессе, я полагаю.
Если у вас есть доступный двоичный файл su, вы можете запускать команды из Java с помощью чего-то вроде: Runtime.getRuntime().exec("su -c reboot")
.
Я не помню другого пути.