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:
- Las
libs
enjniLibs
. es decir../app/src/main/ jniLibs /armeabi*
- El
obj
bajo una de las carpetas de compilación. es decir.build
[1] obuild
[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>