【问题标题】:Cordova Android App - Works on Android 7,8,9; Fails on Android 4,5, and 6Cordova Android 应用程序 - 适用于 Android 7、8、9;在 Android 4,5 和 6 上失败
【发布时间】:2020-04-03 19:05:40
【问题描述】:

这一直是一个令人头疼的怪物,试图弄清楚发生了什么。

我有一个我一直在开发和维护的 android 应用程序。我最新的测试设备是在 android 9 上运行的,没有任何问题。我目前遇到问题的许多文件都是该项目的一部分,当时这些操作系统正处于最流行的时期。

为了保持广泛的兼容性范围,我的目标是让这个应用程序在 android 5 到 9 上运行

调试步骤

  1. 我已着手更新可能导致问题的插件
  2. 在真实硬件和仿真上测试
  3. let 替换为var
  4. 添加了控制台日志记录以查看完整的堆栈跟踪

错误

  1. 在 Android 4、5、6 上,当它尝试加载 jquery-1.8.1.js 时,它会返回以下错误,导致整个应用程序崩溃。堆栈跟踪似乎没什么帮助。

Uncaught SyntaxError: Unexpected token =

堆栈跟踪

  1. 在 Android 5,6 上

未捕获的 SyntaxError:在严格模式之外尚不支持块范围的声明(let、const、函数、类)

我想这是由于操作系统的年龄所致。不知道如何通过整个应用程序启用严格模式,或者即使这是一件好事。目前,我已将所有 let 替换为 var 以解决此问题。不是我喜欢的解决方案,如果您有更好的解决方案,请告诉我。

设置

创意

vs代码 Android Studio:(不知道为什么其中一个可以同时做到) * 3.6.1 用于运行 x86 的模拟器 * 3.4.0 连接到我的测试设备

测试设备

  • 三星 Galaxy 9 - Android 9 - 工作
  • HTC 10 - Android 8 - 工作
  • HTC One - Android 6 - 失败
  • Raspberry Pi 2 - Android 5 - 仍在启动。大声笑:'(

测试模拟器

全部使用 LGVK700 的硬件配置文件并运行 x86_64

  • Android 9 - 工作
  • Android 8 - 工作
  • Android 7 - 工作
  • Android 6 - 失败
  • Android 5 - 失败
  • Android 4 - 失败

设置文件

这是在 Cordova 8.1.2 (cordova-lib@8.1.1) 上运行的

config.xml:

<preference name="android-minSdkVersion" value="19" />
<preference name="android-targetSdkVersion" value="28" />

Cordova 插件和平台

$ cordova plugins
cordova-android-support-gradle-release 2.0.1 "cordova-android-support-gradle-release"
cordova-plugin-actionsheet 2.3.3 "ActionSheet"
cordova-plugin-appminimize 1.0.1 "AppMinimize"
cordova-plugin-camera 4.0.3 "Camera"
cordova-plugin-device 2.0.2 "Device"
cordova-plugin-dialogs 2.0.1 "Notification"
cordova-plugin-file 6.0.1 "File"
cordova-plugin-file-opener2 2.2.0 "File Opener2"
cordova-plugin-file-transfer 1.7.1 "File Transfer"
cordova-plugin-geolocation 4.0.1 "Geolocation"
cordova-plugin-inappbrowser 3.2.0 "InAppBrowser"
cordova-plugin-media-capture 3.0.2 "Capture"
cordova-plugin-network-information 2.0.1 "Network Information"
cordova-plugin-save-image 0.3.0 "SaveImage"
cordova-plugin-splashscreen 5.0.2 "Splashscreen"
cordova-plugin-statusbar 2.4.2 "StatusBar"
cordova-plugin-whitelist 1.3.3 "Whitelist"
uk.co.workingedge.phonegap.plugin.launchnavigator 4.2.2 "Launch Navigator"
$ cordova platforms
Installed platforms:
  android 8.1.0
  ios 5.0.1

支持

我已验证 cordova 应该支持 4.4、5 和 6

Android Requirements

目标版本

【问题讨论】:

    标签: android cordova android-5.0-lollipop android-6.0-marshmallow android-4.4-kitkat


    【解决方案1】:

    经过四个漫长的夜晚和一整天的 linting,我发现了问题所在。

    我得到的错误不是来自jquery-1.8.1,而是来自jquery在加载其他与es5不兼容的js文件时抛出的错误。

    插件和平台版本不是问题,是我利用了旧浏览器不支持的酷炫新功能。

    例子:

    • let而不是var,这样内存可以更快释放
    • 向函数签名添加默认变量
    • 缺失或额外;
    • ` 用于字符串块

    还有一些旧浏览器中不存在的字符串和数组函数。

    使用 JavaScript 固有的灵活性,我可以使用一种称为 polyfill 的技术重新添加这些内容。

    大喊:

    polyfill 的来源:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      相关资源
      最近更新 更多