Я пытаюсь реализовать разные вкусы в своем приложении для 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
rm -rf 22 Окт 2018 в 10:22

2 ответа

Лучший ответ

Проблема решена удалением раздела плагинов в файле build.gradle:

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

Из-за этого плагина, я думаю, он всегда устанавливал фиксированное число для версии, и я не мог сделать это программно.

После этого произошла еще одна ошибка, которую я смог исправить, обновив AndroidAnnotationsVersion до 4.5.0

0
rm -rf 22 Окт 2018 в 12:11

В моем случае такая же проблема возникла при обновлении плагина android gradle 3.1.4 до версии 3.2.1. Сообщение об ошибке было таким же!

Решением было обновить плагин автоматической версии, который я использовал (v2.0.2), до последней версии ⇢ на данный момент v3.0.1

Надеюсь, это поможет и сэкономит время кому-то

0
Ewoks 13 Дек 2018 в 10:43
52924175