如何使用自定义Android.mk与新的gradle构建系统

时间:2015-10-06 12:33:19

标签: android-ndk android-gradle ndk-build

我知道如何将自定义Android.mk与旧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
    }

它没有使用新的gradle:com.android.tools.build:gradle-experimental:0.2.0

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

3 个答案:

答案 0 :(得分:5)

使用新的gradle-experimental插件,您的配置将是:

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
}

请注意,gradle-experimental插件的版本0.3.0-alpha7已经用完了。

答案 1 :(得分:2)

将其添加到build.gradle文件中。这将导致ndk-build使用指定的.mk文件作为项目构建的一部分运行。

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

答案 2 :(得分:0)

除了之前的回复: 使用Experimental Plugin版本0.7.0-alpha1,这适用于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
}