一. 应用程序升级流程

本文仅介绍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
    }
}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐