2016-10-25 15 views
12

以前に質問が投稿されました:'No args constructor for class does not exist', but it doesと、Androidスタジオ経由で携帯電話でUSBデバッグモードを使用してテストしたときの回答を受け取りました。しかし、Google Playにアプリをプッシュすると、そのアプリは機能しなくなり、その質問で説明したのと同じエラーが発生します。私は今日のテストを繰り返し、同じことが起こります。まったく同じ画像 を使用して、まったく同じAndroidのバージョン Google Play APKとAndroid Studio APK(USBデバッグ)の動作が異なる

  • を実行して、まったく同じ電話
    • まったく同じコード
    • は、私がテストしてい、明確にするために、

      Google Play APKがAndroid Studio APKと異なる動作をする理由はありますか?または私は何かを逃していますか?

  • +0

    なぜシリアル化とデシリアライズのために静的クラスを使いますか? –

    +0

    @misaochan同じ質問を編集し、その質問に賞金を追加するだけでは、新しい質問を投稿して問題が同じであるため古い質問をリンクするのではなく、活発な質問の先頭に戻ることができます。次回はそれを考慮してください! –

    +0

    ビルドをリリースするにはproguardを適用しますが、ビルドをデバッグするのは避けていますか? – CoderP

    答えて

    8

    build.gradleの設定に応じて、releaseバージョンは通常、コードにProGuardを実行します。 debugバージョンでは、通常、コード上でこのようなツールを実行しません。

    だから、ProGuardがコードを実行して、MwVolleyApi$Pageがどこにも使用されておらず、削除されていることが判明しました。

    release { 
        minifyEnabled false 
        ... 
    } 
    

    次にリリースAPKを構築し、それをテスト:あなたのbuild.gradleminifyEnabledをオフにして、この理論をテストする

    いつでも、携帯端末のリリースアプリをテストしてから、Google Playにアップロードすることができます。adb installでインストールするか、スマートフォンのDownloadsアプリからSDHカードにコピーしてインストールできます。そして、あなたが戻ってtrueにminifyEnabledを回すことができ、そして再び

    をテスト

    -keep class fr.free.nrw.commons.upload.MwVolleyApi$Page {*;} 
    

    :これは確かに問題を修正した場合

    することは、あなたは、削除からのようなものをPageクラスを保存するために、あなたのproguard.cfgファイルにルールを追加することができます

    +0

    'minifyEnabled false'で問題を修正しました。ありがとう! '-keep'行だけで十分かどうかを確認します。 –

    0

    Androidスタジオからビルドしているapkは、開発時のデバッグ用のデバッグバージョンです。 Google Playストアに公開されているapkは、アプリのリリースバージョンです。

    また、Android Studioからリリースバージョンを作成し、それがPlayストアにあるものとまったく同じバージョンであることも確認できます。

    1

    proguardを使用してデバッグビルドをビルドし、問題が再現するかどうかを確認してください。 build.gradleでこれを行う:

    buildTypes { 
         all{ 
          // Place all proguard files 
          proguardFile 'proguard/proguard-rules.pro' 
          proguardFile getDefaultProguardFile('proguard-android.txt') 
          } 
    }