我正在使用Retrofit來調用API。我添加了一個攔截器來查看被請求的url。在調試版本中,網址被正確翻譯,但簽名版本導致網址不能被翻譯和解析,因爲它應該。一些相關的代碼如下:翻新網址未被正確翻譯
改造服務:
@GET("/1.1/launch/next/{number}")
Observable<LaunchResponse> getNextXLaunches(@Path("number") int numberOfNextLaunches);
調用此方法時,我簡單地傳遞一個整數,以確定發射到請求的數目。在簽名的apk,上述產生以下網址:
..../1.1/launch/next/%7BlaunchNum%7D
,而不是
..../1.1/launch/next/10
正如你所看到的,傳遞到路徑的價值沒有被正確翻譯,而是{number}
正在逐字解決。
我也遇到類似的問題今後嘗試後不同的版本:
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'
我感到奇怪的是運行已簽名的版本APK此問題時,才存在。什麼可能導致這個問題?什麼是修復?
編輯:按照要求,這裏有一些相關的ProGuard規則:
# 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.**
編輯:我已經建有minifyEnabled
集中的釋放false
禁用ProGuard的,它工作正常。因此,這個問題必須與我的ProGuard配置相同,儘管我不確定它可能是什麼。
您使用的是progaurd嗎? –
是的。 Retrofit,OkHttp和OkHttp3都添加到我的proguard規則中。 – Orbit
你可以添加你的progaurd規則嗎? –