当前位置: 首页 > 知识库问答 >
问题:

在build.gradle中定义一个自定义方法,并从同一块和其他块调用它

施刚毅
2023-03-14

我需要在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\""
    }
}

有人能帮我吗?我想知道我如何定义一个方法在相同的块,也在其他块和调用它。此外,如何从方法返回值?
我已经在build.gradle中检查了如何定义和调用自定义方法。答案似乎是正确的,但我无法从上述链接中给出的答案中获得概念。我已经尝试实现了相同的,但得到了上面的错误。

共有1个答案

赵浩邈
2023-03-14

一种方法

ext.myCustomMethod = { param1, param2 ->
    // Method body here
}

注意,这是为项目范围创建的,即。项目全局可用,可以在构建脚本中的任何地方使用等效于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的实体(如project,task等)。这将添加通过ext指令配置的ExtraPropertiesExtension。

 类似资料:
  • 在大于 10.2.0 中支持 在 .vue 文件中,你可以自定义语言块。自定义块的内容将由 vue-loader 的 options 中的 loader 对象中指定的 loader 处理,然后被组件模块依赖。类似 Loader 进阶配置中的配置,但使用的是标签名匹配,而不是 lang 属性。 如果找到一个与自定义块匹配的 loader,该自定义块将被处理;否则自定义块将被忽略。 另外,如果找到的

  • 本文向大家介绍Python import自定义模块方法,包括了Python import自定义模块方法的使用技巧和注意事项,需要的朋友参考一下 python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。 下面将具体介绍几种常用情况: (1)主程序与模块程序在同一目录下: 如下面程序结构:     若在程序test1.py中导入模块mod1, 则直接使用im

  • 需要 10.2.0+ 您可以在*.vue文件中定义自定义语言块。 自定义块的内容将由在vue-loader'选项的loaders对象中指定的加载器处理,然后由组件模块require。 配置类似于[先进的Loader配置](../ configurations / advanced.md)中描述的配置,除了匹配使用标记名称而不是lang`属性。 如果找到一个自定义块的匹配加载器,它将被处理; 否则将

  • 我在这个问题上也有同样的问题 如何使用android中的回收器视图将事件放在日历中 //Event.java 我尝试了很多,但它甚至不工作。我的事件。我要在另一个适配器中使用java。也许在onBindViewHolder中。

  • 主要内容:自定义模块编写说明文档到目前为止,读者已经掌握了导入 Python 标准库并使用其成员(主要是函数)的方法,接下来要解决的问题是,怎样自定义一个模块呢? 前面章节中讲过,Python 模块就是 Python 程序,换句话说,只要是 Python 程序,都可以作为模块导入。例如,下面定义了一个简单的模块(编写在 demo.py 文件中): 可以看到,我们在 demo.py 文件中放置了变量(name 和 add)、函数(

  • 我想自定义滑块显示的数据。例如,与其显示一个数字,不如说是“前缀”数字“后缀”,而且这个值应该始终可见。 在类VSlider我找到了方法。我怀疑这是配置滑块显示的值的地方。我尝试用相同的包结构在我自己的项目中复制这个类,我还重新编译了小部件集,但是视图中没有显示这些更改。我刚开始为Vaadin创建客户端代码,所以可能有一些我不理解的地方。 问题: 你对我如何实现我的目标有什么建议吗? 您知道为什么