gpt4 book ai didi

android - 改造 URL 未正确翻译

转载 作者:太空狗 更新时间:2023-10-29 13:53:57 24 4
gpt4 key购买 nike

我正在使用 Retrofit 调用 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 时出现。可能导致此问题的原因是什么?解决方法是什么?

编辑:根据要求,这里有一些相关的混淆器规则:

# 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 配置上,尽管我不确定它可能是什么。

最佳答案

我相信我已经解决了这个问题。更新相关依赖项并将其缩小为我的 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.** { *; }

关于android - 改造 URL 未正确翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41799448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com