Google Play APK и Android Studio APK (USB debug) ведут себя по-другому

Я уже задал вопрос: "Конструктор args для класса не существует" , но он выполняет и получил ответ, который работал, когда я тестировал его с помощью USB debug на моем телефоне через Android Studio. Однако, когда я нажал приложение в Google Play, он перестает работать и вызывает ту же ошибку, которую я описал в этом вопросе. Сегодня я повторил тест, и происходит то же самое.

Чтобы уточнить, я тестирую:

  • Точный же код
  • На одном и том же телефоне
  • Запуск той же версии Android
  • Использование одного и того же изображения

Есть ли причина, по которой APK Google Play будет отличаться от Android Studio APK? Или я что-то упускаю?

Ответ 1

В зависимости от конфигурации build.gradle версии release обычно запускаются ProGuard в вашем коде. debug версии обычно не запускают такие инструменты в коде.

Так что могло случиться, что ProGuard пробежал ваш код, обнаружил, что MwVolleyApi$Page нигде не используется и удалил его.

Чтобы проверить эту теорию, в build.gradle отключите minifyEnabled:

release {
    minifyEnabled false
    ...
}

Затем создайте release-apk и протестируйте его.

Кстати, вы должны всегда тестировать apks на своем устройстве перед загрузкой в ​​Google Play, вы можете установить их через adb install или скопировать их на SD-карту и установить их из приложения Downloads на вашем телефоне.

Если это действительно устранило проблему, вы можете добавить правила в свой proguard.cfg файл, чтобы сохранить класс Page от удаления, например:

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

Затем вы можете вернуть minifyEnabled в true и снова проверить

Ответ 2

Попробуйте создать сборку отладки с помощью proguard и посмотреть, не реплицируется ли проблема. В своем build.gradle сделайте следующее:

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

Ответ 3

Я думаю, что apk, созданный с вашего Android Studio, - это отладочная версия, которая является пользователем для отладки во время разработки. Apk, опубликованный в Google Play Store, является версией вашего приложения.

Вы также можете создать версию выпуска из Android Studio и посмотреть, что она будет такой же, как и в Play Store.