У меня есть проект basi c flutter, работающий на android, где при запуске приложения я пишу исполняемый файл, связанный с моими ресурсами.
void writeExecutable() async {
DIR = '/data/data/com.maksimdan.face_merger';
var path = join(DIR, 'main');
if (await File(path).exists()) {
File(path).delete();
print('delete executable');
} else {
print('executable does not exist');
}
}
Позже в коде я пытаюсь запустить это.
Process.run(path, []).then((ProcessResult results) {
print(results.stdout);
});
Но получить разрешение отклонено, ошибка.
E/flutter ( 8122): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: ProcessException: No such file or directory
E/flutter ( 8122): Command: /data/data/com.maksimdan.face_merger/main
Я также пробовал:
Process.run('/system/bin/chmod', ['744', path]).then((ProcessResult results) {
print('shell1 complete');
Process.run(path, []).then((ProcessResult results) {
print('shell2 complete');
print(results.stdout);
});
});
Но получите Unhandled Exception: ProcessException: No such file or directory
Предполагая, что исполняемый файл работает, есть ли способ запустить свои собственные исполняемые файлы в трепещут с нужными разрешениями? На собственном android есть возможность использовать эту стратегию для file.setExecutable(true);
. ( Размещение исполняемого файла в Android приложении )
Или мне придется экспериментировать с каналами методов?
pubspe c .yml
name: face_merger
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
sqflite: ^1.3.0+2
process_run: ^0.10.10+1
cupertino_icons: ^0.1.3
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- lib/py/dist/main
Я также проверил, что файл был записан во внутреннюю память устройства, на которое, как я ожидал, он будет записан с использованием android studio устройства explore.