【问题标题】:How to get the buildtype in a build.gradle EARLY ON如何尽早在 build.gradle 中获取 buildtype
【发布时间】:2018-11-12 11:09:04
【问题描述】:

我有一个 React Native 应用程序,我正在尝试指定用于在 project.ext.react 中存储生成的源映射的文件夹,就像这样(我需要它来实现一个可以帮助我调试 JS 错误的库)

project.ext.react = [
        ...
        extraPackagerArgs    : [ "--sourcemap-output", "$buildDir/intermediates/assets/$buildType/index.android.bundle.map" ]
]

显然,路径应该类似于<buildDir>/intermediates/assets/<buildType>/index.android.bundle.map

(例如 <buildDir>/intermediates/assets/release/index.android.bundle.map 用于发布,<buildDir>/intermediates/assets/debug/index.android.bundle.map 用于调试)

在参考了 StackOverflow 和外部的几个答案后,我在 build.gradle 中获得了 buildType,方法是先声明它然后分配它:

//3rd line of build.gradle
def buildType
....
//much later
   applicationVariants.all { variant ->
    buildType = variant.buildType.name 
....

但是,这会导致一个问题,即buildType 在使用后很长时间被初始化,因此输出路径变成了<buildDir>/intermediates/assets/null/index.android.bundle.map 之类的东西,因此对我来说整个过程都失败了。有没有办法提前获取构建类型?

【问题讨论】:

  • 尝试使用variant.name而不是buildType
  • 我可以在不声明 buildType 变量的情况下使用它吗?
  • variant.name 不适合我的目的
  • 库没有提供如何集成的指南?
  • 该库将 buildType 硬编码为“release”,因此我在调试时遇到了构建失败。理想情况下,我希望在发布它之前完整地看到库函数完整的时间。 (github.com/reyalpsirc/react-native-fabric-crashlytics)

标签: android node.js react-native gradle android-gradle-plugin


【解决方案1】:

我终于找到了一种查看 gradle 任务数组的方法(尽管它不是很干净):

def buildType = gradle.startParameter.taskNames.any{it.toLowerCase().contains("debug")}?"debug":"release"

【讨论】:

    【解决方案2】:

    我们在buildTypes 配置里面app.gradle 有这样的东西:

    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            //def newApkName = "${APP_NAME}-${variant.name}-${variant.versionName}.apk"
            def newApkName = "${APP_NAME}-${variant.name}-r${COMMIT_SHA}-${BRANCH_NAME}-v${variant.versionName}-${BUILD_NUMBER}.apk"
    
            variableFile.withWriterAppend { out ->
                out.writeLine("${APP_NAME}-${variant.name}=${APP_NAME}-${variant.name}-r${COMMIT_SHA}-${BRANCH_NAME}-v${variant.versionName}-${BUILD_NUMBER}")
                out.writeLine("${APP_NAME}-${variant.name}versionCode=${VERSION_CODE}")
                out.writeLine("${APP_NAME}-${variant.name}versionName=${variant.versionName}")
            }
    
            output.outputFile = new File(output.outputFile.parent, newApkName)
        }
    }
    

    这将为 gradle 中定义的每个 buildType 设置 apk 名称和输出文件夹。我们有 buildTypes:

    buildTypes {
        debug {
            buildConfigField('String', 'BUILD_ENV', '"Development"')
            minifyEnabled false
        }
        qa {
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            buildConfigField('String', 'BUILD_ENV', '"QA"')
        }
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            buildConfigField('String', 'BUILD_ENV', '"Production"')
        }
    }
    

    【讨论】:

    • 我已经在这样做了,但问题是这个块在反应部分运行后被调用。当反应部分运行时,是否可以获得构建类型(因为我们总是故意触发它)?
    • 我在 Gradle 脚本中需要它。我有一个 React Native 项目,React Native Packager 在 Android Build 接管之前运行一些脚本。所以我需要知道当时的构建类型。
    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多