Android 发布版本中的空json数据(使用proguard)
当我运行发布版本(已签名,Proguard打包)时,我的应用程序不会将数据发布到服务器。但是如果我直接从ADT运行它,我会看到服务器上的数据 这很奇怪,因为它只是同一个代码,一个是签名的,另一个是直接执行的。下面是代码(使用Android 发布版本中的空json数据(使用proguard),android,json,adt,proguard,spring-android,Android,Json,Adt,Proguard,Spring Android,当我运行发布版本(已签名,Proguard打包)时,我的应用程序不会将数据发布到服务器。但是如果我直接从ADT运行它,我会看到服务器上的数据 这很奇怪,因为它只是同一个代码,一个是签名的,另一个是直接执行的。下面是代码(使用org.springframework.web.client.restemplate): private静态字符串URL=”https://myappserver.com/abcservice/"; 公共响应发送消息(UserMessage us){ 私有RestTempla
org.springframework.web.client.restemplate
):
private静态字符串URL=”https://myappserver.com/abcservice/";
公共响应发送消息(UserMessage us){
私有RestTemplate=getTemplate();
HttpEntity reqEntity=新的HttpEntity(美国,标题);
响应性结果=
template.postForEntity(URL、reqEntity、String.class);
返回结果;
}
以下是两种情况:
案例1:效果良好
sendMessage(..)
方法UserMessage
)sendMessage(..)
方法与调试打包相比,打包/发布(已签名+Proguard)应用程序的行为是否有所不同?我猜这是由Proguard造成的。Proguard可能混淆了代码的某些部分,但这段代码是由Spring动态调用的(jackson?您没有提到)。(因此,一旦混淆:动态调用失败) 因此,试着:
- 禁用proguard以确认它是问题的原因
- 如果确认:尝试对其进行配置,使其不会混淆在json中序列化的类(即UserMessage): -保留类com.company.UserMessage**{*;}
2019年,当我设置CompileSDK版本28时,它可以正常工作。我也有同样的问题,我承诺在2行以下 //真的吗 //minifyEnabled true
UserMessage是您定义的类吗?是的@JsonIgnoreProperties(ignoreUnknown=true)公共类UserMessage{..}是的,它是Spring+Jackson。同样使用
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
Correct,proguard把事情搞砸了。和-继续上课..
帮助。谢谢。
private static String URL = "https://myappserver.com/abcservice/";
public ResponseEntity<String> sendMessage(UserMessage us) {
private RestTemplate template = getTemplate();
HttpEntity<UserMessage> reqEntity = new HttpEntity<UserMessage>(us, headers);
ResponseEntity<String> result =
template.postForEntity(URL, reqEntity, String.class);
return result;
}