flutter自动更新

一. 应用程序升级流程

本文仅介绍Android App的升级流程:

1. 获取本地apk版本号;

2. 请求接口获取服务器版本号和更新包地址;

3. 如果本地版本和服务器版本不一致则提示升级,弹窗更新提示框;

4. 用户确定升级,调用文件传输方法下载apk文件;

5. 监听下载进度,当下载完成打开apk进行安装;

二.获取本地版本信息

1、安装包

package_info | Dart Package

2、引用包

// 引入获取版本信息包
import 'package:package_info/package_info.dart';
 
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String appName = packageInfo.appName;
String version = packageInfo.version;
String packageName = packageInfo.packageName;
 
// 应用名称
print("appName:${appName}");
// 版本号
print("version:${version}");
// 包名称
print("packageName:${packageName}");

三.获取应用安装目录

1、安装包

path_provider | Dart Package

2、引用包

// 引入获取文件存储路径的包
import 'package:path_provider/path_provider.dart';

Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
 
// 获取应用的安装目录
print("appDocDir:${appDocPath}");

四.下载更新apk文件

1、安装包

ota_update | Dart Package

2、引用包

// 引入下载文件的包
import 'package:ota_update/ota_update.dart';

String fileName = "下载包名称.apk";//包名称必须保持一致
String url = "http://xxxx/下载包名称.apk";//线上更新包地址
String _progress = '0';
OtaUpdate()
   .execute(url, destinationFilename: fileName)
   .listen(
        (OtaEvent event) async{
          switch (event.status) {
            case OtaStatus.DOWNLOADING: // 下载中
              _progress = event.value!;
              print('下载进度:${event.value!}%');
              break;
            case OtaStatus.INSTALLING: //安装中
              _progress = '100';
              break;
            case OtaStatus.PERMISSION_NOT_GRANTED_ERROR: // 权限错误
              print('由于缺少权限,无法继续!');
              break;
            default: // 其他问题
              break;
          }
        },
     );

五.配置信息

1、android/app/src/main/AndroidManifest.xml

<!-- 访问网络 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 用于写入缓存数据到扩展存储卡 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!--application中添加-->
<provider
    android:name="sk.fourq.otaupdate.OtaUpdateFileProvider"
    android:authorities="${applicationId}.ota_update_provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
               android:resource="@xml/filepaths" />
</provider>
<!--application里添加 android:requestLegacyExternalStorage="true" -->
<application
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="项目名称"
        android:requestLegacyExternalStorage="true"
        android:networkSecurityConfig="@xml/network_security_config"
        android:usesCleartextTraffic="true">

2、android/app/src/main/res/xml/filepaths.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
    <external-path name="camera_photos" path="" />
    <external-path name="files_root" path="Android/data/下载包名称/" />
    <external-path name="external_storage_root" path="." />
</paths>
</resources>

3、android/build.gradle

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
    project.evaluationDependsOn(':app')
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "27.1.1"
            }
        }
    }
}

4、android/app/src/build.gradle

android {
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聂曦r

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值