Cambiar las ubicaciones de salida de ndk-build

Mi aplicación tiene la siguiente estructura

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

Estoy construyendo mis bibliotecas ndk-build comando ndk-build en una máquina linux. Lo uso como:

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

El proceso de construcción funciona bien y los archivos de salida se producen sin errores.

Mi problema es que los archivos de resultados no son "dirigidos a la posición correcta"

Las libs generadas en:

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

y los archivos obj en:

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

Quisiera que la salida produjera en diversas localizaciones:

  1. Las jniLibs en jniLibs . es decir. ./app/src/main/ jniLibs /armeabi*
  2. El obj en una de las carpetas de construcción. es decir. build [1] o build [2].

¿Hay alguna manera posible de lograr eso cambiando algún parámetro a los archivos .mk o al comando build?


Editar

TARGET_OUT no parece funcionar en NDK r6b

Ejecutar el comando ndk-build -C Android/app/src/main/ TARGET_OUT='Android/app/src/main/jniLibs/$(TARGET_ARCH_ABI)'

Aparecen advertencias como las siguientes para cada archivo generado.

 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' 

3 Solutions collect form web for “Cambiar las ubicaciones de salida de ndk-build”

Puede utilizar NDK_LIBS_OUT para cambiar la salida libs y NDK_OUT para cambiar la salida obj. Así como: ndk-build NDK_LIBS_OUT=./jniLibs NDK_OUT=./obj

Si necesita crear para todas las arquitecturas disponibles, utilice argumento:

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

Si sólo una arquitectura de destino es suficiente, utilice argumento:

  TARGET_OUT=<your_build_dir> 

Cómo lo soluciono. No es realmente elegante, pero al menos funciona.

Debido a que mi mecanismo de construcción es bastante complicado por lo que tenía un par de tareas personalizadas gradle y scripts también, realmente no me importa el único comando para la construcción.

Así que mantuve el comando build como es

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

Agregue una creación de la carpeta (-p no genera error si existe)

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

Luego muevo los archivos .so a la ubicación final con el comando sync.

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

Puede hacer algo similar para la carpeta obj . Acabo de modificar mi .gitignore así que lo dejé como está.

  • ADVERTENCIA: ... / Android.mk: bibliotecas que no son del sistema en los indicadores de vinculador
  • No se puede encontrar android NDK constructor r9 para mac
  • Creación de NDK con un archivo mk diferente para la versión / depuración
  • Error de vinculación de C ++ Firebase en el proyecto android
  • Error de UnsatisfiedLink: Método nativo no encontrado findLibrary devuelto null
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.