IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Ionic APP在android上因WebView版本问题无法正常显示的解决办法 -> 正文阅读

[移动开发]Ionic APP在android上因WebView版本问题无法正常显示的解决办法

导致Ionic编译的APP在Android上一片空白的原因

最近用Ionic开发了一个APP,打算在基于Android的广告机上运行。
然而,编译安装以后,运行就只有一片空白。
开始以为是Android版本问题,因为在模拟器上Android 7以下就是这种情况,而当时拿到的广告机Android版本是5.1。
经测试Android 7.1的模拟器运行程序时正常的,于是后来换了一台Android 7.1.2的设备。
但到了真机上,APP仍然显示一片空白,只有换过的背景图。

问题的定位

浏览器测试

因为Ionic原理上就是一个webview打开网站运行。于是用广告机内置的浏览器对Ionic的网站进行测试。
使用

ionic capacitor run android -l --external

从浏览器地址栏直接输入地址:http://<网站IP>:8100
发现内置浏览器也无法正常显示。
后来又下载安装了火狐和Chrome浏览器,发现这两个浏览器是可以正常运行的。

远程连接调试

在真机上安装了调试版 apk-debug.apk,执行起来。
然后用edge浏览器打开 edge://inspect/#devices,发现找不到设备
在这里插入图片描述
于是尝试用adb命令连接,连接USB线后,使用:

adb devices -l

发现只列出了模拟器设备,于是要到了网络adb补丁,开启设备的网络adb服务。
开启服务后,使用

D:\Temp>adb connect 192.168.0.108:5555
* daemon not running; starting now at tcp:5037
* daemon started successfully
connected to 192.168.0.108:5555

连接上设备,然后就可以找到设备rk3288了。
在这里插入图片描述
点击 inspect 连接,浏览器会打开一个新的浏览器,显示web界面的状态。
这个时候发现,web调试工具的“元素”窗口中,<app-root></app-root>是空的。由此可以断定angular的javascript未正确执行。
由此判断可能是webview版本过低造成的

升级webview版本

获得修改webview的权限

在网上下载了一个Android System WebView的apk安装,但并没有修复问题。
后来又找了一篇关于如何不通过root系统升级webview版本的文章:
https://cloud.tencent.com/developer/article/1388497

按照文章的说法,进入shell,然后执行remount,试图用新的webview.apk取代旧的,但remount并不成功,system目录仍然为只读。

D:\Temp>adb connect 192.168.0.108
connected to 192.168.0.108:5555

D:\Temp>adb shell
rk3288:/ $ su
rk3288:/ $ mount -o rw,remount /system
mount: '/dev/block/platform/ff0f0000.dwmmc/by-name/system' not user mountable in fstab
1|rk3288:/ $

后来找到一篇文章,https://blog.csdn.net/u010684585/article/details/78270171
使用:

D:\Temp>adb root
restarting adbd as root

D:\Temp>adb disable-verity

D:\Temp>adb reboot

待设备重启后就可以使用以下命令remount,这样 /system 目录就可以写了。

D:\Temp>adb root
restarting adbd as root

D:\Temp>adb remount
remount succeeded

使用正确的webview版本

/system目录可写后,就可以通过以下命令,将/system/app/webview下的webview.apk替换掉

adb push ./webview.apk /system/app/webview/webview.apk

由于所使用的设备上的/system/app/webview目录下并没有lib目录,所以也不必解压apk。
然而第一次替换掉以后,仍然运行不起来,而且内置的浏览器也运行不了了(一启动就退出)。
后来发现,旧的webview的包名称是com.android.webview,而新的包名称为com.google.android.webview。
查看webview包名称和版本可以使用命令:

D:\Temp>D:\Android\android-sdk\build-tools\30.0.3\aapt dump badging ./webview.apk
package: name='com.android.webview' versionCode='438910500' versionName='89.0.4389.105' compileSdkVersion='30' compileSdkVersionCodename='11'
sdkVersion:'21'
targetSdkVersion:'30'
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
uses-permission: name='android.permission.FOREGROUND_SERVICE'
application-label:'Android System WebView'

注意:aapt命令在build-tools目录下,直接命令行执行会找不到该命令

于是到 https://www.apkmirror.com 查找 com.android.webview。
在这里插入图片描述
由于已经找不到google发布的版本,所以只能找一个第三方的版本,下载后查看包名称,确为com.android.webview。
替换后,程序即可正常显示了。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:56:29  更:2021-09-07 10:57:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:02:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码