Giter VIP home page Giter VIP logo

flutter_xupdate's Introduction

flutter_xupdate

Version Build Status Issue Star

A Flutter plugin for XUpdate -- Android Update Library。See the use Chinese Document for details。

About me

WeChat public number juejin zhihu CSDN jianshu segmentfault bilibili toutiao
我的Android开源之旅 Click me Click me Click me Click me Click me Click me Click me

Video tutorial

How to use flutter_xupdate

Stargazers over time

Stargazers over time

Getting Started

You should ensure that you add the flutter_xupdate as a dependency in your flutter project.

// pub 集成
dependencies:
  flutter_xupdate: ^3.0.0

//github  集成
dependencies:
  flutter_xupdate:
    git:
      url: git://github.com/xuexiangjys/flutter_xupdate.git
      ref: master

UseCase

Initialization

  ///初始化
   void initXUpdate() {
     if (Platform.isAndroid) {
       FlutterXUpdate.init(
         ///是否输出日志
         debug: true,
         ///是否使用post请求
         isPost: false,
         ///post请求是否是上传json
         isPostJson: false,
         ///请求响应超时时间
         timeout: 25000,
         ///是否开启自动模式
         isWifiOnly: false,
         ///是否开启自动模式
         isAutoMode: false,
         ///需要设置的公共参数
         supportSilentInstall: false,
         ///在下载过程中,如果点击了取消的话,是否弹出切换下载方式的重试提示弹窗
         enableRetry: false
       ).then((value) {
         updateMessage("初始化成功: $value");
       }).catchError((error) {
         print(error);
       });

       FlutterXUpdate.setErrorHandler(
           onUpdateError: (Map<String, dynamic> message) async {
         print(message);
         setState(() {
           _message = "$message";
         });
       });
     } else {
       updateMessage("ios暂不支持XUpdate更新");
     }
   }

JSON Format

{
  "Code": 0, //0代表请求成功,非0代表失败
  "Msg": "", //请求出错的信息
  "UpdateStatus": 1, //0代表不更新,1代表有版本更新,不需要强制升级,2代表有版本更新,需要强制升级
  "VersionCode": 3,
  "VersionName": "1.0.2",
  "ModifyContent": "1、优化api接口。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。",
  "DownloadUrl": "https://raw.githubusercontent.com/xuexiangjys/XUpdate/master/apk/xupdate_demo_1.0.2.apk",
  "ApkSize": 2048
  "ApkMd5": "..."  //md5值没有的话,就无法保证apk是否完整,每次都会重新下载。框架默认使用的是md5加密。
}

CheckUpdate

  ///默认App更新
  void checkUpdateDefault() {
    FlutterXUpdate.checkUpdate(url: _updateUrl);
  }

  ///默认App更新 + 支持后台更新
  void checkUpdateSupportBackground() {
    FlutterXUpdate.checkUpdate(url: _updateUrl, supportBackgroundUpdate: true);
  }

  ///调整宽高比
  void checkUpdateRatio() {
    FlutterXUpdate.checkUpdate(url: _updateUrl, widthRatio: 0.6);
  }

  ///强制更新
  void checkUpdateForce() {
    FlutterXUpdate.checkUpdate(url: mUpdateUrl2);
  }

  ///自动模式, 如果需要完全无人干预,自动更新,需要root权限【静默安装需要】
  void checkUpdateAutoMode() {
    FlutterXUpdate.checkUpdate(url: _updateUrl, isAutoMode: true);
  }

  ///下载时点击取消允许切换下载方式
  void enableChangeDownLoadType() {
    FlutterXUpdate.checkUpdate(
      url: _updateUrl,
      overrideGlobalRetryStrategy: true,
      enableRetry: true,
      retryContent: "Github下载速度太慢了,是否考虑切换蒲公英下载?",
      retryUrl: "https://www.pgyer.com/flutter_learn");
  }

Custom JSON Format

1.Setting up a custom update parser

FlutterXUpdate.setCustomParseHandler(onUpdateParse: (String json) async {
//Here is the custom JSON parsing
return customParseJson(json);
});

///Resolve the custom JSON content to the UpdateEntity entity class
UpdateEntity customParseJson(String json) {
  AppInfo appInfo = AppInfo.fromJson(json);
  return UpdateEntity(
      hasUpdate: appInfo.hasUpdate,
      isIgnorable: appInfo.isIgnorable,
      versionCode: appInfo.versionCode,
      versionName: appInfo.versionName,
      updateContent: appInfo.updateLog,
      downloadUrl: appInfo.apkUrl,
      apkSize: appInfo.apkSize);
}

2.Set the parameter isCustomParse to true

FlutterXUpdate.checkUpdate(url: _updateUrl3, isCustomParse: true);

Update By UpdateEntity Directly

///直接传入UpdateEntity进行更新提示
void checkUpdate8() {
    FlutterXUpdate.updateByInfo(updateEntity: customParseJson(_customJson));
}

Custom Update Prompt Style

Currently, only theme color and top picture customization are supported!

1.Configure top picture, Path: android/app/src/main/res/values/drawable, For example:

2.Set the parameter themeColortopImageRes and buttonTextColor

///自定义更新弹窗样式
void customPromptDialog() {
    FlutterXUpdate.checkUpdate(url: _updateUrl, themeColor: '#FFFFAC5D', topImageRes: 'bg_update_top', buttonTextColor: '#FFFFFFFF');
}

【Note】: When you use the command flutter build apk to make a release package, If you use the topImageRes property, you must configure shrinkResources to false, otherwise the pop-up window will display an exception!

Property value

Initialization

Name Type Default Description
debug bool false Whether Output log
isPost bool false Whether use post request
isPostJson bool false Whether post request upload json format
timeout int 20000(ms) Request response timeout
isWifiOnly bool true Whether update only under WiFi
isAutoMode bool false Whether to turn on automatic mode
supportSilentInstall bool false Whether to support silent installation requires that the device has root permission
enableRetry bool false In the process of downloading, if you click Cancel, whether the pop-up window for retrying to switch the download mode will pop up
retryContent String '' Try the prompt content of the prompt pop-up window again
retryUrl String '' Retrying prompt pop-up URL to jump after clicking
params Map / Public parameters to be set

CheckUpdate

Name Type Default Description
url String / URL of version check
params Map / Parameters
supportBackgroundUpdate bool false Whether to support background updates
isAutoMode bool false Whether to turn on automatic mode
isCustomParse bool false Is it a custom resolution protocol
themeColor String '' Apply pop-up theme color
topImageRes String '' The name of the top picture resource in the pop-up window
buttonTextColor String '' The color of the button text
widthRatio double / Proportion of version update Prompter width to screen
heightRatio double / Proportion of version update Prompter height to screen
overrideGlobalRetryStrategy bool false Whether to override the global retry policy
enableRetry bool false In the process of downloading, if you click Cancel, whether the pop-up window for retrying to switch the download mode will pop up
retryContent String '' Try the prompt content of the prompt pop-up window again
retryUrl String '' Retrying prompt pop-up URL to jump after clicking

flutter_xupdate's People

Contributors

xuexiangjys avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

flutter_xupdate's Issues

更新 flutter 后打包正式版本无法更新

更新 flutter 后打包正式版本无法更新

对问题进行清晰而简明的描述,把握问题的关键点。

使用的flutter_xupdate版本:1.0.2

如何重现(必填)
重现的步骤:
cd ./android
./gradlew assembleRelease
打包成功
输出

Configure project :flutter_xupdate
WARNING: The option setting 'android.enableR8=true' is deprecated.
It will be removed in version 5.0 of the Android Gradle plugin.
You will no longer be able to disable R8
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.7/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 34s

我的一些相关配置
如wiki-常见问题
我使用了原生打包,无论是否主动关闭R8压缩,都没有解决在手机上无法更新的问题
我的 build.grade :

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.google.gms.google-services'

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    compileSdkVersion 30

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.yuque.vyan"
        minSdkVersion 17
        targetSdkVersion 30
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        // testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

        ndk {
            abiFilters "arm64-v8a" //abiFilters "armeabi-v7a", "armeabi", "arm64-v8a", "x86"
        }
    }

    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.release
        }
        debug {
            // signingConfig signingConfigs.release
        }
    }
}

flutter {
    source '../..'
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.google.firebase:firebase-analytics:17.2.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}

我的 gradle.properties

org.gradle.jvmargs=-Xmx1536M
android.enableD8=true
android.useAndroidX=true
android.enableJetifier=true
# android.enableR8=false

期望的效果
希望打包成功且release安装在手机上可以支持更新

设备信息

  • 设备名: vivo iqoo z1
  • Android版本: Android 10
  • 设备型号 V1986A
  • 系统版本 IQOOUI OD1986C_A_1.10.18

遇到问题如何解决?

遇到问题如何解决?

这里我简单提供几个解决问题的方法:

直接传入UpdateEntity进行更新提示,传入isForce: true,没有效果?

///将自定义的json内容解析为UpdateEntity实体类
UpdateEntity customParseJson(String json) {
AppInfo appInfo = AppInfo.fromJson(json);
print(appInfo);
return UpdateEntity(
isForce: true,
hasUpdate: appInfo.hasUpdate,
isIgnorable: appInfo.isIgnorable,
versionCode: appInfo.versionCode,
versionName: appInfo.versionName,
updateContent: appInfo.updateLog,
downloadUrl: appInfo.apkUrl,
apkSize: appInfo.apkSize);
}

String _customJson = '{"updateStatus": 2,"hasUpdate": true, "isIgnorable": true,"versionCode": 3,"versionName": "1.0.2","updateLog": "1、优化api接口。2、添加使用demo演示。3、新增自定义更新服务API接口。4、优化更新提示界面。","apkUrl": "https://down.qq.com/qqweb/QQ_1/android_apk/Android_8.5.0.5025_537066738.apk","apkSize": 4096}';

///直接传入UpdateEntity进行更新提示
void checkUpdateSupportBackground() {
UpdateEntity updateEntity = customParseJson(_customJson);
FlutterXUpdate.updateByInfo(updateEntity: updateEntity);
}

大家碰到过嘛?

升级没提示

{"Code":0,"Msg":"","VersionCode":"4.0.2","VersionName":"app","ModifyContent":"提示","DownloadUrl":"https://xuexiangjys.oss-cn-shan/xupdate_demo_1.0.2.apk","ApkSize":30720,"ApkMd5":"","UpdateStatus":2}
根据结果能返回数据 就是没办法提示升级

问题描述(必填)
W/System.err(29393): com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: multiple points W/System.err(29393): at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:228) W/System.err(29393): at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:218) W/System.err(29393): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131) W/System.err(29393): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222) W/System.err(29393): at com.google.gson.Gson.fromJson(Gson.java:927) W/System.err(29393): at com.google.gson.Gson.fromJson(Gson.java:892) W/System.err(29393): at com.google.gson.Gson.fromJson(Gson.java:841) W/System.err(29393): at com.google.gson.Gson.fromJson(Gson.java:813) W/System.err(29393): at com.xuexiang.xupdate.utils.UpdateUtils.fromJson(UpdateUtils.java:201) W/System.err(29393): at com.xuexiang.xupdate.proxy.impl.DefaultUpdateParser.parseJson(DefaultUpdateParser.java:37) W/System.err(29393): at com.xuexiang.xupdate.UpdateManager.parseJson(UpdateManager.java:269) W/System.err(29393): at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.processCheckResult(DefaultUpdateChecker.java:135) W/System.err(29393): at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.onCheckSuccess(DefaultUpdateChecker.java:100) W/System.err(29393): at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.access$000(DefaultUpdateChecker.java:44) W/System.err(29393): at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker$1.onSuccess(DefaultUpdateChecker.java:63) W/System.err(29393): at com.xuexiang.flutter_xupdate.OKHttpUpdateHttpService$1.onResponse(OKHttpUpdateHttpService.java:70) W/System.err(29393): at com.xuexiang.flutter_xupdate.OKHttpUpdateHttpService$1.onResponse(OKHttpUpdateHttpService.java:62) W/System.err(29393): at com.zhy.http.okhttp.OkHttpUtils$3.run(OkHttpUtils.java:186) W/System.err(29393): at android.os.Handler.handleCallback(Handler.java:900) W/System.err(29393): at android.os.Handler.dispatchMessage(Handler.java:103) W/System.err(29393): at android.os.Looper.loop(Looper.java:219) W/System.err(29393): at android.app.ActivityThread.main(ActivityThread.java:8347) W/System.err(29393): at java.lang.reflect.Method.invoke(Native Method) W/System.err(29393): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) W/System.err(29393): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) W/System.err(29393): Caused by: java.lang.NumberFormatException: multiple points W/System.err(29393): at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1914) W/System.err(29393): at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) W/System.err(29393): at java.lang.Double.parseDouble(Double.java:538) W/System.err(29393): at com.google.gson.stream.JsonReader.nextInt(JsonReader.java:1201) W/System.err(29393): at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:226) W/System.err(29393): ... 24 more

使用的flutter_xupdate版本(必填)
1.0.0

2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

2021-05-05 21:44:45.985 31453-31561/com.example.shzgej_web I/flutter: {code: 2006, detailMsg: Code:2006, msg:查询失败:解析Json错误!(You need to use a Theme.AppCompat theme (or descendant) with this activity.), message: 查询失败:解析Json错误!(You need to use a Theme.AppCompat theme (or descendant) with this activity.)}

021-05-05 21:44:44.723 31453-31453/com.example.shzgej_web E/ThemeUtils: View class androidx.appcompat.widget.AppCompatImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
2021-05-05 21:44:44.770 31453-31453/com.example.shzgej_web E/ThemeUtils: View class androidx.appcompat.widget.AppCompatImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:843)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:684)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at androidx.appcompat.app.AppCompatDialog.setContentView(AppCompatDialog.java:100)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.BaseDialog.init(BaseDialog.java:79)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.BaseDialog.init(BaseDialog.java:75)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.BaseDialog.(BaseDialog.java:64)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.BaseDialog.(BaseDialog.java:51)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.UpdateDialog.(UpdateDialog.java:128)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.UpdateDialog.newInstance(UpdateDialog.java:119)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.flutter_xupdate.FlutterUpdatePrompter.showPrompt(FlutterUpdatePrompter.java:60)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.UpdateManager.findNewVersion(UpdateManager.java:344)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.utils.UpdateUtils.processUpdateEntity(UpdateUtils.java:92)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.processCheckResult(DefaultUpdateChecker.java:137)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.onCheckSuccess(DefaultUpdateChecker.java:102)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.access$000(DefaultUpdateChecker.java:46)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker$1.onSuccess(DefaultUpdateChecker.java:65)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.flutter_xupdate.OKHttpUpdateHttpService$1.onResponse(OKHttpUpdateHttpService.java:82)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.flutter_xupdate.OKHttpUpdateHttpService$1.onResponse(OKHttpUpdateHttpService.java:74)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.zhy.http.okhttp.OkHttpUtils$3.run(OkHttpUtils.java:186)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at android.os.Handler.handleCallback(Handler.java:888)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at android.os.Handler.dispatchMessage(Handler.java:100)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at android.os.Looper.loop(Looper.java:213)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at android.app.ActivityThread.main(ActivityThread.java:8178)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at java.lang.reflect.Method.invoke(Native Method)
2021-05-05 21:44:44.774 31453-31453/com.example.shzgej_web W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)

手机更新中出现无法安装的问题

错误日志
{detailMsg: Code:5000, msg:安装APK失败!(Apk file verify failed, please check whether the MD5 value you set is correct!), message: 安装APK失败!(Apk file verify failed, please check whether the MD5 value you set is correct!), code: 5000}

{detailMsg: Code:5000, msg:安装APK失败!, message: 安装APK失败!, code: 5000}

./gradlew assembleRelease

Task :app:compileFlutterBuildRelease FAILED

FAILURE: Build failed with an exception.

  • Where:
    Script '/Applications/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 904

  • What went wrong:
    Execution failed for task ':app:compileFlutterBuildRelease'.

Process 'command '/Applications/flutter/bin/flutter'' finished with non-zero exit value 1

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 33s
1 actionable task: 1 executed

打包bug

大佬,使用flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi打包的apk,头部自定义图片会加载失败,更新弹窗显示一条空白条

请问下,根据什么判断是否有新版本的?

我在应用中放了一个按钮,用来检测新版本,如果检测到新版本就强制升级。现在遇到的情况是,即使升级到最新版本,再点击检测新版本,会把下载的新版本再安装一遍,不知道这个该怎么解决?请指教。谢谢了!

能否有一个返回信息

执行FlutterXUpdate.checkUpdate后,不知道返回的状态,如果是没有新版本,我希望自己做处理,例如有提示信息等

打包后判断是否有有新版本问题

1、打包后读取的version_code 不正确,version: 1.0.0+1
读取为1001
2、服务端返回1002也始终不提示有版本

3、能否调整一下程序,不需要去修改style ?

请问下,啥时候能提供ios的更新?

不知道啥时候能提供ios的更新,苹果商店的应用好说,可以直接跳转到苹果的应用商店,像企业内部应用的APP,就不能发布到应用商店,只能利用类似的功能进行升级了。

You need to use a Theme.AppCompat theme

{code: 2006, detailMsg: Code:2006, msg:查询失败:解析Json错误!(You need to use a Theme.AppCompat theme (or descendant) with this activity.), message: 查询失败:解析Json错误!(You need to use a Theme.AppCompat theme (or descendant) with this activity.)}

style 修改为下面

<style name="LaunchTheme" parent="Theme.AppCompat.Light.NoActionBar"> @drawable/launch_background false </style>

021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:843)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:684)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at androidx.appcompat.app.AppCompatDialog.setContentView(AppCompatDialog.java:100)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.BaseDialog.init(BaseDialog.java:79)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.BaseDialog.init(BaseDialog.java:75)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.BaseDialog.(BaseDialog.java:64)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.BaseDialog.(BaseDialog.java:51)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.UpdateDialog.(UpdateDialog.java:128)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.widget.UpdateDialog.newInstance(UpdateDialog.java:119)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.flutter_xupdate.FlutterUpdatePrompter.showPrompt(FlutterUpdatePrompter.java:60)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.UpdateManager.findNewVersion(UpdateManager.java:344)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.utils.UpdateUtils.processUpdateEntity(UpdateUtils.java:92)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.processCheckResult(DefaultUpdateChecker.java:137)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.onCheckSuccess(DefaultUpdateChecker.java:102)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.access$000(DefaultUpdateChecker.java:46)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker$1.onSuccess(DefaultUpdateChecker.java:65)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.flutter_xupdate.OKHttpUpdateHttpService$1.onResponse(OKHttpUpdateHttpService.java:82)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.xuexiang.flutter_xupdate.OKHttpUpdateHttpService$1.onResponse(OKHttpUpdateHttpService.java:74)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at com.zhy.http.okhttp.OkHttpUtils$3.run(OkHttpUtils.java:186)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at android.os.Handler.handleCallback(Handler.java:888)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at android.os.Handler.dispatchMessage(Handler.java:100)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at android.os.Looper.loop(Looper.java:213)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at android.app.ActivityThread.main(ActivityThread.java:8178)
2021-05-05 21:44:44.773 31453-31453/com.example.shzgej_web W/System.err: at java.lang.reflect.Method.invoke(Native Method)
2021-05-05 21:44:44.774 31453-31453/com.example.shzgej_web W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)

Caused by: android.view.InflateException: Binary XML file line #28 in com.example.myapp:layout/xupdate_dialog_update: Error inflating class

提Bug前需要做的事情

1.如果是集成问题的话,请保证仔细按照集成指南的步骤,一步一步来,不要跳步骤!
2.详细阅读过使用手册,并且确保是框架的问题。
3.参考常见问题,可以解决你出现的绝大多数问题!

如果以上都不能解决你的问题,那么请按照以下说明仔细填写信息,这里需要说明的是:不符合填写要求的issue一律不予理会,希望这样能节约大家的时间!


问题描述(必填)

I/XUpdate: 发现新版本:UpdateEntity{mHasUpdate=true, mIsForce=false, mIsIgnorable=false, mVersionCode=243, mVersionName='2.4.3', mUpdateContent='优化app稳定性', mDownloadEntity=DownloadEntity{mDownloadUrl='https://192.168.1.88:8080/myapp.apk', mCacheDir='/storage/emulated/0/Android/data/com.example.myapp/cache/xupdate', mMd5='3666012c0c53896146b40272895feb0c', mSize=43430, mIsShowNotification=false}, mIsSilent=false, mIsAutoInstall=true, mIUpdateHttpService=com.xuexiang.flutter_xupdate.OKHttpUpdateHttpService@a636d1a}
W/System.err(32372): android.view.InflateException: Binary XML file line #28 in com.example.myapp:layout/xupdate_dialog_update: Binary XML file line #28 in com.example.myapp:layout/xupdate_dialog_update: Error inflating class androidx.appcompat.widget.AppCompatImageView
W/System.err(32372): Caused by: android.view.InflateException: Binary XML file line #28 in com.example.myapp:layout/xupdate_dialog_update: Error inflating class androidx.appcompat.widget.AppCompatImageView
W/System.err(32372): Caused by: java.lang.reflect.InvocationTargetException
W/System.err(32372): at java.lang.reflect.Constructor.newInstance0(Native Method)
W/System.err(32372): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
W/System.err(32372): at android.view.LayoutInflater.createView(LayoutInflater.java:856)
W/System.err(32372): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1008)
W/System.err(32372): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:963)
W/System.err(32372): at android.view.LayoutInflater.rInflate(LayoutInflater.java:1125)
W/System.err(32372): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1086)
W/System.err(32372): at android.view.LayoutInflater.rInflate(LayoutInflater.java:1128)
W/System.err(32372): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1086)
W/System.err(32372): at android.view.LayoutInflater.inflate(LayoutInflater.java:684)
W/System.err(32372): at android.view.LayoutInflater.inflate(LayoutInflater.java:536)
W/System.err(32372): at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
W/System.err(32372): at com.xuexiang.xupdate.widget.BaseDialog.init(BaseDialog.java:74)
W/System.err(32372): at com.xuexiang.xupdate.widget.BaseDialog.(BaseDialog.java:64)
W/System.err(32372): at com.xuexiang.xupdate.widget.BaseDialog.(BaseDialog.java:51)
W/System.err(32372): at com.xuexiang.xupdate.widget.UpdateDialog.(UpdateDialog.java:128)
W/System.err(32372): at com.xuexiang.xupdate.widget.UpdateDialog.newInstance(UpdateDialog.java:119)
W/System.err(32372): at com.xuexiang.flutter_xupdate.FlutterUpdatePrompter.showPrompt(FlutterUpdatePrompter.java:60)
W/System.err(32372): at com.xuexiang.xupdate.UpdateManager.findNewVersion(UpdateManager.java:344)
W/System.err(32372): at com.xuexiang.xupdate.utils.UpdateUtils.processUpdateEntity(UpdateUtils.java:91)
W/System.err(32372): at com.xuexiang.xupdate.UpdateManager.update(UpdateManager.java:437)
W/System.err(32372): at com.xuexiang.flutter_xupdate.FlutterXUpdatePlugin.updateByInfo(FlutterXUpdatePlugin.java:223)
W/System.err(32372): at com.xuexiang.flutter_xupdate.FlutterXUpdatePlugin.onMethodCall(FlutterXUpdatePlugin.java:77)
W/System.err(32372): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
W/System.err(32372): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
W/System.err(32372): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
W/System.err(32372): at android.os.MessageQueue.nativePollOnce(Native Method)
W/System.err(32372): at android.os.MessageQueue.next(MessageQueue.java:335)
W/System.err(32372): at android.os.Looper.loop(Looper.java:193)
W/System.err(32372): at android.app.ActivityThread.main(ActivityThread.java:8057)
W/System.err(32372): at java.lang.reflect.Method.invoke(Native Method)
W/System.err(32372): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
W/System.err(32372): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
W/System.err(32372): Caused by: java.lang.NoSuchMethodError: No static method saveAttributeDataForStyleable(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V in class Landroidx/core/view/ViewCompat; or its super classes (declaration of 'androidx.core.view.ViewCompat' appears in /data/app/~~J990GAEsaMPPuW3k31qguQ==/com.example.myapp-sqV0hoXhein0wgprzbWIGw==/base.apk)
W/System.err(32372): at androidx.appcompat.widget.AppCompatBackgroundHelper.loadFromAttributes(AppCompatBackgroundHelper.java:51)
W/System.err(32372): at androidx.appcompat.widget.AppCompatImageView.(AppCompatImageView.java:79)
W/System.err(32372): at androidx.appcompat.widget.AppCompatImageView.(AppCompatImageView.java:69)
W/System.err(32372): ... 33 more

使用的flutter_xupdate版本(必填)

flutter_xupdate: 1.0.2 或 master

如何重现(必填)
重现的步骤:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

期望的效果
对你期望的效果进行清晰而简明的描述。

截图
如果方便的话,贴一下程序截图和代码片段以帮助解释您的问题。

设备信息
请填写一下你运行设备的信息,信息越全越有助于我理解问题

  • 设备名: 小米10
  • Android版本: 11
  • 设备型号 xiaomi10
  • 系统版本 miui 11

附加信息
在此处添加任何有关该问题的任何其他说明。

设置topImageRes之后底部关闭按钮显示不全

问题描述(必填)
使用自定义更新图片之后,手机字体和显示大小设置为标准(或默认)情况下,更新提示底部的关闭按钮无法完全显示。详情见截图。

使用的flutter_xupdate版本(必填)

flutter_xupdate-1.0.2

如何重现(必填)
重现的步骤:

无具体步骤。

期望的效果

底部关闭按钮可以正常显示。

截图

   FlutterXUpdate.updateByInfo(topImageRes: 'bg_update_top1',updateEntity: updateEntity, themeColor: themeColor,buttonTextColor: buttonTextColor);

QQ图片20210226095154

  • 如果方便的话,贴一下程序截图和代码片段以帮助解释您的问题。

设备信息
请填写一下你运行设备的信息,信息越全越有助于我理解问题

  • 设备名: [华为荣耀20 pro]
  • Android版本: [Android 10.0]
  • 设备型号 [YAL-AL10]
  • Magic UI版本 [4.0.0]
  • 系统版本(手机厂商定制rom)

附加信息
在此处添加任何有关该问题的任何其他说明。

修改手机显示字体大小为标准,显示大小为默认之后,非强制升级弹框底部关闭按钮无法完全显示。

问题描述(必填)
修改手机显示字体大小为标准,显示大小为默认之后,非强制升级弹框底部关闭按钮无法完全显示。

使用的flutter_xupdate版本(必填)
1.0.2

如何重现(必填)
重现的步骤:

期望的效果
关闭按钮可以正常显示。

截图
Screenshot_20210226_150646_com android settings
qq_pic_merged_1614323361139

设备信息
请填写一下你运行设备的信息,信息越全越有助于我理解问题

  • 设备名: [华为荣耀20 pro]
  • Android版本: [Android 10.0]
  • 设备型号 [YAL-AL10]
  • 系统版本(手机厂商定制rom)

附加信息
在此处添加任何有关该问题的任何其他说明。

自定义弹框,release下顶部图片不显示

提Bug前需要做的事情

1.如果是集成问题的话,请保证仔细按照集成指南的步骤,一步一步来,不要跳步骤!
2.详细阅读过使用手册,并且确保是框架的问题。
3.参考常见问题,可以解决你出现的绝大多数问题!

如果以上都不能解决你的问题,那么请按照以下说明仔细填写信息,这里需要说明的是:不符合填写要求的issue一律不予理会,希望这样能节约大家的时间!


问题描述(必填)
使用自定义弹框样式的顶部图片,debug下正常显示。release下图片不显示

使用的flutter_xupdate版本(必填)
2.0.0

如何重现(必填)
重现的步骤:

  1. 使用如下的代码 FlutterXUpdate.checkUpdate(
    url: _updateUrl,
    themeColor: '#FFFFAC5D',
    topImageRes: 'bg_update_top',
    buttonTextColor: '#FFFFFFFF');
  2. 运行release版本 flutter run --release
  3. 应用启动后,更新界面不显示图片
    微信图片_20210615154027

期望的效果
更新界面,和debug模式下一样,正常显示图片
微信图片_20210615154447

截图
代码图片
微信图片_20210615154439

设备信息
请填写一下你运行设备的信息,信息越全越有助于我理解问题

  • 设备名: [小米6]
  • Android版本: [Android 9]
  • 设备型号 [MI 6]
  • 系统版本(miui12 20.6.18)

附加信息

关于传入对象下载时 下载进度条不更新的问题

下载进度条不更新的问题
我在使用你这个插件的时候 用的版本是 flutter_xupdate: ^0.0.3,下载方法是使用FlutterXUpdate.updateByInfo(updateEntity: customParseJson(urlJson)); 点击升级,如果没有权限,就弹出权限提示对话框,后面再点击升级,就出现有进度条,下载过程中进度条一直显示是0%。

flutter_xupdate: ^0.0.3

点击对话框中的升级按钮
重现的步骤:
点击更新对话中的升级按钮

期望的效果
能够看到进度条的百分比和进度都有更新。

@截图
`void showUploadDialog(AppVersionEntity appVersionEntity,bool isForce){
Map<String,dynamic> data = new Map();
data['hasUpdate'] = true;
data['isForce'] = isForce;
data['versionCode'] = 2;
data['versionName'] = '${appVersionEntity.version}';
data['updateLog'] = '${appVersionEntity.modifyContent}';
data['apkUrl'] = '${appVersionEntity.androidDownUrl}';
data['apkSize'] = 4096;
String urlJson = json.encode(data);

FlutterXUpdate.updateByInfo(updateEntity: customParseJson(urlJson));

}`

设备信息
请填写一下你运行设备的信息,信息越全越有助于我理解问题

  • 设备名: [魅族pro6]
  • Android版本: [e.g. Android 7.1.1]
  • 设备型号 [e.g. ]
  • 系统版本(手机厂商定制rom)

附加信息
在此处添加任何有关该问题的任何其他说明。

release版本升级的问题。

您好,我在IDE中调试运行的时候可以升级,把应用使用flutter build apk --release打包成release版本后,就没有升级提示,但是能获取版本信息的json。
{ "Code": 0, "Msg": "", "UpdateStatus": 2, "VersionCode": 3, "VersionName": "3.0.0", "UploadTime": "2020-02-20 08:00:00", "ModifyContent": "\r\n1、增加了账号系统。\r\n2、增加了语言和皮肤主题的切换功能。\r\n3、还有更多新增的案例待你去发现。", "DownloadUrl": "https://wap.rzport.com/exam/android/exam.apk", "ApkSize": 23338, "ApkMd5": "D07D86E9C8C57715145D1E64AFAFB1EE" }

我新建了一个页面内容如下:

  void initState() {
    super.initState();
    _initXUpdate();
  }

  ///初始化
  Future _initXUpdate() async {
    print(Platform.isAndroid);
    if (Platform.isAndroid) {
      FlutterXUpdate.init(
              debug: true,
              isPost: false,
              isPostJson: false,
              isWifiOnly: false,
              isAutoMode: false,
              supportSilentInstall: false,
              enableRetry: false)
          .then((value) {
        print("exam初始化成功: $value");
      }).catchError((error) {
        print(error);
      });
      FlutterXUpdate.setCustomParseHandler(onUpdateParse: (String json) async {
        return customParseJson(json);
      });

      FlutterXUpdate.setUpdateHandler(
        onUpdateError: (Map<String, dynamic> message) async {
          print(message);
        },
        onUpdateParse: (String json) async {
          return customParseJson(json);
        },
      );
    } else {
      print("ios暂不支持XUpdate更新");
    }
  }

  UpdateEntity customParseJson(String json) {
    VersionInfo appInfo = VersionInfo.fromJson(json);
    print(appInfo);
    return UpdateEntity(
        hasUpdate: appInfo.hasUpdate,
        isIgnorable: appInfo.isIgnorable,
        versionCode: appInfo.versionCode,
        versionName: appInfo.versionName,
        updateContent: appInfo.updateLog,
        downloadUrl: appInfo.apkUrl,
        apkSize: appInfo.apkSize);
  }```

创建了一个按钮,点击调用 FlutterXUpdate.checkUpdate(
url: "https://xxxxxx/version.json");
},

release版本后,点击按钮,没有更新提示,不知道什么地方出问题了,请指教。谢谢了。

怎么改成中文,默认是英文

提Bug前需要做的事情

1.如果是集成问题的话,请保证仔细按照集成指南的步骤,一步一步来,不要跳步骤!
2.详细阅读过使用手册,并且确保是框架的问题。
3.参考常见问题,可以解决你出现的绝大多数问题!

如果以上都不能解决你的问题,那么请按照以下说明仔细填写信息,这里需要说明的是:不符合填写要求的issue一律不予理会,希望这样能节约大家的时间!


问题描述(必填)
对问题进行清晰而简明的描述,把握问题的关键点。

使用的flutter_xupdate版本(必填)

如何重现(必填)
重现的步骤:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

期望的效果
对你期望的效果进行清晰而简明的描述。

截图
如果方便的话,贴一下程序截图和代码片段以帮助解释您的问题。

设备信息
请填写一下你运行设备的信息,信息越全越有助于我理解问题

  • 设备名: [e.g. 华为P20]
  • Android版本: [e.g. Android 7.0]
  • 设备型号 [e.g. ]
  • 系统版本(手机厂商定制rom)

附加信息
在此处添加任何有关该问题的任何其他说明。

查询失败:解析Json错误!

.flutter_v1_example/cache/xupdate', mMd5='89341b4e1b484585252b91967b907b07', mSize=81000, mIsShowNotification=false}, mIsSilent=false, mIsAutoInstall=true, mIUpdateHttpService=com.xuexiang.flutter_xupdate.OKHttpUpdateHttpService@dc6aaa}
E/ThemeUtils(14484): View class androidx.appcompat.widget.AppCompatImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
E/ThemeUtils(14484): View class androidx.appcompat.widget.AppCompatImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
W/System.err(14484): java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
W/System.err(14484): at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:843)
W/System.err(14484): at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
W/System.err(14484): at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:684)
W/System.err(14484): at androidx.appcompat.app.AppCompatDialog.setContentView(AppCompatDialog.java:100)
W/System.err(14484): at com.xuexiang.xupdate.widget.BaseDialog.init(BaseDialog.java:79)
W/System.err(14484): at com.xuexiang.xupdate.widget.BaseDialog.init(BaseDialog.java:75)
W/System.err(14484): at com.xuexiang.xupdate.widget.BaseDialog.(BaseDialog.java:64)
W/System.err(14484): at com.xuexiang.xupdate.widget.BaseDialog.(BaseDialog.java:51)
W/System.err(14484): at com.xuexiang.xupdate.widget.UpdateDialog.(UpdateDialog.java:128)
W/System.err(14484): at com.xuexiang.xupdate.widget.UpdateDialog.newInstance(UpdateDialog.java:119)
W/System.err(14484): at com.xuexiang.flutter_xupdate.FlutterUpdatePrompter.showPrompt(FlutterUpdatePrompter.java:60)
W/System.err(14484): at com.xuexiang.xupdate.UpdateManager.findNewVersion(UpdateManager.java:344)
W/System.err(14484): at com.xuexiang.xupdate.utils.UpdateUtils.processUpdateEntity(UpdateUtils.java:92)
W/System.err(14484): at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.processCheckResult(DefaultUpdateChecker.java:137)
W/System.err(14484): at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.onCheckSuccess(DefaultUpdateChecker.java:102)
W/System.err(14484): at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker.access$000(DefaultUpdateChecker.java:46)
W/System.err(14484): at com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker$1.onSuccess(DefaultUpdateChecker.java:65)
W/System.err(14484): at com.xuexiang.flutter_xupdate.OKHttpUpdateHttpService$1.onResponse(OKHttpUpdateHttpService.java:82)
W/System.err(14484): at com.xuexiang.flutter_xupdate.OKHttpUpdateHttpService$1.onResponse(OKHttpUpdateHttpService.java:74)
W/System.err(14484): at com.zhy.http.okhttp.OkHttpUtils$3.run(OkHttpUtils.java:186)
W/System.err(14484): at android.os.Handler.handleCallback(Handler.java:938)
W/System.err(14484): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(14484): at android.os.Looper.loop(Looper.java:263)
W/System.err(14484): at android.app.ActivityThread.main(ActivityThread.java:7810)
W/System.err(14484): at java.lang.reflect.Method.invoke(Native Method)
W/System.err(14484): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
W/System.err(14484): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:952)
I/flutter (14484): {code: 2006, detailMsg: Code:2006, msg:查询失败:解析Json错误!(You need to use a Theme.AppCompat theme (or descendant) with this activity.), message: 查询失败:解析Json错误!(You need to use a Theme.AppCompat theme (or descendant) with this activity.)}

按官方配置,自定义处理响应结果回调无效

问题描述,请看标题
FlutterXUpdate.setCustomParseHandler(onUpdateParse: (String json) async {
//Here is the custom JSON parsing
return customParseJson(json);
});

///Resolve the custom JSON content to the UpdateEntity entity class
UpdateEntity customParseJson(String json) {
AppInfo appInfo = AppInfo.fromJson(json);
return UpdateEntity(
hasUpdate: appInfo.hasUpdate,
isIgnorable: appInfo.isIgnorable,
versionCode: appInfo.versionCode,
versionName: appInfo.versionName,
updateContent: appInfo.updateLog,
downloadUrl: appInfo.apkUrl,
apkSize: appInfo.apkSize);
}

Flutter 1.22.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 1aafb3a8b9 (4 days ago) • 2020-11-13 09:59:28 -0800
Engine • revision 2c956a31c0
Tools • Dart 2.10.4

https请求报证书错误

使用示例中的网址测试后报错:

D/[XUpdate](10984): XUpdate.update()启动:XUpdate{mUpdateUrl='https://gitee.com/xuexiangjys/XUpdate/raw/master/jsonapi/update_test.json', mParams={appKey=sleepreading.top.zeus, versionCode=1}, mApkCacheDir='/storage/emulated/0/Android/data/sleepreading.top.zeus/cache/xupdate', mIsWifiOnly=false, mIsGet=true, mIsAutoMode=false}
D/[XUpdate](10984): 开始检查版本信息...
{code: 2000, detailMsg: Code:2000, msg:查询失败:网络请求错误!(Unacceptable certificate: CN=DigiCert Global Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US), message: 查询失败:网络请求错误!(Unacceptable certificate: CN=DigiCert Global Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US)}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.