リリース バージョン (署名済み、Proguard パック済み) を実行すると、アプリがデータをサーバーに送信しません。しかし、ADT から直接実行すると、サーバー上のデータが表示されます。
1 つは署名済みで、もう 1 つは直接実行される同じコードであるため、奇妙です。コードは次のとおりです(を使用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;
}
以下に 2 つのシナリオを示します。
ケース 1: うまくいく
- ADT からアプリを直接実行する (実行方法: Android アプリケーション)
- ユーザーがボタンをタップすると、
sendMessage(..)
メソッドが呼び出されます。 - コントローラー (サーバー上) は、要求とデータを取得します (
UserMessage
)。 - UserMessage のエントリが作成されます。
- サーバーは 201 応答 (要求が満たされた) をアプリに送信します。
ケース 2: 問題
- アプリをパックします (Android Tools -> Export Signed Application Package..)
- コマンドラインからデバイスにインストールします (adb install xxx.apk)
- アプリを起動します。
- ユーザーがボタンをタップすると、
sendMessage(..)
メソッドが呼び出されます。 - コントローラ (サーバー上) はリクエストを取得しますが、データは取得しません。
- 空の UserMessageを持つエントリが作成されます。
- サーバーは 201 応答 (要求が満たされた) をアプリに送信します。
デバイスと Web サーバーの両方にログインしようとしましたが、ケース 2 で空のデータが受信されたことを確認できました。また、パックしたときにデータが送信されない理由がわかりません。
デバッグ パッケージと比較して、パック/リリース (Signed + Proguard) アプリの動作は異なりますか?