Изменение местоположений вывода ndk-build

Мое приложение имеет следующую структуру

Android | |-> app | | | |-> build [1] | |-> src | | |-> main | | | |-> assets | | | |-> java | | | |-> jni | | | | |-> Android.mk | | | | |-> Application.mk | | | | | | | |-> jniLibs | | | | |-> armeabi | | | | |-> armeabi-v7a | | | | | | | |-> res | | | |-> AndroidManifest.xml | |-> build [2] 

Я ndk-build свои .so библиотеки с ndk-build команды ndk-build в Linux-машине. Я использую его как:

 <my_ndk_location_path>/ndk-build -C <my_project_location_path>/Android/app/src/main/ 

Процесс сборки работает отлично, и выходные файлы создаются без ошибок.

Моя проблема в том, что файлы результатов не «направлены в правильное положение»,

Библиотеки, созданные на:

 .app/src/main/libs/armeabi-v7a/libMyGeneratedLibrary.so .app/src/main/libs/armeabi/libMyGeneratedLibrary.so 

И файлы obj адресу:

 .app/src/main/obj/local/armeabi-v7a/libMyGeneratedLibrary.so .app/src/main/obj/local/armeabi/libMyGeneratedLibrary.so 

Я хотел бы, чтобы результат производился в разных местах:

  1. Библиотеки в jniLibs . то есть. ./app/src/main/ jniLibs /armeabi*
  2. Объект под одной из папок сборки. то есть. build [1] или build [2].

Есть ли какой-либо возможный способ добиться этого, изменив какой-либо параметр на файлы .mk или на команду сборки?


редактировать

TARGET_OUT не работает в NDK r6b

Выполнение команды ndk-build -C Android/app/src/main/ TARGET_OUT='Android/app/src/main/jniLibs/$(TARGET_ARCH_ABI)'

Предупреждения, как показано ниже для каждого сгенерированного файла.

 android-ndk-r6b/build/core/build-binary.mk:217: warning: overriding commands for target 'Android/app/src/main/jniLibs//objs/***/****.o' android-ndk-r6b/build/core/build-binary.mk:217: warning: ignoring old commands for target 'Android/app/src/main/jniLibs//objs/***/****.o' 

Solutions Collecting From Web of "Изменение местоположений вывода ndk-build"

Вы можете использовать NDK_LIBS_OUT для изменения вывода libs и NDK_OUT для изменения вывода obj. Точно так же: ndk-build NDK_LIBS_OUT=./jniLibs NDK_OUT=./obj

Если вам нужно построить для всех доступных архитектур, используйте аргумент:

  TARGET_OUT='<your_build_dir>/$(TARGET_ARCH_ABI)' 

Если достаточно одной целевой архитектуры, используйте аргумент:

  TARGET_OUT=<your_build_dir> 

Как я его решаю. Не очень элегантный, но, по крайней мере, он работает.

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

Поэтому я продолжал команду build, так как

 <my_ndk_path>/ndk-build -C <my_project_path>/Android/app/src/main/ 

Добавить создание папки (-p не генерировать ошибку, если она существует)

 mkdir -p <my_project_path>/Android/app/src/main/jniLibs/ 

Затем я перемещаю файлы .so в конечное местоположение с помощью команды sync.

 rsync -avh --remove-source-files \ <my_project_path>/Android/app/src/main/libs/* \ <my_project_path>/Android/app/src/main/jniLibs/ 

Вы можете сделать что-то подобное для папки obj . Я просто изменил свой .gitignore, поэтому оставил его как есть.