Я написал бета-версию приложения. Он будет доступен для загрузки через Интернет (я не буду публиковать его в Play Market). Можно ли обновить это приложение без посещения Play Market, когда выйдет новая версия?
Обновите приложение для Android (без посещения магазина Google Play)
Ответы (5)
Абсолютно. Однако вам нужно будет создать механизм, чтобы ваше приложение звонило домой на сервер, выясняло, есть ли более новая версия приложения, и если есть, вытащите ее и установите. Как только вы определили, что вам действительно нужно загрузить обновление, вы можете сделать это с помощью чего-то похожего на эту AsyncTask:
protected String doInBackground(String... sUrl) {
String path = "/sdcard/YourApp.apk";
try {
URL url = new URL(sUrl[0]);
URLConnection connection = url.openConnection();
connection.connect();
int fileLength = connection.getContentLength();
// download the file
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(path);
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress((int) (total * 100 / fileLength));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
Log.e("YourApp", "Well that didn't work out so well...");
Log.e("YourApp", e.getMessage());
}
return path;
}
// begin the installation by opening the resulting file
@Override
protected void onPostExecute(String path) {
Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive" );
Log.d("Lofting", "About to install new .apk");
this.context.startActivity(i);
}
Environment.getExternalStorageDirectory()
вместо жестко заданного пути. В противном случае это решение работает, спасибо!
- person johndodo; 18.07.2016
There was a problem parsing the package
. Пожалуйста, помогите мне здесь stackoverflow.com/questions/48313766/
- person Shambhu; 18.01.2018
publishProgress
, потому что я использовал этот код, ноpublishProgress
не объявлен? То же самое и с @Override
, не переопределяющим метод из своего суперкласса.
- person Abedin.Zhuniqi; 09.04.2019
Да, это возможно, вот что вы можете сделать примерно так:
Получить код текущей версии приложения
PackageInfo packageInfo = getPackageManager().getPackageInfo(context.getPackageName(), 0); int curVersionCode = packageInfo.versionCode;
Имейте сервер, на котором вы размещаете файл apk и создаете простой простой файл, содержащий только одно целое число, которое представляет код последней версии приложения.
Когда приложение запускается (или всякий раз, когда вы хотите проверить наличие обновлений), получите последний versionCode с сервера (например, через HTTP-запрос) и сравните его с текущей версией приложения.
Если есть новая версия, загрузите apk и установите ее (появится диалоговое окно для пользователя).
Редактировать:
Для этого можно использовать код @Blumer.
There was a problem parsing the package
. Пожалуйста, помогите мне здесь stackoverflow.com/questions/48313766/
- person Shambhu; 18.01.2018
это возможно, однако имейте в виду, что пользователю необходимо включить в настройках параметр «Разрешить установку приложений, не принадлежащих Маркету / неизвестных источников».
К вашему сведению, я только что прочитал об этом на http://blog.vivekpanyam.com/evolve-seamlessly-deploy-android-apps-to-users/?hn
Evolve - это библиотека для разработчиков Android, которая позволяет им развертывать новые версии приложения, не заходя в Google Play и не прося пользователей загрузить обновление. Он работает, используя отражение и динамическую генерацию байт-кода, чтобы «обмануть» Android при запуске нового кода.
Хотя это альфа, но это кажется возможным через множество обручей. Сомневаюсь, что это стоит того, кроме вредоносных программ ..
Официальная поддержка / библиотека для обновлений внутри приложений Ядро Google Play strong >
- Обновления внутри приложения - это функция библиотеки Play Core, которая предлагает активным пользователям обновить ваше приложение. Функция обновления в приложении поддерживается на устройствах под управлением Android 5.0 (уровень API 21) или выше и требует, чтобы ваше приложение использовало Play Core library версии 1.5.0 или выше. Кроме того, обновления в приложении поддерживаются только для мобильных устройств Android, планшетов Android и устройств с Chrome OS.
Ниже приведены типы потоков обновления
- Гибкие обновления (пример экрана)
- Немедленное обновление (пример экрана)
Ссылка: -Подробнее по этой теме