studio ndk android android-gradle ndk-build

studio - cmake android ndk



Cambiar las ubicaciones de salida de ndk-build (3)

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

Debido a que mi mecanismo de construcción es bastante complicado, así que también tuve un par de tareas y scripts de Gradle personalizados, realmente no me importa el único comando para la construcción.

Así que mantuve el comando de compilación como está

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

Agregue la 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 de sincronización.

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

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

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_path>/ndk-build -C <my_project_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 están "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

Me gustaría que la salida se produjera en diferentes lugares:

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

¿Hay alguna forma posible de lograrlo cambiando algún parámetro a los archivos .mk o al comando de compilación?

Editar

TARGET_OUT no parece funcionar en NDK r6b

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

Las advertencias como las siguientes aparecen 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''


Puede usar NDK_LIBS_OUT para cambiar la salida de libs y NDK_OUT para cambiar la salida de obj. De esta manera: ndk-build NDK_LIBS_OUT=./jniLibs NDK_OUT=./obj


Si necesita compilar para todas las arquitecturas disponibles, use el argumento:

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

Si solo una arquitectura de destino es suficiente, entonces use argumento:

TARGET_OUT=<your_build_dir>