Как управлять отладкой и выпуском версии на устройстве Android?
Я новичок в Android dev, и я почти готов выпустить первую версию своего приложения:)
При тестировании подписанного релиза apk на моем телефоне он отказывается устанавливать, поскольку версия отладки установлена с сигнатурой отладки.
Поэтому мне нужно удалить отладочную версию, но она удалит всю мою базу данных (и она будет делать это с моими друзьями, которые ее тестируют).
Есть ли способ управлять отладочной и выпускной версиями одного и того же приложения без потери данных?
Ответы
Ответ 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>]