微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 在开始编译之前配置Gradle以执行自定义构建步骤

我今天开始使用Gradle,在搜索一个小时并尝试了SO(例如1)和不同博客(例如2)和文档(例如3)的每个可能答案后,我需要一些帮助.

我的问题很简单:如何执行自定义构建步骤(在我的情况下,使用自定义的Android.mk执行ndk-build)作为常规构建过程的一部分?

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在运行其余的Android编译程序时自动运行ndkBuild(例如generateDebugSources,preBuild,preDebugBuild,…).

我试图将自己贴在这样的事件上:

gradle.projectsEvaluated {
    preBuild.dependsOn(ndkBuild)
}

但无论我把代码放在哪里,或者我从可用的各种任务中使用了什么任务(运行gradle任务时),似乎没有任何工作.

解决方法:

您是否尝试在JavaCompile任务中添加ndkBuild的依赖项?

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐