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

Установка Android APK без подсказки

Мы пишем приложение для Android, которое показывает рекламу на больших экранах. У нас есть бэкэнд, где рекламодатели могут выбирать рекламу, поэтому они обновляются почти мгновенно. Поскольку будет запущено большое количество ящиков Android (подключено к экранам HDMI), мы должны иметь возможность обновлять наше программное обеспечение удаленно.

В этом случае:

Основное приложение работает непрерывно (если не выключено), и пользователи никогда не видят ничего, что связано с Android. Нам нужно приложение для обновления, которое прослушивает обновления и удаляет основной apk, устанавливает новый apk. Во время обновления мы покажем действие с "Обновление, подождите", пока не будет установлен и не будет показан новый главный apk.

Что нам нужно:

Нам нужна помощь в том, как реализовать механизм обновления, не запрашивая пользователя на ROOTED DEVICE.

Что мы имеем:

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

В активности обновления

 try {
            Process proc = Runtime.getRuntime().exec(new String[]{"su", "pm install -r /mnt/sdcard/MYFOLDER/testAPK.apk"});
            stringBuilder.append(String.valueOf(proc.waitFor()));
            stringBuilder.append("\n");
        } catch (Exception e) {
            if (e instanceof IOException) {
                Log.d(TAG, "IOException");
            } else if (e instanceof InterruptedException) {
                Log.d(TAG, "InterruptedException");
            } else {
                e.printStackTrace();
            }
        }

StringBuilder печатает 11, но делает то же самое, если я даю произвольную невыполнимую команду.

В манифесте

<!-- Permission to start UpdaterService on boot -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<!-- Install/delete permissions, only granted to system apps -->
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />

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

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

Короче говоря, нет установки моего теста APK, и я понятия не имею, как это решить. Любая помощь будет оценена!

4b9b3361

Ответ 1

Вы можете просто использовать команду adb install для установки/обновления APK. Пример кода ниже

public static void InstallAPK(String filename){
    File file = new File(filename); 
    if(file.exists()){
        try {   
            String command;
            command = "adb install -r " + filename;
            Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
            proc.waitFor();
        } catch (Exception e) {
        e.printStackTrace();
        }
     }
  }

ИЛИ

Пожалуйста, проверьте http://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/