在启用 minifyEnabled 的 Android Studio 上,Crashlytics 映射文件上传失败

问题描述 投票:0回答:1

在我的 gradle 配置中激活 proguard (minifyEnabled = true) 时,构建在以下步骤中失败: :应用程序:uploadCrashlyticsMappingFileRelease

返回的错误是:java.io.IOException:Crashlytics无法读取代理端口字符串

使用 minifyEnabled = false 应用程序可以正确构建并运行。

我的 gradle 文件(应用程序)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.firebase.appdistribution'
apply plugin: 'io.objectbox'
apply plugin: 'realm-android'
apply plugin: "androidx.navigation.safeargs"
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

android {
    compileSdkVersion 32
    defaultConfig {
        applicationId project.getProperties().get('application_id')
        minSdkVersion 23
        targetSdkVersion 32
        versionCode Integer.parseInt(project.getProperties().get('version_code'))
        versionName project.getProperties().get('version_name')
        vectorDrawables.useSupportLibrary = true
        resValue 'string', 'application_name', project.getProperties().get('application_name')
        resValue 'string', 'application_id', project.getProperties().get('application_id')
        multiDexEnabled true
    }
    signingConfigs {
        release {
            storeFile file('../' + project.getProperties().get('store_file'))
            storePassword project.getProperties().get('store_password')
            keyAlias project.getProperties().get('key_alias')
            keyPassword project.getProperties().get('key_password')
        }
    }
    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
            signingConfig signingConfigs.release
        }
        release {
            debuggable true
            minifyEnabled true
            shrinkResources false
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            firebaseAppDistribution {
                releaseNotes = generateChangeLogShort()
                testers = "[email protected]"
            }
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    buildFeatures {
        viewBinding true
    }

    kotlinOptions {
        jvmTarget = '1.8'
        freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn"
    }
}

dependencies {

    // Kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    // KTX
    implementation 'androidx.core:core-ktx:1.8.0'

    implementation 'androidx.multidex:multidex:2.0.1'
    implementation 'androidx.appcompat:appcompat:1.4.2'
    implementation 'androidx.recyclerview:recyclerview:1.2.1'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'

    // Needed for https://github.com/FirebaseExtended/flutterfire/issues/4651
    implementation 'androidx.browser:browser:1.4.0'

    // Firebase bug workaround for emulator, as described here: https://stackoverflow.com/questions/64668851/why-the-firestore-isnt-working-on-android-studio
    implementation "io.grpc:grpc-okhttp:1.44.1"

    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.1.0')

    // Declare the dependencies for the Crashlytics and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics'
    implementation 'com.google.firebase:firebase-analytics'
    implementation 'com.google.firebase:firebase-messaging'
    implementation 'com.google.firebase:firebase-functions'
    implementation 'com.google.firebase:firebase-firestore'
    implementation 'com.google.firebase:firebase-storage'
    implementation 'com.google.firebase:firebase-core'
    implementation 'com.google.firebase:firebase-auth'
    implementation 'com.firebaseui:firebase-ui-storage:6.2.1'
    implementation 'com.google.code.gson:gson:2.8.9'
    implementation 'com.google.android:flexbox:1.1.1'
    implementation 'com.google.android.gms:play-services-maps:18.0.2'
    implementation 'com.google.maps.android:android-maps-utils:0.6.2'
    implementation 'com.google.android.gms:play-services-places:17.0.0'
    implementation 'com.google.android.gms:play-services-location:20.0.0'
    implementation 'com.kbeanie:multipicker:1.5@aar'
    implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
    implementation 'org.greenrobot:eventbus:3.2.0'
    implementation 'io.michaelrocks:libphonenumber-android:8.10.7'
    implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0'
    implementation 'com.afollestad.material-dialogs:core:0.9.6.0'
    implementation 'com.afollestad.material-dialogs:commons:0.9.6.0'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:4.8.1'
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'
    implementation 'org.apache.commons:commons-lang3:3.12.0'
    implementation 'com.google.firebase:firebase-config:21.1.0'

    // Navigation:
    def nav_version = "2.5.0"

    // Kotlin
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

    // Feature module Support
    implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

    // Testing Navigation
    androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

    // Places library
    implementation 'com.google.android.libraries.places:places:2.6.0'
    // PING Place Picker
    implementation project(path: ':pingplacepicker')
    //Wheel Picker
    implementation 'com.super_rabbit.wheel_picker:NumberPicker:1.0.1'

    kapt 'com.github.bumptech.glide:compiler:4.12.0'
}

def generateChangeLogShort(){
    println "Generating release notes"
    def releaseNotes = ""
    def lastTagHash = "git rev-list --tags --skip=1 --max-count=1".execute().text.trim()
    println lastTagHash
    def lastTag = "git describe --abbrev=0 --tags $lastTagHash".execute().text.trim()
    println lastTag
    def cmdLine = "git log $lastTag..head --pretty=format:\"%s\""
    def procCommit = cmdLine.execute()

    procCommit.in.eachLine { line ->
        //Remove surrounding quotation marks generated by the git log command
        def escapedLine = line.substring(1, line.length() - 1)
        //Escape backslashes
        escapedLine = escapedLine.replaceAll(/(\\)/, "\\/")
        //Escape quotation marks
        escapedLine = escapedLine.replaceAll('"', '\\\\"')

        //if (escapedLine.startsWith("feat:")) {
            releaseNotes += escapedLine + "\n"
        //}
    }

    println releaseNotes
    return releaseNotes
}

gradle 文件(项目):

buildscript {

    ext {
        kotlin_version = '1.6.21'
    }
    repositories {
        mavenCentral()
        google()
        maven { url 'https://jitpack.io' }
        jcenter()
    }

    dependencies {
        def nav_version = '2.4.1'
        classpath 'com.android.tools.build:gradle:7.2.1'
        classpath 'com.google.gms:google-services:4.3.13'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1'
        classpath 'io.realm:realm-gradle-plugin:10.10.1'
        classpath 'io.objectbox:objectbox-gradle-plugin:2.9.1'
        classpath 'com.google.firebase:firebase-appdistribution-gradle:3.0.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

allprojects {
    repositories {
        mavenCentral()
        google()
        maven {
            url 'https://maven.google.com/'
        }
        maven { url 'https://jitpack.io' }
        jcenter()
    }
}

repositories {
    mavenCentral()
    google()
    maven { url 'https://jitpack.io' }
    jcenter()
}

错误堆栈跟踪:

Caused by: java.io.IOException: Crashlytics could not read proxy port string.
    at com.google.firebase.crashlytics.buildtools.api.net.proxy.DefaultProxyFactory.create(DefaultProxyFactory.java:38)
    at com.google.firebase.crashlytics.buildtools.api.RestfulWebApi.sendFile(RestfulWebApi.java:91)
    at com.google.firebase.crashlytics.buildtools.api.RestfulWebApi.uploadFile(RestfulWebApi.java:119)
    at com.google.firebase.crashlytics.buildtools.api.FirebaseMappingFileService.uploadMappingFile(FirebaseMappingFileService.java:44)
    at com.google.firebase.crashlytics.buildtools.Buildtools.uploadMappingFile(Buildtools.java:208)
    at com.google.firebase.crashlytics.buildtools.Buildtools$uploadMappingFile$5.call(Unknown Source)
    at com.google.firebase.crashlytics.buildtools.gradle.tasks.UploadMappingFileTask.uploadMappingFile(UploadMappingFileTask.groovy:63)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
    ... 114 more

更新: 发现问题是Crashlytics映射文件无法上传,因为Androdi Studio环境中没有设置代理设置。但没有使用代理,所以不知道要指定什么: systemProp.https.proxyPort systemProp.https.proxyHost

android firebase proxy proguard crashlytics
1个回答
0
投票

我找到了解决问题的方法。我使用 VPN 并在 gradle.properties(项目属性)中添加了代理设置。您可以在下面找到我的设置。对我来说,crashlytics 的白标很重要。 (出于安全原因,我更改了公司域)

systemProp.http.proxyHost=some.web.proxy
systemProp.http.proxyPort=8080
systemProp.https.proxyHost=some.web.proxy
systemProp.https.proxyPort=8080
systemProp.http.nonProxyHosts=*.companydomain.com|localhost|*.crashlytics.com|crashlyticsreports-pa.googleapis.com|firebasecrashlyticssymbols.googleapis.com
systemProp.https.nonProxyHosts=*.companydomain.com|localhost|*.crashlytics.com|crashlyticsreports-pa.googleapis.com|firebasecrashlyticssymbols.googleapis.com
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
android.nonFinalResIds=false
© www.soinside.com 2019 - 2024. All rights reserved.