代码之家  ›  专栏  ›  技术社区  ›  rm -rf

不能直接在mergedflavor上设置versionname

  •  1
  • rm -rf  · 技术社区  · 6 年前

    我正在尝试在我的Android应用程序中实现风格。我有以下build.gradle文件:

    plugins {
        id "com.company.versioning" version "1.0.9"
    }
    
    apply plugin: 'com.android.application'
    apply plugin: 'realm-android'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-android-extensions'
    
    def AndroidAnnotationsVersion = '4.1.0'
    
    android {
        compileSdkVersion 26
        buildToolsVersion '28.0.3'
    
        dataBinding {
            enabled = true
        }
    
        compileOptions {
            targetCompatibility 1.8
            sourceCompatibility 1.8
        }
    
        defaultConfig {
            applicationId "com.newcompany.myapp"
            minSdkVersion 19
            targetSdkVersion 26
        }
    
        packagingOptions {
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/license.txt'
        }
    
        signingConfigs {
            staging {
                storeFile file("file.jks")
                storePassword "*********"
                keyAlias "***********"
                keyPassword "***********"
            }
    
            release {
                storeFile file("file.jks")
                storePassword "*********"
                keyAlias "***********"
                keyPassword "***********"
            }
        }
    
        flavorDimensions "version"
    
        productFlavors {
            full {
                //unused
                dimension "version"
                applicationId = "com.newcompany.myapp.full"
            }
            light {
                dimension "version"
                applicationId = "com.newcompany.myapp.light"
            }
            extra{
                dimension "version"
                applicationId = "com.newcompany.myapp.extra"
            }
        }
    
        buildTypes {
            release {
                signingConfig signingConfigs.release
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
            debug {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                zipAlignEnabled true
            }
            staging {
                signingConfig signingConfigs.staging
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
        sourceSets {
            main {
                java.srcDirs = ['src/main/java']
                res.srcDirs = ['src/main/res']
                assets.srcDirs = ['src/main/assets', 'src/main/assets/']
            }
        }
    
    
        kapt {
            generateStubs = true
            arguments {
                arg("resourcePackageName", android.defaultConfig.applicationId)
                arg("androidManifestFile", variant.outputs[0]?.processResources?.manifestFile)
            }
        }
    }
    
    dependencies {
        kapt 'com.android.databinding:compiler:3.1.4'
        kapt "org.androidannotations:androidannotations:$AndroidAnnotationsVersion"
        compile fileTree(include: ['*.jar'], dir: 'libs')
        compile "org.androidannotations:androidannotations-api:$AndroidAnnotationsVersion"
    
        compile 'com.android.support:appcompat-v7:26.1.0'
        compile 'com.android.support:support-v4:26.1.0'
        compile 'com.android.support:design:26.1.0'
        compile 'com.github.ksoichiro:android-observablescrollview:1.5.2'
    
        //InApp Purchase
        compile ('com.android.billingclient:billing:1.0'){
            exclude module: 'IInAppBillingService'
        }
    
        //RxJava RxAndroid
        compile 'io.reactivex:rxandroid:1.2.0'
        compile 'io.reactivex:rxjava:1.1.8'
    
        stagingCompile 'net.hockeyapp.android:HockeySDK:4.1.4'
        releaseCompile 'net.hockeyapp.android:HockeySDK:4.1.4'
    }
    

    当我现在执行应用程序时,它会给我以下错误:

    versionName cannot be set on a mergedFlavor directly.
    versionNameOverride can instead be set for variant outputs using the following syntax:
    android {
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                output.versionNameOverride = "1.0.0"
            }
        }
    }
    

    我试图添加建议的代码:

    applicationVariants.all { variant ->
            def flavor = variant.mergedFlavor
            def name = flavor.getVersionName()
            def versionName = name + '-' + variant.properties.get('flavorName')
            if (variant.buildType.isDebuggable()) {
                versionName += '-debug'
            }
            flavor.versionName = versionName
            variant.outputs.each { output ->
                output.versionNameOverride = flavor.versionName
            }
        }
    

    之后我得到相同的错误,除了最后一行不同,它说:

    output.versionNameOverride = "null-full"
    

    有人能帮我吗?也许是个小错误,但我修不好

    提前谢谢

    2 回复  |  直到 6 年前
        1
  •  0
  •   rm -rf    6 年前

    通过删除build.gradle文件的plugins部分解决的问题:

    plugins {
        id "com.company.versioning" version "1.0.9"
    }
    

    因为那个插件,我猜它总是将版本设置为一个固定的数字,而我无法通过编程来实现。

    之后又发生了一个错误,我可以通过升级 AndroidAnnotationsVersion 4.5.0

        2
  •  0
  •   Ewoks    6 年前

    在我的例子中,当我从Android Gradle插件3.1.4升级到3.2.1版本时,也出现了同样的问题。错误消息是相同的!

    解决方案是升级 auto-version plugin 当时我正在使用(2.0.2版)最新版本的v3.0.1

    希望这能帮助和节省时间