Ich verwende Retrofit, um Aufrufe an eine API zu tätigen. Ich habe einen Interceptor hinzugefügt, um die angeforderte URL anzuzeigen. In Debug-Releases wird die URL korrekt übersetzt, aber signierte Releases führen dazu, dass die URL nicht wie erwartet übersetzt und analysiert wird. Einige relevante Code ist unten:Retrofit-URL wird nicht korrekt übersetzt
Retrofit Service:
@GET("/1.1/launch/next/{number}")
Observable<LaunchResponse> getNextXLaunches(@Path("number") int numberOfNextLaunches);
Wenn Sie diese Methode aufrufen, habe ich einfach in einer ganzen Zahl passieren die Anzahl der Starts zu bestimmen, zu beantragen. In unterzeichnet APKs erzeugt die oben die folgende URL:
..../1.1/launch/next/%7BlaunchNum%7D
statt
..../1.1/launch/next/10
Wie Sie sehen können, wird der Wert in den Weg geleitet nicht richtig übersetzt werden, und statt {number}
wird buchstäblich aufgelöst.
Ich habe verschiedene Versionen versucht, nach über ähnliche Probleme kommen:
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'
compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.5.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'
Was ich seltsam finde, ist dieses Problem nur dann vorliegt, wenn ein unterzeichnetes Release apk läuft. Was könnte dieses Problem verursachen? Was ist das Problem?
EDIT: Wie gewünscht, hier sind einige relevante proguard Regeln:
# Retrofit 2.X
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
# OkHttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**
# OkHttp3
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
EDIT: ich Release mit minifyEnabled
Set false
gebaut haben ProGuard zu deaktivieren, und es funktionierte richtig. Daher muss das Problem mit meiner ProGuard-Konfiguration zusammenhängen, obwohl ich nicht sicher bin, was es sein könnte.
verwenden Sie progaurd? –
Ja. Retrofit, OkHttp und OkHttp3 werden alle zu meinen Proguard-Regeln hinzugefügt. – Orbit
Können Sie Ihre Regeln hinzufügen? –