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



当在gradle配置中激活proguard (minifyEnabled = true)时,构建在步骤中失败::应用:uploadCrashlyticsMappingFileRelease

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

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

我的gradle文件(app)

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 = "john.doe@gmail.com"
}
}
}
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.proxyPortsystemProp.https.proxyHost

我找到了一个解决问题的方法。我在VPN后面,并在gradle.properties中添加了代理设置(项目属性)。你可以在下面找到我的设置。在我的案例中,崩溃分析的白标签很重要。(出于安全原因,我更改了公司域)

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

最新更新