当我运行发布版本(签名,Proguard打包)时,我的应用程序不会将数据发布到服务器。但是,如果我直接从ADT运行它,我会看到服务器上的数据。
这很奇怪,因为它只是相同的代码,一个是签名而另一个是直接执行。这是代码(使用org.springframework.web.client.RestTemplate
):
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;
}
以下是两种情况:
案例1:工作正常
sendMessage(..)
方法。UserMessage
)。案例2:问题
sendMessage(..)
方法。我已经尝试在我的设备和网络服务器上记录,我可以确认案例2收到了空数据,而且我无法弄清楚为什么它在我打包时不发送数据?< / p>
与调试包装相比,打包/发布(签名+ Proguard)应用程序的行为是否有所不同?
答案 0 :(得分:3)
我猜这是由proguard造成的。 Proguard可能会混淆你代码的某些部分,但这个代码是由Spring动态调用的(杰克逊?你没有提到它)。 (一旦它混淆了:动态调用失败)
所以试着:
如果确认:尝试配置它,以便它不会混淆在json中序列化的类(即UserMessage):
-keep class com.company.UserMessage ** {*; }
答案 1 :(得分:1)
答案 2 :(得分:0)
以上答案对我没有用,可能是2014年正确的答案 对于2019年,当我将compileSdkVersion 28设置为有效时。