Android Studio 1.3 gradle plugin devuelve error al definir jni y jniLibs en conjuntos de código fuente

No se pudo encontrar la propiedad jni y el conjunto de fuentes 'main'

apply plugin: 'com.android.model.application' model { android { compileSdkVersion = 21 buildToolsVersion = "22.0.1" defaultConfig.with { applicationId = "com.example.native_activity" minSdkVersion.apiLevel = 9 targetSdkVersion.apiLevel = 9 } sourceSets.main { jni.srcDirs = [] // This prevents the auto generation of Android.mk jniLibs.srcDir = 'src/main/libs' // This is not necessary unless you have precompiled libraries in your project. } } 

Aquí está el stacktrace:

 Caused by: org.gradle.model.internal.core.ModelRuleExecutionException: Exception thrown while executing model rule: model.android at org.gradle.model.internal.registry.DefaultModelRegistry.fireMutation(DefaultModelRegistry.java:485) at org.gradle.model.internal.registry.DefaultModelRegistry.access$1500(DefaultModelRegistry.java:45) at org.gradle.model.internal.registry.DefaultModelRegistry$RunModelAction.apply(DefaultModelRegistry.java:1464) at org.gradle.model.internal.registry.DefaultModelRegistry.transitionTo(DefaultModelRegistry.java:341) at org.gradle.model.internal.registry.DefaultModelRegistry.transition(DefaultModelRegistry.java:419) at org.gradle.model.internal.registry.DefaultModelRegistry.atStateOrMaybeLater(DefaultModelRegistry.java:183) at org.gradle.model.internal.registry.DefaultModelRegistry.atStateOrLater(DefaultModelRegistry.java:175) at org.gradle.execution.TaskNameResolver.selfClose(TaskNameResolver.java:101) at org.gradle.execution.TaskNameResolver.selfClosedTasksNode(TaskNameResolver.java:114) ... 60 more Caused by: org.gradle.api.internal.MissingMethodException: Could not find method main() for arguments [build_f1cmjkxjjzysskbrs6852ixyj$_run_closure1_closure2_closure7@8c09fa7] on SourceSet container. 

Me googled como loco por las últimas 2 horas …

Como dijo Awanish – lea la Guía del Usuario del Plugin Experimental paso a paso MUY cuidadosamente. Para obtener más claridad, compruebe los archivos build.gradle en las muestras ndk proporcionadas por google.

sourceSets.main { } tiene una sintaxis diferente y debe estar fuera del bloque android { } . En su caso, debe ser algo como esto:

 model { android { //... } android.sources { main { jniLibs { source { srcDirs 'libs' } } } } } 

En mi caso fue exactamente lo contrario a tochkov respuesta:

Esta sintaxis – con el jniLibs fuera del bloque android – me dio un error:

 android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.mycompany.myproject" minSdkVersion 17 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } } 

Y esta sintaxis – dentro de bloqueo de Android – lo arregló:

 android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.mycompany.myproject" minSdkVersion 17 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } } } 

¡Parece que estás intentando usar el plugin experimental de grado!

Asegúrese de tener grado 2.5 en su gradle-wrapper.properties :

 distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip 

Y esto en la etiqueta de dependencias build.gradle su proyecto

 classpath 'com.android.tools.build:gradle-experimental:0.1.0' 

En lugar de adivinar un montón de cosas, permítanme volver a dirigirla a la guía del usuario, donde la documentación explica la migración del complemento estándar al experimental en detalle. Echa un vistazo aquí!

Pruebe estas correcciones. Publicar más detalles si estos no funcionan para usted, voy a tratar de ayudar. 🙂

 apply plugin: 'com.android.model.application' model { android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "com.example.jeremy.test" minSdkVersion.apiLevel = 15 targetSdkVersion.apiLevel = 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles.add(file('proguard-android.txt')) } } ndk { moduleName "hello-android-jni" } } android.sources.main { java.source.srcDirs = ["src/main/java", "/Users/jeremy/Repositories/hello/src/android/java"] } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' } 

Lo anterior se copia de mi proyecto ndk experimental, esto funciona para mí. Consulte la sección android.sources.main .

  • ¿Cómo puedo eliminar los recursos no utilizados de las bibliotecas de terceros que he incluido en Android?
  • Android Studio: Resolución de clases duplicadas
  • ¿Hay una manera de tener una sección común con buildConfigField y resValue en gradle?
  • Android studio no descargar fuentes y javadoc
  • Gradle - build sass por productflavor (carpeta múltiple)
  • Error en la compilación de Android Gradle: no se pudo encontrar com.google.android:support-v4:r18
  • Construya androide con gradle, substituya la cadena cada sabor del producto
  • Cómo agregar colecciones de apache commons en Android Studio (Gradle)
  • Cómo utilizar Gradle para generar archivos de proyecto Eclipse e Intellij para proyectos de Android
  • Añadir biblioteca java al proyecto Android Studio con el repositorio maven
  • Prueba de prueba de Espresso en CircleCI
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.