0

我在 Crashlytics Beta 中手动上传构建。但是版本号总是显示为 0.0(0),就像这篇文章中提到的那样。(请不要标记为重复,因为这有点不同,因为即使手动上传也会发生这种情况)我正在使用Android Studio 3.1.3.Gradle version 4.4 这是我的 gradle:

classpath 'io.fabric.tools:gradle:1.+'



compile('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true;
    }

完成 app/build.gradle :

buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
        classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.3'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'com.getkeepsafe.dexcount'
apply plugin: 'io.fabric'

repositories {
    mavenCentral()
    maven { url 'https://maven.fabric.io/public' }
    maven { url 'http://kochava.bintray.com/maven' }
}


android {
    compileSdkVersion 27
    buildToolsVersion '27.0.3'

    flavorDimensions "default"

    useLibrary 'org.apache.http.legacy'

    dexOptions {
        preDexLibraries true
        javaMaxHeapSize "2g" // Use gig increments depending on needs

    }

    lintOptions {
        abortOnError false
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    repositories {
        flatDir { dirs 'libs' }
    }

    signingConfigs {
        debugConfig {

            storeFile file('keystore/debug.keystore')
            storePassword "/*password*/"
            keyAlias "androiddebugkey"
            keyPassword "/*password*/"
        }
        releaseConfig {

            storeFile file("keystore/release.keystore")
            storePassword "/*password*/"
            keyAlias "/*KeyAliasname*/"
            keyPassword "/*password*/"
        }
    }

//  Versioning
    def versionPropsFile = file('version.properties')
    def versionBuild

    /*Setting default value for versionBuild which is the last incremented value stored in the file */
    if (versionPropsFile.canRead()) {
        Properties versionProps = new Properties()
        versionProps.load(new FileInputStream(versionPropsFile))
        versionBuild = versionProps['VERSION_BUILD'].toInteger()
    } else {
        throw new GradleException("Could not read version.properties!")
    }

    /*Wrapping inside a method avoids auto incrementing on every gradle task run. Now it runs only when we build apk*/
    ext.autoIncrementBuildNumber = {

        if (versionPropsFile.canRead()) {
            def Properties versionProps = new Properties()
            versionProps.load(file("version.properties").newReader()/*new FileInputStream(versionPropsFile)*/)
            versionBuild = versionProps['VERSION_BUILD'].toInteger() + 1
            versionProps['VERSION_BUILD'] = versionBuild.toString()
            versionProps.store(versionPropsFile.newWriter(), null)
        } else {
            throw new GradleException("Could not read version.properties!")
        }
    }

    def appId = "com.example.appName"
    def appName = "My App"
    def appBuildName = "appBuildName"
    def versionMajor = 6
    def versionMinor = 6
    def versionPatch = 0
    def appVersionName = "${versionMajor}.${versionMinor}.${versionPatch}"
    def appVersionCode = versionBuild

    defaultConfig {
        applicationId appId
        minSdkVersion 16
        targetSdkVersion 27

        resValue "bool", "is_prod", "false"
        resValue "bool", "is_prod_staging", "false"
        resValue "bool", "is_amazon", "false"

        // by default, enable logging
        resValue "bool", "is_debuggable", "true"

        multiDexEnabled = true
    }

    buildTypes {
        applicationVariants.all { variant ->
            variant.outputs.all { output ->
                def project = appBuildName
                def SEP = "-"
                def buildType = variant.variantData.variantConfiguration.buildType.name.toUpperCase()
                def flavor = variant.productFlavors[0].name.toUpperCase()
                def version = "v" + appVersionName + "." + (appVersionCode - 500000)

                def newApkName = project + SEP + version + SEP + buildType + SEP + flavor + ".apk"

                println "Output Apk Name: " + newApkName

                outputFileName = new File(newApkName)
            }
        }

        debug {
            applicationIdSuffix ".debug"
            ext.enableCrashlytics = false
        }
        uat {
            initWith(buildTypes.debug)
            applicationIdSuffix ".uat"
            signingConfig signingConfigs.debugConfig
            ext.enableCrashlytics = true
        }
        staging {
            applicationIdSuffix ".uat"
            signingConfig signingConfigs.debugConfig
            debuggable false
            // we want the prod endpoint, with no logging
            resValue "bool", "is_prod_staging", "true"
            resValue "bool", "is_debuggable", "false"

            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ext.enableCrashlytics = true
        }
        prodStaging {
            initWith(buildTypes.staging)

            resValue "bool", "is_prod_staging", "false"
            resValue "bool", "is_prod", "true"
        }
        prodStagingNoSuffix {
            initWith(buildTypes.prodStaging)

            applicationIdSuffix ""

            debuggable false
        }
        release {
            // we want the prod endpoint, with no logging
            resValue "bool", "is_prod", "true"
            resValue "bool", "is_debuggable", "false"

            debuggable false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.releaseConfig
            ext.enableCrashlytics = true

        }
    }

    productFlavors {
        play {
            resValue "bool", "is_amazon", "false"
        }

        amazon {
            resValue "bool", "is_amazon", "true"
        }
    }

    // Hook to check if the release/debug task is among the tasks to be executed.
    //Let's make use of it
    gradle.taskGraph.whenReady { taskGraph ->
        def tasks = taskGraph.getAllTasks()
        tasks.find {
            println it
            if (it.name.toLowerCase().contains("package")
                    && !it.name.toLowerCase().contains("debug")
                    && !it.name.toLowerCase().contains("release")) {
                /* when run release task */
                /* note that the task cannot be a release as our release codes need to align */
                println("We've matches on the internal release task")
                autoIncrementBuildNumber()
                return true
            }
            return false
        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
        exclude 'com/kofax/android/abc/configuraPK'
        exclude 'META-INF/rxjava.properties'
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true;
    }
    // Apache 2.0
    implementation files('libs/adobeMobileLibrary-4.13.2.jar')
    implementation files('libs/dagger-2.7.jar')
    implementation files('libs/isg-3.2.0.0.0.761.jar')
    implementation files('libs/sdk-release.jar')
    implementation files('libs/login-with-amazon-sdk.jar')



    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.facebook.android:facebook-android-sdk:4.27.0'
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.google.android.gms:play-services-gcm:15.0.1'
    implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.5.0'
    implementation 'com.squareup:otto:1.3.6'
    implementation 'commons-io:commons-io:2.4'
    implementation 'commons-codec:commons-codec:1.10'
    implementation 'org.apache.commons:commons-lang3:3.4'
    implementation 'org.roboguice:roboguice:3.0.1'
    implementation 'com.novoda:accessibilitools:1.3.0'
    implementation 'com.android.support:recyclerview-v7:27.1.1'
    implementation 'com.android.support:cardview-v7:27.1.1'
    implementation 'me.relex:circleindicator:1.2.2@aar'
    implementation 'com.kochava.base:tracker:3.0.0@aar'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    implementation project(path: ':linkedin-sdk', configuration: 'default')
    implementation 'com.squareup.picasso:picasso:2.5.2'
    //rxjava
    implementation 'io.reactivex.rxjava2:rxjava:2.1.1'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    //room
    implementation 'android.arch.persistence.room:runtime:1.1.1'
    annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'
    implementation 'android.arch.persistence.room:rxjava2:1.1.1'
    //gson
    implementation 'com.google.code.gson:gson:2.3.1'
    //retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'

    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    implementation 'com.squareup.okhttp3:okhttp:3.4.1'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

注意:它曾经在 Android Studio 2.2 上运行良好

4

0 回答 0