2017-01-23 10 views
3

Я использую «Дооснащение» для совершения звонков в API. Я добавил перехватчик, чтобы просмотреть запрашиваемый url. В отладочных версиях URL-адрес переведен правильно, но подписанные релизы заставляют URL-адрес не переводить и анализировать, как следует. Некоторые соответствующий код ниже:Доработка Дополн. Ссылка не удалена

дооснащения обслуживание:

@GET("/1.1/launch/next/{number}") 
Observable<LaunchResponse> getNextXLaunches(@Path("number") int numberOfNextLaunches); 

При вызове этого метода, я просто передать в целое число, чтобы определить количество запусков запрашивают. В подписанных файлов APK, выше производит следующий URL:

..../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. Что может быть причиной этой проблемы? В чем проблема?

EDIT: В соответствии с просьбой, вот некоторые соответствующие правила 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.** 

EDIT: Я построил релиз minifyEnabled набор для false отключить ProGuard, и она работала правильно. Поэтому проблема должна быть в моей конфигурации ProGuard, хотя я не уверен, что это может быть.

+0

Вы используете progaurd? –

+0

Да. Дополнения, OkHttp и OkHttp3 все добавлены в мои правила proguard. – Orbit

+0

Вы можете добавить свои правила для progaurd? –

ответ

1

Я считаю, что исправил проблему. После обновления соответствующих зависимостей и сузив его к проблеме с моей конфигурацией ProGuard, я добавил следующие правила к моим proguard-rules.pro:

# Retrofit 2.X 
... 
-keepclasseswithmembers class * { 
    @retrofit2.http.* <methods>; 
} 

# Note: had already been added when updating to OkHttp 3. 
# OkHttp3 
-keepattributes Signature 
-keepattributes *Annotation* 
-keep class okhttp3.** { *; } 
-keep interface okhttp3.** { *; } 
-dontwarn okhttp3.** 

Кроме того, несколько локальных файлов были не сохранен. Включение в правила в явном виде или обеспечение того, что вы используете шаблон для хранения всех локальных файлов, должно решить проблему:

#local 
-keep class example.** { *; } 
+0

Вы можете принять свой собственный ответ и получить значок. –

+0

Существует 2-дневный период ожидания, прежде чем вы сможете принять ответы самостоятельно. – Orbit

+0

Упс, извините, тогда! –