繁体   English   中英

Cordova Android 应用程序 - 适用于 Android 7,8,9; 在 Android 4,5 和 6 上失败

[英]Cordova Android App - Works on Android 7,8,9; Fails on Android 4,5, and 6

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

我有一个我一直在开发和维护的 android 应用程序。 我最新的测试设备在 android 9 上,可以毫无问题地启动应用程序。 当这些操作系统处于最流行的时候,我目前遇到的许多文件都是这个项目的一部分。

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

调试步骤

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

错误

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

未捕获的 SyntaxError:意外的令牌 =

堆栈跟踪

堆栈跟踪

  1. 在 Android 5,6

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

我想这是由于操作系统的年龄。 不确定如何通过整个应用程序启用严格模式,或者即使这是一件好事。 暂时我已经用var替换了所有的let来解决这个问题。 不是我喜欢的解决方案,如果您有更好的解决方案,请告诉我。

设置

Ide

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

测试设备

  • 三星 Galaxy 9 - Android 9 - 工作
  • HTC 10 - Android 8 - 作品
  • HTC 一 - Android 6 - 失败
  • 树莓派 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 要求

目标版本

目标版本

经过四个漫长的夜晚和一整天的棉绒,我弄清楚了问题所在。

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

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

例子:

  • let而不是var ,以便更快地释放 memory
  • 将默认变量添加到 function 签名
  • 缺失或额外;
  • `用于字符串块

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

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

喊出来:

polyfill 的来源:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM