2010-11-29 3 views
50

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

Я вижу различные возможные варианты (я не знаю, если таковые технически трудно или даже невозможно реализовать или, если есть какие-либо существующие функциональные возможности, которые могут быть повторно использованы):

  • при каждом запуске тестов приложение, если существует новая версия (путем запроса сервера), если она загружает новый apk и заменяет собой новую версию.
  • Используйте (или разработайте?) Отдельное приложение или службу, которая проводит проверку обновлений и процесс замены.
  • Используйте (или разработайте?) Приложение для частного рынка, у которого есть опция автоматического обновления. Этот вариант похож на второй, но более общий: приложение на рынке будет подключено к репозиторию, то есть обрабатывать произвольное количество (частных) приложений.

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

+1

`и заменяет себя с новым version` Это будет требовать привилегий суперпользователя. Как будет возможно любое решение для этого. Я верю в стандартную прошивку для Android, пользователь НЕОБХОДИМО взаимодействовать для установки приложения. Невозможно издеваться над этим без корневого или настраиваемого прошивки. – Falmarri 2010-11-29 22:02:54

+0

Разумеется, потребуется взаимодействие с пользователем для утверждения обновления - это для всего, что есть на рынке. Если вы действительно хотите их заставить, старая версия может отказаться работать после того, как она обнаружит, что новая доступна. – 2010-11-30 05:35:30

+14

Google должен предоставлять функции автоматического обновления приложения из приватно размещенного APK, поэтому всем не нужно изобретать колесо с пользовательскими обновлениями. – Jim 2013-04-11 00:51:51

ответ

6

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

Вы уже все это обозначили - проверьте новую версию на сервере (было бы неплохо дать пользователю возможность отключить это), а если есть новая версия, вы можете либо просто ссылаться на URL с APK (который, IIRC, использует менеджер загрузки браузера для его загрузки), или вы можете загрузить его с помощью своего приложения, а затем указать намерение на свой локальный файл. Использование HTTP-ссылки технически менее трудоемок и более чище - чем больше вы позволяете операционной системе, тем лучше - если только нет причин.

18

janjonas, в компании я работаю у нас была аналогичная проблема с Windows Mobile 6.x, и мы используем довольно много то же самое решение, на который указывает EboMike:

enter image description here

Основная проверка приложение, если это обновлен против WebService. Он получает текущую версию & URL-адрес, с которого загружается новая версия, если это необходимо. Затем основное приложение запускает приложение Updater, передает URL-адрес и завершает работу.

Обновитель выполняет загрузку новой программы через HTTP, показывая пользователю% загруженную. Пользователь может отменить загрузку в любое время, контролируемым образом, и Updater может зарегистрировать эту отмену.

С момента загрузки нового приложения программа обновления запускает новое приложение и завершает работу.

1

Некоторые из разрешений мы будем использовать, чтобы получить это сделать, являются следующие:

<uses-permission android:name="android.permission.ACCESS_SUPERUSER" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Позвольте мне объяснить немного ... Последний, WRITE_EXTERNAL_STORAGE, само за себя. С ACCESS_SUPERUSER мы сообщим системе, что мы намерены использовать привилегии root. В будущем вам понадобится READ_EXTERNAL_STORAGE, чтобы ваше приложение могло читать файлы на SD-карте.

Предполагая, что вы загрузили файл, и что все эти устройства могут быть искоренены (ограниченное количество клиентов, а не на Play и т.д.), вы можете сделать это:

String filePath = Environment.getExternalStorageDirectory().toString() + "/your_app_directory/your_app_filename.apk"; 
Process installProcess = null; 
int installResult = -1337; 

try { 
    installProcess = Runtime.getRuntime().exec("su -c pm install -r " + filePath); 
} catch (IOException e) { 
    // Handle IOException the way you like. 
} 

if (installProcess != null) { 
    try { 
     installResult = installProcess.waitFor(); 
    } catch(InterruptedException e) { 
     // Handle InterruptedException the way you like. 
    } 

    if (installResult == 0) { 
     // Success! 
    } else { 
     // Failure. :-/ 
    } 
} else { 
    // Failure 2. :-(
} 
3

Включение «Установка не- приложение для рынка "по-прежнему необходимо для любого приложения за пределами Google Play. Если он не включен, процесс установки будет запрашивать его и перенаправить пользователя в параметры приложения, после чего пользователь сможет установить приложение.

В зависимости от ваших потребностей вы можете делегировать третью часть lib.

0

Здесь может быть очень хромой метод, но для некоторых компаний, если вы считаете, что это применимо, это может быть очень легко реализовать.

  • Создайте экран пароля (passwordActivity), который запрашивает пароль для доступа к приложению.
  • Как только пароль введен, поднимите флаг (установите логическое значение от false до true с помощью sharedpreferences)
  • Поместите файл .apk в Google Store.
  • Измените пароль после установки приложения и опубликуйте новое обновление в Google Play Store.

Поскольку программное обеспечение собирается кэшировать значение флага, экран пароля не отображается, даже если пароль изменяется. Он будет отображаться только для новых установок, поэтому, возможно, потребуется повторить этот процесс.

Примечание: этот метод может лучше подойти, если не используется сотни пользователей, использующих приложение. И не забывайте, что этот метод также небезопасен. Подводя итог, если вы ищете способ сохранить приложение приватным и не имеете проблем с безопасностью, я рекомендую это.

0

приложение Update Убедитесь, что у вас уже есть новый скачать на АПК месте

void installNewVersion(String location) { 

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(location + "app-debug.apk")), 
      "application/vnd.android.package-archive"); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

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