使用 cordova 时,离子应用程序不会在服务器上命中

Ionic app doesn't hit on server when using cordova

我的 Ionic 应用程序在 运行 ionic serve 时工作正常但是当我使用命令 ionic cordova 运行 android --livereload 它没有命中服务器并给出错误 "Failed to load resource: net::ERR_CONNECTION_REFUSED " 以下是离子信息

   Ionic CLI                     : 4.12.0
   Ionic Framework               : @ionic/angular 4.4.2
   @angular-devkit/build-angular : 0.13.9
   @angular-devkit/schematics    : 7.3.9
   @angular/cli                  : 7.3.9
   @ionic/angular-toolkit        : 1.5.1

科尔多瓦:

   Cordova CLI       : 9.0.0 (cordova-lib@9.0.1)
   Cordova Platforms : android 8.0.0
   Cordova Plugins   : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 4.1.1, (and 4 other plugins)

效用:

   cordova-res : not installed
   native-run  : 0.2.7

系统:

   NodeJS : v10.16.0 (C:\Program Files\nodejs\node.exe)
   npm    : 6.9.2
   OS     : Windows 10

config.xml

<?xml version='1.0' encoding='utf-8'?>
<widget id="io.ionic.starter" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>MyApp</name>
    <description>An awesome Ionic/Cordova app.</description>
    <author email="hi@ionicframework.com" href="http://ionicframework.com/">Ionic Framework Team</author>
    <content src="index.html" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <preference name="ScrollEnabled" value="false" />
    <preference name="android-minSdkVersion" value="19" />
    <preference name="BackupWebStorage" value="none" />
    <preference name="SplashMaintainAspectRatio" value="true" />
    <preference name="FadeSplashScreenDuration" value="300" />
    <preference name="SplashShowOnlyFirstTime" value="false" />
    <preference name="SplashScreen" value="screen" />
    <preference name="SplashScreenDelay" value="3000" />
    <plugin name="cordova-plugin-whitelist" spec="1.3.3" /><br>
    <plugin name="cordova-plugin-statusbar" spec="2.4.2" />
    <plugin name="cordova-plugin-device" spec="2.0.2" />
    <plugin name="cordova-plugin-splashscreen" spec="5.0.2" />
    <plugin name="cordova-plugin-ionic-webview" spec="^4.0.0" /> //latest version
    <plugin name="cordova-plugin-ionic-keyboard" spec="^2.0.5" />
</widget>

下面是我在移动设备上部署时得到的快照

这是我得到的错误

这种情况下的一个选择是不传递用于 livereload 功能的 -l/-livereload。所以只是 运行:

ionic cordova run android

这将编译 apk 并将其部署到您的 phone,但不会 运行 用于监视更改的 Web 服务器。

在这种情况下,您仍然可以使用 Chrome 进行调试,但是如果您对标记进行了更改并按保存,它不会自动重新加载该更改的应用程序。您需要再次 运行 ionic cordova run android 来重建并将其部署到您的 phone.

优点 1:首次部署后,后续构建速度更快,因为启动了 gradle 服务器。

优点 2:如果您断开 USB,您仍然可以使用您的应用程序。使用 livereload 部署的应用程序,一旦断开连接,它就会中断。

其实我也很想解决你的问题。当我在联合办公空间四处走动时,有时网络似乎以某种方式被锁定并且只是阻塞了某些端口。我还没有弄清楚为什么或者是否有解决方法。

临时解决方法是设置 base href="."在 index.html 中。 但是你的图标不会被加载。

永久修复:

ionic cordova platform remove android
ionic cordova platform add android@7.1.0
ionic cordova plugin remove cordova-plugin-ionic-webview
ionic cordova plugin add cordova-plugin-ionic-webview@latest

您需要一些东西来代理来自 android 设备的 localhost:8080 请求返回到您的 livereload 服务器所在的开发箱 运行。

您可以通过 chrome 浏览器的端口转发来完成此操作,方法是在您的开发箱上打开 chrome://inspect/#devices,或者直接在 phone 的连接属性本身上配置端口转发.我用它在 windows 开发箱上通过 Fiddler 观看流量。

此外,离子 livereload 服务器可以配置为路由 non-ionic 流量,方法是配置 service proxies