如何处理 Android 应用程序中的版本更改

Posted

技术标签:

【中文标题】如何处理 Android 应用程序中的版本更改【英文标题】:How to handle version changes in an Android app 【发布时间】:2021-03-06 07:21:44 【问题描述】:

当我开发 android 应用程序时,我通常手动处理版本之间的更改(通过将当前版本代码与 SharedPreferences. 我搜索了一个可以以更适当的方式处理它的库(我使用 switch case),但我没有找到任何东西。

我的第一个问题,是否有图书馆可以做到这一点? 我发现一些库可以检查 Google Play 上是否有新版本的应用程序可用,但不处理版本之间的更改。

如果没有,我写了一篇关于一个 (https://github.com/nawrasg/AppUpdater) 的草稿。示例 (https://github.com/nawrasg/AppUpdater/blob/main/app/src/main/java/fr/nawrasg/appupdaterexample/App.kt) 显示了我的想法。 但是,我想到了几个问题:

版本更新后如何处理成功和失败?一个简单的布尔返回就足够了? 我还在考虑添加成功和失败的回调以执行有关版本的某些操作(例如显示模式或 toast)。 通常用户会按版本更新应用程序版本 (v1 --> v2, v2 --> v3),但有些用户可能会跳过一些 (v1 --> v3)。如何应对全球成功?捕获每个步骤的布尔值,然后验证所有步骤是否为真? 如何处理迁移块内的异步调用,因为简单的返回不起作用?使用处理程序?如果是这样,如何同时处理同步和异步迁移?

非常感谢,

【问题讨论】:

要求查找库对于 *** 来说是题外话。您的其余问题都是基于意见的,这也是题外话。 【参考方案1】:

试试这个并从 google play store 获取你的版本

public class VersionChecker extends AsyncTask<String, String, String> 

String newVersion;

@Override
protected String doInBackground(String... params) 

    try 
        newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + "your package name" + "&hl=en")
                .timeout(30000)
                .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                .referrer("http://www.google.com")
                .get()
                .select("div.hAyfc:nth-child(4) > span:nth-child(2) > div:nth-child(1) > span:nth-child(1)")
                .first()
                .ownText();
     catch (IOException e) 
        e.printStackTrace();
    

    return newVersion;


然后将您的应用当前版本与谷歌应用版本进行比较

   val version = VersionChecker()
    val versionName = version.execute().get()
    var currentVersion: String = ""

    //get current version
    try 
        val info = context?.packageManager?.getPackageInfo(activity?.packageName ?: "1.0", 0)
        currentVersion = info?.versionName.toString()
     catch (ex: Exception) 
        ex.printStackTrace()
    
      
  

【讨论】:

正如我在问题中提到的,我不是要检查是否有新版本可用(为此目的已经存在库),而是要处理两个版本之间的更改。

以上是关于如何处理 Android 应用程序中的版本更改的主要内容,如果未能解决你的问题,请参考以下文章

如何处理android服务中的保持连接

如何处理更改密码中的异常?

如何处理 maven 版本:使用精确版本设置

如何处理 tvOS 和 Android TV 之间的 React Native 应用程序中的缩放问题?

Android - 如何处理单个 ListViewItem 中的多个元素?

Jetpack Compose 和 Compose Navigation 如何处理 Android 活动?