Подтвердить что ты не робот

Как управлять отладкой и выпуском версии на устройстве Android?

Я новичок в Android dev, и я почти готов выпустить первую версию своего приложения:)

При тестировании подписанного релиза apk на моем телефоне он отказывается устанавливать, поскольку версия отладки установлена ​​с сигнатурой отладки.

Поэтому мне нужно удалить отладочную версию, но она удалит всю мою базу данных (и она будет делать это с моими друзьями, которые ее тестируют).

Есть ли способ управлять отладочной и выпускной версиями одного и того же приложения без потери данных?

4b9b3361

Ответ 1

Я не знаю, какой простой способ обойти процесс удаления/переустановки, поэтому ваши варианты включают...

  • Купите второе устройство для тестирования (некоторые устройства Android сейчас очень дешевы, особенно на eBay).
  • Используйте эмулятор для тестирования

Я вижу ту же проблему, но это следует ожидать, поэтому я использую телефон для отладки dev и планшет для тестирования продукции. Когда я близок к выпуску, я тестирую производственную версию как на устройствах, так и на эмуляторе.

С вашими тестерами я бы посоветовал вам всегда предоставлять им версии релизов, но вы можете включить обширный журнал, чтобы помочь с проблемами. Затем версии отладки используются только вами и выпускают версии. Если вы предоставляете тестировщикам версию выпуска, они используют и накапливают данные, когда они приходят к обновлению до следующей версии, данные могут быть сохранены (или обновлены, если вы измените схему), чтобы перенести их данные.

Я не вижу необходимости, чтобы ваши тестеры использовали версии отладки и выпуска.

Ответ 2

Многие проекты Android начинают использовать систему сборки gradle (мы перешли к ней, когда мы начали использовать Android Studio). К счастью, gradle позволяет просто установить одновременно версию dev и release, каждая со своими независимыми данными. Android docs расскажите об этом, просто добавьте applicationIdSuffix в свой тип сборки отладки, например:

android {
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
    }
}

Ответ 3

Зачем удалять приложение? Обычно установка новой версии того же приложения (идентифицированного идентификатором пакета) сохраняет все данные приложения.

EDIT: сохранить данные приложения вручную, скопировать его с /data/data/my.package.name/... в безопасное место, а затем восстановить при необходимости.

Ответ 4

Благодаря @Evan ваше решение отлично работает:

android {
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
    }
}

Чтобы добавить "(DEBUG)" в заголовок вашего приложения при запуске в режиме отладки, поместите этот код в свою активность onCreate:

PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
    //The .debug specified in gradle
    if (pInfo.packageName.equals("YOUR_PACKAGE_NAME_HERE.debug")) {
        setTitle(getTitle() + " (DEBUG)");
}

Ответ 5

Для меня мне также нужно было добавить:

<permission                                                                               
      android:name="${applicationId}.permission.C2D_MESSAGE"                                
      android:protectionLevel="signature" />                                                

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> 

В противном случае оба получат одно и то же разрешение C2D_MESSAGE, которое приведет к:

Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=<your applicationId>.permission.C2D_MESSAGE pkg=<your applicationId>]