Записываемое и исполняемое местоположение на Android

Я собрал двоичный файл с помощью инструментальной привязки Android NDK и пытаюсь развернуть его на устройстве. Приложение, которое было построено с помощью NDK с использованием JNI, затем выполнит этот двоичный код через собственный код. Я надеюсь избежать использования устройства.

Двоичный файл будет использоваться несколькими приложениями, поэтому я хотел бы сохранить его в общем месте, а не один раз для каждого приложения.

Я не могу найти подходящее место для развертывания этого двоичного файла - это те места, которые я пробовал:

  • /mnt/sdcard - используя getExternalStoragePublicDirectory() из SDK, однако SD-карта смонтирована как noexec, то есть я не могу ее запустить.

  • /system/bin - файловая система только для чтения, поэтому копировать нельзя. Я могу нажать файл с помощью adb push, если я повторно смогу/систему на эмуляторе, используя:

    mount -o rw,remount -t yaffs2 /dev/block/mtd3 /system
    

    Однако я хотел бы избежать этого, поскольку устройство должно быть укоренено.

  • /data/local - используя adb push, я могу нажать двоичный файл в это место. Тем не менее, я не могу найти способ сделать это в коде (используя Android SDK). Внутренний механизм хранения указывает на /data/data/package.

Я скомпилировал собственный код, который вызывает этот исполняемый файл, используя arm-linux-androideabi-g++, поставляемый с инструментальной цепочкой NDK. Это работает с двоичным в /system/bin и/data/local.

В общем, я ищу место в файловой системе Android, к которой я могу скопировать файл из папки project/assets, которые разрешены для всего мира.

Ответ 1

Если вы хотите избежать укоренения устройства, то в основном SD-карта - это единственное место, которое вы можете считать всемирно доступным для записи ( РЕДАКТИРОВАТЬ: последние изменения в системе Android с 2014/2015!). Лучше сделать свою двоичную часть устанавливаемого APK, которая затем извлекает эту двоичную информацию из APK в частное хранилище, делает ее исполняемой и т.д. И как-то объявляет двоичное местоположение, но в целом ожидают некоторые проблемы в зависимости от версии ОС и поставщика

Ответ 2

/data/local/tmp/ и "/data/data/" + packageName + "/files"

для прямого тестирования вы нацеливаете двоичный код, сначала рекомендуется.

Ответ 3

Если вы можете использовать adb, вы можете подготовить каталог /data/local/bin с разрешениями 777.

В качестве альтернативы вы можете создать файл в каталоге частного приложения (/data/data/your.package.unique.name/files) и установить права доступа к файлу 777 755.