¿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. : /

// 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" } 

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" } } } } } 
  • Free Pascal para Android en MIPS
  • ¿Tutoriales de Android NDK?
  • ¿Quieres usar las bibliotecas de Python en Android?
  • Es arm-eabi-gcc diferente de arm-linux-androideabi-gcc
  • Acceda a la cámara a través de OpenMAX en Android
  • No se puede depurar el código nativo de C ++ para Android en Eclipse en Windows
  • Oficial "Boost library" ¿Soporte para Android e iOS?
  • Reproducir audio pregrabado en una llamada de voz
  • ¿Cómo crear un socket Android RFCOMM sin ninguna entrada del usuario?
  • ¿Cómo compilar la biblioteca con el código fuente con las herramientas de NDK?
  • Cómo ejecutar la aplicación C ++ en Android SHELL
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.