2015-10-06 1 views
1

Je sais comment utiliser la coutume Android.mk avec le vieux gradle:Comment utiliser la coutume Android.mk avec le nouveau système de construction gradle

sourceSets.main { 
     jniLibs.srcDir 'src/main/jni' 
     jni.srcDirs = [] //disable automatic ndk-build call 
    } 

    // call regular ndk-build(.cmd) script from app directory 
    task ndkBuild(type: Exec) { 
     commandLine '/.../android-ndk-r10e/ndk-build', '-C', file('src/main').absolutePath 
    } 

    tasks.withType(JavaCompile) { 
     compileTask -> compileTask.dependsOn ndkBuild 
    } 

Il ne fonctionne pas avec la nouvelle gradle: com.android.tools.build:gradle-experimental:0.2.0:

Error:Cause: com.android.build.gradle.managed.AndroidConfig_Impl 

Répondre

4

avec le nouveau plugin gradle-experimental, votre configuration serait:

model { 
    //... 
    android.sources{ 
     main.jni { 
      source { 
       srcDirs = ['src/main/none'] 
      } 
     } 
     main.jniLibs { 
      source { 
       srcDirs = ['src/main/libs'] 
      } 
     } 
    } 
    //... 
} 

// call regular ndk-build(.cmd) script from app directory 
task ndkBuild(type: Exec) { 
    commandLine '/.../android-ndk-r10e/ndk-build', '-C', file('src/main').absolutePath 
} 

tasks.withType(JavaCompile) { 
    compileTask -> compileTask.dependsOn ndkBuild 
} 

Notez que v La version 0.3.0-alpha7 du plugin gradle-experimental est sortie.

+0

Okey, et qu'en est-il de 'Application.mk'? Par exemple j'ai drapeaux 'APP_CFLAGS + = -DSTDC_HEADERS' ' APP_PLATFORM: = android-23' – zella

+0

l'extrait que je mets est de faire fonctionner le nouveau plugin comme l'ancien pour vous, en gardant vos Makefiles et en appelant ndk-build. Si vous voulez migrer vers une solution complète, c'est une question différente, vous pouvez regarder mon tutoriel ici: http://ph0b.com/new-android-studio-ndk-support/ – ph0b

+2

Je suppose que personne ne le sait comment faire cela avec gradle-experimental 0.6.0-alpha5? Essayer de définir les répertoires source me donne une erreur "Tentative de lire une vue en écriture seule ...". –

0

En plus de la réponse précédente: Avec la version expérimentale Plugin 0.7.0-alpha1 cela fonctionne sur Windows

model { 

    // ... 

    android.sources.main { 
     jni { 
      source { 
       srcDirs = ['src/main/none'] 
      } 
     } 
     jniLibs { 
      source { 
       srcDirs = ['src/main/libs'] 
      } 
     } 
    } 

    // ... 

} 

task ndkBuild(type: Exec) { 
    def cmdline = "${System.env.ANDROID_NDK_HOME}/ndk-build -C \"" + file('src/main').absolutePath + "\" > ndk-build-log.txt 2>&1" 
    commandLine 'cmd', '/c', cmdline 
} 

tasks.withType(JavaCompile) { 
    compileTask -> compileTask.dependsOn ndkBuild 
} 
1

Ajoutez ceci à votre fichier build.gradle. Cela provoquera le ndk-build à exécuter dans le cadre de la génération de projet à l'aide du fichier .mk spécifié.

android{ 
    externalNativeBuild { 
     ndkBuild { 
      path 'src/main/jni/Android.mk' 
     } 
    } 
}