2014-11-10 2 views
1

Я создаю приложение запуска, которое я хотел бы обновить по воздуху. Я создал класс сервиса, который успешно проверяет и сравнивает номера версий приложения, чтобы определить, требуется ли обновление. Если сравниваемая версия apk выше текущей версии, я загружаю apk с моего облачного сервера, а затем создаю диалоговое окно для его установки.Как обновить приложение автоматически; Android

Конфликт, с которым я столкнулся, заключается в том, что обновление не будет установлено. Я получаю сообщение об ошибке «Существующий пакет с тем же именем с конфликтующей сигнатурой уже установлен». Я начинаю задаваться вопросом, правильна ли моя методология. Как я могу это решить? Вот что я делаю.

После обновления подтвердится, я показываю диалог и нажмите на кнопку подтверждения я использую Intent для разбора URL приложения

Intent i = new Intent(Intent.ACTION_VIEW); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
i.setData(Uri.parse(appUrl)); 
startActivity(i); 
finish(); 

Это фактически отправляет уведомление, что я должен нажать и нажмите установить на. Как только я это сделаю, он пытается установить, но затем дает мне ошибку в конфликтующих подписях.

В идеале, я просто хочу, чтобы он был установлен без необходимости уведомления. Заранее спасибо.

ответ

2

Вам не нужно обязательно использовать Playstore или любое другое приложение услуги хостинга для управления обновления приложений.Ваши пользователи должны включить: установить из неидентифицированных источников (на их телефоне Android)

Для автоматического обновления вы должны освободить все ваши APK с той же подписью. Если вы просто создаете и запускаете приложение из Eclipse, файл APK, сгенерированный в папке DIST, подписывается клавишей Debug (ключ по умолчанию для каждой машины)

Теперь, если вы создаете тот же код с другого компьютера, значения отладочной клавиши будет отличаться, и вы получите сообщение об ошибке: «существующий пакет с тем же именем с конфликтующей подписью уже установлен» при установке нового APK

Вот несколько решений к нему:

  1. Всегда отпустите APK для автоматического обновления с той же машины (это определенно невозможно)
  2. Подпишите все APK с одинаковой подписью. В Eclipse: щелкните правой кнопкой мыши по проекту> Инструменты Android> Экспорт подписанного пакета приложений
+0

Я попробую это. Я никогда не думал подписывать apks, так как это приложение для запуска, которое не может быть загружено через Google. Предполагается, что это операционная система. Позвольте мне попробовать это. – portfoliobuilder

1

Вы устанавливаете это почти правильно, но вы должны также установить тип данных:

i.setType("application/vnd.android.package-archive") 

Кроме того, не называйте finish() после startActivity(). Это не обязательно и может вызвать проблемы с новым намерением.

Конфликт подписи - еще одна проблема. См. this answer. APK, который вы пытаетесь установить, подписан другим ключом, который установлен в настоящее время.

Наконец, нет возможности установить APK без явного взаимодействия пользователя (если у вас нет root, конечно). Это намерение по соображениям безопасности.

+0

Позвольте мне попробовать. Я думаю, что вы и @Forgen имеют действительные ответы и предложения. Позвольте мне проверить это. – portfoliobuilder

1

Я видел ошибку «той же подписи» при развертывании непосредственно с Android Debug Bridge. Я имею в виду, вы не будете успешными в этом подходе, потому что:

  1. Android безопасность всегда требует авторизации пользователя для установки обновлений (если вы не укоренены, или части системы, как Google Play Маркет Авто
  2. Google Play всегда должен убить текущий процесс, чтобы обновить его. Возможно, это будет нормально, если вы обслуживаете, а приложение на самом деле является отдельной установкой (то есть двумя apks).
  3. Та же ошибка сигнатуры, которую я получил в Обычно ADB, когда система требует от меня полностью удалить исходный сиг природа применения. Два приложения с одной и той же подписью не могут быть установлены одновременно; что-то заставляет Android не выполнять «обновление» одного и того же пакета.

Вот допустимые способы выполнения обновления: Is there a way to automatically update application on Android?

Смежные вопросы