我需要在build.gradle
中定义一个方法来定义BuildConfigFields
。我试过的是下面的内容。
defaultConfig {
initializeBuildConfig()
applicationId com.terser
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName "1.0.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ext.initializeBuildConfig = {->
Properties versionProps = new Properties()
versionProps.load(new FileInputStream(file('config.properties')))
def properties_appName = versionProps['APP_NAME']
manifestPlaceholders = [appname:properties_appName]
def properties_authkey=versionProps['AUTH_KEY']
buildConfigField "String", "AUTH_KEY", "\"$properties_authkey\""
}
}
但它无法解决错误。
无法在DefaultConfig_Decorated上找到arguments []的方法initializeBuildConfig(){name = main,dimension = null,minSdkVersion = null,targetSdkVersion = null,renderscriptTargetApi = null,renderscriptSupportModeEnabled = null,renderscriptSupportModeBlasEnabled = null,renderscriptNdkModeEnabled = null,versionCode = null,versionName = null,applicationApplicationId = null,testInstrumentationRunner = null,testInstrumentationRunnerArguments = {},testHandleProfiling = null,testFunctionalTest = null,signingConfig = null,resConfig = null,mBuildConfigFields = {},mResValues = {}, mProguardFiles = [],mConsumerProguardFiles = [],mManifestPlaceholders = {appname = invite},mWearAppUnbundled = null},类型为com.android.build.gradle.internal.dsl.DefaultConfig。
任何人都可以帮助我吗?我想知道如何在同一个块中以及在其他块中定义方法并调用它。我怎么能从方法返回一个值
?
我已经查看了How to define and call custom methods in build.gradle。答案似乎是正确的,但我无法从上述链接中给出的答案中获取概念。我试图实现相同但得到上述错误。
答案 0 :(得分:0)
的一种方法
ext.myCustomMethod = { param1, param2 ->
// Method body here
}
请注意,这是为项目范围创建的,即。全局可用于项目,可以使用myCustomMethod(p1,p2)在构建脚本中的任何位置调用,这相当于project.myCustomMethod(p1,p2)
该方法也可以在不同的范围内定义,例如在任务中:
task myTask {
ext.myCustomMethod = { param1, param2 ->
// Method body here
}
doLast {
myCustomMethod(p1, p2) // This will resolve 'myCustomMethod' defined in task
}
}
赞:
task ndkBuild(type: Exec, description: 'Compile JNI source with NDK') {
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def ndkDir = properties.getProperty('ndk.dir')
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine "$ndkDir/ndk-build.cmd", '-C', file('src/main/jni').absolutePath
} else {
commandLine "$ndkDir/ndk-build", '-C', file('src/main/jni').absolutePath
}
}
当我们使用ext时,范围被限制在定义的位置,即。如果它是在任务下定义的,则它是任务的本地。它的工作方式是通过实现ExtensionAware的实体(如项目,任务等)。这会添加一个ExtraPropertiesExtension,它通过ext指令配置。