Где родной исполняемый файл в моем приложении?
У меня есть проект приложения, который включает в себя собственный код jni (example.c) со следующим make-файлом:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := example
LOCAL_SRC_FILES := example.c
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_EXECUTABLE)
Поэтому я создаю его как исполняемый файл, и все идет хорошо. Исполняемый файл "упакован" с приложением? Если да, как я могу получить его путь или местоположение в памяти, чтобы я мог запустить его из кода Java?
PS: я не собираю нативный код как разделяемую библиотеку, потому что я хочу запускать основную функцию как root с помощью команд оболочки, например:
chmod 777 /path/exe
/path/exe
1 ответ
Создать каталог: /jni
и другой каталог /libs
, Теперь положи example.c
и ваш Android.mk
внутри /jni
каталог. Сейчас cd
к /jni
каталог и введите команду ndk-build
, Если ваш make-файл правильный и в исходных файлах нет ошибок, то под /libs
каталог другой новый каталог под названием /armeabi
будет создан. Внутри этого каталога ваш исполняемый файл будет присутствовать.
Для запуска этого исполняемого файла устройство Android должно быть рутировано, или вы можете использовать эмулятор Android, поставляемый с SDK.
Далее вам нужно поместить этот исполняемый файл в /data/local/
местоположение вашего устройства Android (потому что, даже если ваше устройство рутировано, вы не будете иметь разрешения на выполнение из других мест.
Вы можете сделать это используя следующую команду:
adb push example /data/local/
Теперь введите adb shell
режим и компакт-диск для /data/local/
,
Измените права доступа к файлу: chmod example 777
Теперь в этом же месте вы можете разместить свой файл оболочки. Также вы можете получить доступ к вашей SDCard и другим папкам из этого каталога.
Надеюсь, что это полезно для вас. Если все работает, не забудьте принять ответ.