Почему обновление приложения Android может привести к его появлению дважды? - PullRequest
4 голосов
/ 20 мая 2009

Я внес много изменений в свое приложение: схема баз данных, графика, код и т. Д. Самое большое - это имя пакета, которое я переименовал в совершенно другое. Applicatgio получил то же имя и Id в файле manifte.xml, а apk получил то же имя и ту же цифровую подпись.

Тем не менее, при использовании ./adb install -r myapp.apk myapp дважды появляется в меню. Конечно, поскольку БД хранится в каталоге, используя имя пакета в качестве имени, пользователь чувствует, что его данные потеряны.

Как я могу предотвратить это, и если я не могу, как я могу автоматизировать миграцию?

У меня есть несколько подсказок: запрос пользователя на удаление старого приложения, копирование базы данных из старого файла в новый и т. Д.

Ответы [ 2 ]

3 голосов
/ 21 мая 2009

Прямой ответ: приложение появляется дважды, потому что Android Market и Android OS рассматривают два разных пакета как два разных приложения. Код может быть одинаковым, но если пакеты разные, приложения совершенно разные

Android Market идентифицирует приложения по имени пакета. Я подозреваю, что это связано с тем, что ОС отслеживает программы по пакетам ... имеет смысл, что вам не нужно устанавливать два пакета с одинаковым именем, как ОС узнает, какой из них вызывать? Поэтому, если вы устанавливаете пакет с тем же именем, что и пакет, который уже установлен, ОС увидит его как обновление пакета и позволит новой программе получить доступ к старым данным пользователя.

Вы заявляете, что пакеты имеют одинаковый идентификатор, я предполагаю, что это идентификатор пользователя. Это позволяет вам обмениваться данными между пакетами. Больше информации здесь:

http://developer.android.com/guide/topics/security/security.html#userid

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

1 голос
/ 03 августа 2011

Подпись приложения должна быть одинаковой. Если вы импортировали проект в другое Eclipse, соберите его и загрузите на рынок, вы увидите 2 отдельных приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...