Настройте Gradle для выполнения этапа пользовательской сборки перед началом компиляции

Я начал использовать Gradle сегодня и после поиска в течение часа, а также каждый возможный ответ от SO (например, 1 ) и разных блогов (например, 2 ) и документации (например, 3 ) Мне нужна помощь.

Мой вопрос прост: как выполнить пользовательский шаг сборки (в моем случае выполнение ndk-build с помощью настроенного Android.mk) в рамках обычного процесса сборки?

Файл build.gradle выглядит так:

import org.apache.tools.ant.taskdefs.condition.Os apply plugin: 'com.android.application' android { compileSdkVersion 19 buildToolsVersion "21.1.2" defaultConfig { applicationId "myApp.prototype" minSdkVersion 16 targetSdkVersion 19 testApplicationId "myApp.prototype.test" testInstrumentationRunner "android.test.InstrumentationTestRunner" } sourceSets.main.jni.srcDirs = [] task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') { def rootDir = project.rootDir def localProperties = new File(rootDir, "local.properties") Properties properties = new Properties() localProperties.withInputStream { instr -> properties.load(instr) } def ndkDir = properties.getProperty('ndk.dir') println ndkDir if (Os.isFamily(Os.FAMILY_WINDOWS)) { commandLine "$ndkDir\\ndk-build.cmd", 'NDK_PROJECT_PATH=build/intermediates/ndk', 'NDK_LIBS_OUT=src/main/jniLibs', 'APP_BUILD_SCRIPT=src/main/jni/Android.mk', 'NDK_APPLICATION_MK=src/main/jni/Application.mk' } else { commandLine "$ndkDir/ndk-build", 'NDK_PROJECT_PATH=build/intermediates/ndk', 'NDK_LIBS_OUT=src/main/jniLibs', 'APP_BUILD_SCRIPT=src/main/jni/Android.mk', 'NDK_APPLICATION_MK=src/main/jni/Application.mk' } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { compile 'com.android.support:appcompat-v7:20.+' compile 'com.google.android.gms:play-services-location:6.5+' compile 'com.android.support:support-v4:19.1.0' compile 'com.google.code.gson:gson:2.2.4' compile fileTree(dir: new File(buildDir, 'libs'), include: '*.jar') } 

При выполнении gradle ndkBuild из командной строки все работает нормально. Но я хочу, чтобы Android Studio автоматически запускала ndkBuild, когда выполняла остальные процедуры компиляции Android (такие как generateDebugSources, preBuild, preDebugBuild, …).

Я попытался приложить себя к этим событиям следующим образом:

 gradle.projectsEvaluated { preBuild.dependsOn(ndkBuild) } 

Но независимо от того, где я помещаю этот код или какую задачу я использую из множества доступных задач (при выполнении задач градиента), ничего не работает.

Вы пытались добавить зависимость для ndkBuild в задачах JavaCompile ?

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