Оболочка приложения для Android "нет такого файла или каталога", хорошо в проводнике файлов и ADB

Я пытаюсь скопировать файл из /path/to the/file.ext (да, у него есть пробелы, я подозреваю, что это по крайней мере часть проблемы), чтобы /data/data/com.my_pkg.app/file.ext,

В моем (root) приложении я делаю:

String cmd = "su -c \"cp /path/to\\ the/file.ext /data/data/com.my_pkg.app/file.ext\"";
try {
    Process process;
    process = new ProcessBuilder(cmd).start();
    try {
        process.waitFor();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
} catch (IOException e1) {
    e1.printStackTrace();
}

Но это поднимает IOException: no such file or directory,

Проверив свою работоспособность, я открыл приложение для просмотра корневых файлов, перешел по указанному выше пути, скопировал его и вставил в каталог моего приложения, и все было в порядке.

Почему cp не найдя это? - приложение проводника файлов должно делать то же самое (ну, с модификацией, которая заставляет его работать!) в рамках всего этого графического интерфейса.

Редактировать: полная ошибка:

W/System.err( 2441): java.io.IOException: Error running exec(). 
     Command: [su -c "cp /path/to\ the/file.ext /data/data/com.my_pkg.app/file.ext"] 
     Working Directory: null 
     Environment: [ANDROID_ROOT=/system, 
          EMULATED_STORAGE_SOURCE=/mnt/shell/emulated, 
          LOOP_MOUNTPOINT=/mnt/obb, 
          EMULATED_STORAGE_TARGET=/storage/emulated, 
          ANDROID_BOOTLOGO=1, LD_LIBRARY_PATH=/vendor/lib:/system/lib,             
          EXTERNAL_STORAGE=/storage/emulated/legacy, 
          ANDROID_SOCKET_zygote=10, 
          ANDROID_DATA=/data, 
          PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin, 
          ANDROID_ASSETS=/system/app, ASEC_MOUNTPOINT=/mnt/asec, 
          BOOTCLASSPATH=/system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/webviewchromium.jar, 
          ANDROID_PROPERTY_WORKSPACE=9,0, 
          ANDROID_STORAGE=/storage]

1 ответ

Решение

Я публикую это как ответ, потому что он решил мой вопрос так, как я его задал, и поэтому должен решить эту проблему для любого, кто сталкивался с этим путем поиска. Для меня, однако, это просто привело к другому вопросу.

Изменяя строку:

String cmd = "su -c \"cp /path/to\\ the/file.ext /data/data/com.my_pkg.app/file.ext\"";

к массиву (что остальная часть кода как есть объединяет / строит):

String[] cmd = {"su", "-c", "\"cp /path/to\\ the/file.ext /data/data/com.my_pkg.app/file.ext\""};

Все ошибки были устранены. Я не могу сказать вам, почему, но по крайней мере они.

Другие вопросы по тегам