Мы пишем приложение для 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, и я понятия не имею, как это решить. Любая помощь будет оценена!