Я разрабатываю приложение для One Plus 6. Это приложение использует общую библиотеку (lib.so) для выполнения некоторой задачи. Для этого нужно сначала открыть dev / diag, а затем отправить несколько команд через код. Ниже приведен код для открытия dev / diag:
fd = open("/dev/diag", O_RDWR|O_LARGEFILE|O_NONBLOCK);
if (fd < 0) {
perror("open diag dev");
return -8002;
}
Я могу построить исполняемый файл с include $(BUILD_EXECUTABLE)
, написанным на Android.mk
и с командой ndk-build
. Я могу запустить открытый dev / diag с размещением исполняемого файла в / system папке Android.
Сбой в том, чтобы сделать то же самое с приложением для Android.
Я пробовал следующее:
- Rooted the One Plus 6
- Звоните
Runtime.getRuntime().exec("su")
в MainActivity::onCreate
.
- Дайте
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
в манифесте.
- Затем вызовите требуемую функцию jni.
Подскажите, пожалуйста, как мне разрешить доступ su для функции, которая открывает мне dev / diag?
Я также пытался сделать то же самое с запуском исполняемых команд с использованием исполняемого файла ndk-build в / system, например
для чтения:
// Run the command
Process process = Runtime.getRuntime().exec("su -c /system/lib get key");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
// Grab the results
StringBuilder log = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
log.append(line).append("\n");
}
String allLogs = log.toString();
Для ЗАПИСИ:
Process suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
os.writeBytes("/system/lib set key " + value);
// Close the terminal
os.writeBytes("exit\n");
os.flush();
и работает нормально. Тем не менее мне интересно, как сделать то же самое с общей библиотекой. Любая помощь?