Как скомпилировать простой нативный код с помощью Android.mk?

В частности, я пытаюсь скомпилировать двоичный файл chainDD su. Я пытался использовать ndk-build, но, похоже, мне нужно установить NDK_PROJECT_PATH, но что это должно быть установлено, в документации не описано.


person user492922    schedule 02.05.2011    source источник
comment
Обычно вы запускаете ndk-build из своего проекта — сработает ли он, если вы это сделаете?   -  person Scott C Wilson    schedule 02.05.2011
comment
Я запустил ndk-build, и он пожаловался на NDK_PROJECT_PATH.   -  person user492922    schedule 02.05.2011
comment
Какую версию NDK вы используете?   -  person Scott C Wilson    schedule 02.05.2011
comment
Можете ли вы установить NDK_PROJECT_PATH на фактический путь вашего проекта (скажем, $NDK_DIR/samples/your-project, где $NDK_DIR — это путь к NDK)?   -  person Scott C Wilson    schedule 03.05.2011
comment
У меня нет большого опыта разработки Android, поэтому я не уверен, каковы минимальные составляющие проекта Android. Достаточно ли файла Android.mk вместе с моими исходными файлами? В настоящее время я устанавливаю свой NDK_PROJECT_PATH в каталог моих исходных файлов и Android.mk. Почему это должен быть подкаталог ndk?   -  person user492922    schedule 03.05.2011
comment
Что ж, я изменил структуру каталогов, поместив все в $NDK/samples/su-binary/jni/, и adb запускается, но компиляция не удалась по другим причинам (я опубликую дополнительный вопрос).   -  person user492922    schedule 04.05.2011


Ответы (2)


Во-первых, убедитесь, что у вас есть NDK:

http://developer.android.com/tools/sdk/ndk/index.html

Вот самый простой способ скомпилировать двоичный файл C для вашего телефона:

http://developer.android.com/tools/sdk/ndk/index.html

http://www.kandroid.org/ndk/docs/STANDALONE-TOOLCHAIN.html

Обычно $NDK(может отличаться) =

Линукс:

/home/<user>/android-ndk

Mac OS X:

/Пользователи/<user>/android-ndk

Оба: $HOME/android-ndk

В терминале:

# create tool-chain - one line
$NDK/build/tools/make-standalone-toolchain.sh --platform=android-3 --install-dir=/tmp/my-android-toolchain

# add to terminal PATH variable
export PATH=/tmp/my-android-toolchain/bin:$PATH

# make alias CC be the new gcc binary
export CC=arm-linux-androideabi-gcc

# compile your C code(I tried hello world)
$CC -o foo.o -c foo.c

# push binary to phone
adb push foo.o /data/local/tmp

# execute binary
adb /data/local/tmp/foo.o

Пожалуйста, дайте мне знать, если я могу помочь!

С уважением,

person Jared Burrows    schedule 28.05.2013
comment
$NDK/build/tools/make-standalone-toolchain.sh --platform=android-3 --install-dir=/tmp/my-android-toolchain может выдать ошибку Unable to auto-config arch from toolchain, согласно - person Glowin; 12.02.2016
comment
$NDK/build/tools/make-standalone-toolchain.sh --platform=android-3 --install-dir=/tmp/my-android-toolchain может вызвать ошибку Unable to auto-config arch from toolchain, в соответствии с этим ответом stackoverflow.com/questions/29444079/, следует добавить --toolchain=arm-linux-androideabi-4.8 gist.github. com/Tydus/11109634 - person Glowin; 12.02.2016

Вам нужно установить папку проекта следующим образом:

project_root

|__ jni/ (включая Android.mk и код C/C++)

|__ другой_каталог

Каталог jni не может изменить имя. и запустите ndk-build в каталоге project_root.

person onlyxool    schedule 12.03.2013
comment
Вы хотели добавить к этому какое-то форматирование? Ваша структура папок не очень ясна. - person Dutts; 12.03.2013
comment
Спасибо за ваш ответ. Этой простой структуры каталогов достаточно, чтобы ndk-build заработал. В моем случае я пытался скомпилировать статическую библиотеку для использования в другом проекте, и после запуска ndk-build я нашел файл .a в root_root/obj/local/armeabi. - person damix911; 30.12.2014