gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:31:35 25 4
gpt4 key购买 nike

我今天开始使用 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 编译过程(例如 generateDebugSources、preBuild、preDebugBuild 等)时自动运行 ndkBuild。

我试过像这样将自己依附于这些事件:

gradle.projectsEvaluated {
preBuild.dependsOn(ndkBuild)
}

但无论我把代码放在哪里,或者我从各种可用任务中使用什么任务(当运行 gradle 任务时),似乎都没有任何效果。

最佳答案

您是否尝试过为 ndkBuild 添加对 JavaCompile 任务的依赖?

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

关于android - 配置 Gradle 以在开始编译之前执行自定义构建步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27672553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com