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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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