Release build中的空json数据(使用proguard)

问题描述 投票:3回答:2

当我运行发行版(签名,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:运作良好

  1. 直接从ADT运行应用程序(运行方式:Android应用程序)
  2. 用户点击一个按钮,它将调用sendMessage(..)方法。
  3. 控制器(在服务器上)获取请求和数据(UserMessage)。
  4. 带有UserMessage的条目已创建。
  5. 服务器向应用程序发送201响应(请求已完成)。>
  6. 案例2:问题

  1. 打包应用程序(Android工具->导出签名的应用程序包。。]
  2. 通过命令行将其安装在设备上(adb install xxx.apk)
  3. 启动应用程序。
  4. 用户点击一个按钮,它将调用sendMessage(..)方法。
  5. 控制器(在服务器上)获取请求但无数据
  6. 创建了带有空用户消息
  7. 的条目。
  8. 服务器向应用程序发送201响应(请求已完成)。>
  9. 我已经尝试同时登录我的设备和Web服务器,我可以确认是否收到案例2的空数据,并且我无法弄清楚为什么打包时它不发送数据?

    打包/发布(Signed + Proguard)应用程序的行为与调试打包相比是否有所不同?

当我运行发行版(签名,Proguard包装)时,我的应用程序不会将数据发布到服务器。但是,如果我直接从ADT运行它,则会在服务器上看到数据。这很奇怪,因为它只是相同的代码,...

android json adt proguard spring-android
2个回答
3
投票

我想这是由proguard引起的。 Proguard可能会混淆代码的某些部分,但是Spring会动态调用此代码(还有jackson吗?您没有提到它)。 (因此一旦混淆:动态调用失败)

因此,尝试:


0
投票

以上答案对我没有用,可能是2014年的正确答案对于2019年,当我设置compileSdkVersion 28时,它可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.