¿Cómo definimos varios módulos con el nuevo creador basado en gradles de NDK?
Estoy intentando aprender e intentar usar el nuevo Android Studio gradle basado en soporte de compilación ndk.
Estoy teniendo un rato duro que calcula hacia fuera cómo definir los módulos del ndk de PREBUILT_SHARED_LIBRARY de modo que mi módulo ndk principal pueda utilizarlo. Tengo esta configuración usando Android.mk pero no puedo averiguar cómo convertirlo en gradle. : /
- NDK vs JAVA rendimiento
- ¿Cómo utilizar Google Breakpad para Android NDK?
- Afinidad de hilo para Android
- ¿Puede el código nativo causar corrupción de memoria en código Java en Android?
- Cómo recopilar stacktrace nativo sin un permiso de lectura READ_LOGS desde el principio?
// SHARED LIBRARY android.ndk { moduleName = "skia_android" cppFlags += "-I${file("src/main/jni/skia/skia/out/config/android-nexus_4/Debug/lib/libskia_android.so")}".toString() cppFlags += "-I${file("src/main/jni/skia/skia/include/core")}".toString() cppFlags += "-I${file("src/main/jni/skia/skia/include/utils")}".toString() cppFlags += "-I${file("src/main/jni/skia/skia/include/gpu")}".toString() cppFlags += "-I${file("src/main/jni/skia/skia/include/private")}".toString() ldLibs += ["EGL", "GLESv2"] stl = "c++_static" } // MAIN LIBRARY android.ndk { moduleName = "smasher" cppFlags += "-I${file("src/main/jni/smasher/include")}".toString() cppFlags += "-I${file("src/main/jni/smasher/src")}".toString() cppFlags += "-I${file("src/main/jni/smasher")}".toString() ldLibs += ["skia_android", "log", "android", "EGL", "GLESv2"] stl = "c++_static" abiFilter "armeabi-v7a" }
- Cómo utilizar bibliotecas C nativas en Android Studio
- ANDROID NDK - android: comando no encontrado
- Cargar biblioteca nativa compartida desde otra aplicación de Android
- ¿Alguien ha construido ZBar usando el Android NDK?
- No se puede crear una biblioteca externa de OpenSSL para Android NDK en Windows / Cygwin
- Endianness de Android NDK
- Retraso / retraso enorme de UDP con Android
- Rendimiento de Android NDK sobre el código Java habitual
Actualización (Feb '16): el plugin experimantal permite módulos nativos ahora! No en el principal, todavía.
Desafortunadamente esto no es compatible con los complementos gradle actuales. Específicamente, actualmente no hay manera de definir módulos nativos. Recomiendo mantener el tradicional Android.mk que hace este trabajo confiablemente.
El truco consiste en desactivar las tareas regulares de compilación de NDK e inyectar una tarea buildNative
lugar:
Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def ndkBuild = properties.getProperty('ndk.dir') + '/ndk-build' import org.apache.tools.ant.taskdefs.condition.Os if (Os.isFamily(Os.FAMILY_WINDOWS)) { ndkBuild += '.cmd' } task buildNative(type: Exec, description: 'Compile JNI source via NDK') { commandLine '$ndkBuild', 'NDK_PROJECT_PATH="$jniSrc/..' } task cleanNative(type: Exec, description: 'Clean JNI object files') { commandLine '$ndkBuild', 'clean', 'NDK_PROJECT_PATH="$jniSrc/..' } clean.dependsOn 'cleanNative' tasks.all { task -> if (task.name.startsWith('compile') && task.name.contains('MainC')) { task.enabled = false } if (task.name.startsWith('link')) { task.enabled = false } if (task.name.endsWith("SharedLibrary") ) { task.dependsOn buildNative } }
Puede hacerlo con el complemento nativo autónomo. Sólo asegúrese de poner las diferentes bibliotecas en diferentes subproyectos, ya que el complemento experimental no admite varios módulos en el mismo proyecto (lo que es extraño, porque los plugins nativos de gradle lo hacen).
http://tools.android.com/tech-docs/new-build-system/gradle-experimental
root + lib -> apply plugin: 'com.android.model.native' + app -> apply plugin: 'com.android.model.application'
App / build.gradle
model { android.sources { main { jni { dependencies { project ":lib" // optional: // buildType "debug" productFlavor "flavor" linkage "static" } } } } }
- La devolución de llamada de BLE start de Android BLE no se dispara incluso con permisos de ubicación
- No se pudieron resolver todas las dependencias para la configuración ': app: _debugCompile'-Facebook