当我运行发行版(签名,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(..)
方法。我已经尝试同时登录我的设备和Web服务器,我可以确认是否收到案例2的空数据,并且我无法弄清楚为什么打包时它不发送数据?
打包/发布(Signed + Proguard)应用程序的行为与调试打包相比是否有所不同?
当我运行发行版(签名,Proguard包装)时,我的应用程序不会将数据发布到服务器。但是,如果我直接从ADT运行它,则会在服务器上看到数据。这很奇怪,因为它只是相同的代码,...
我想这是由proguard引起的。 Proguard可能会混淆代码的某些部分,但是Spring会动态调用此代码(还有jackson吗?您没有提到它)。 (因此一旦混淆:动态调用失败)
因此,尝试:
以上答案对我没有用,可能是2014年的正确答案对于2019年,当我设置compileSdkVersion 28时,它可以工作。