Записываемое и исполняемое местоположение на 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.