如果你使用ionic2.0以上版本打包后的APP启动失败了,一般有一下几个原因:
1.TypeScript代码编译没通过(一般没有去修改Android和iOS 代码,所以先检查TypeScript),首先在根目录下执行 ionic serve 指令,如果在游览器中没有正常打开,则TypeScript代码肯定有问题了,根据提示修改就行了。如果正常打开,则接着往下检查。
2.排除了TypeScript的问题,接下来就要检查Android和iOS 了。一般这时候的启动失败最大的原因应该是加载超时。
Android解决办法:在根目录下找到platforms\android\CordovaLib\src\org\apache\cordova\CordovaWebViewImpl.java,然后打开找到如下代码:
我们找到timeoutCheck方法,这个方法是用来检测加载是否超时,currentLoadUrlTimeout这个变量默认是20秒,你可以修改这个变量使时间更长一点,但最好的解决方法是禁用超时检测,我们可以注销cordova.getActivity().runOnUiThread(loadError);这一行代码。
IOS解决办法:在根目录下找到platforms\ios\CordovaLib\Classes\Public\CDVViewController.m。然后打开找到如下代码:
注意看这行代码NSURLRequest* appReq = [NSURLRequest requestWithURL:appURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0];
其中timeoutInterval这个参数是打开URL的超时时间,我们可以传入一个更大的值。
超时的最优解决方案:
使用ionic打包Android、iOS生产环境时,执行ionic cordova build android --prod 或 ionic cordova build ios --prod。这个命令会压缩main.js和mian.css代码。这时启动APP基本上时间在两秒钟左右,肯定不会超时了。
但是一般在执行这个命令时会出现各种各样的编译问题,最常见的是在webpack打包时合并代码数组越界,这时我们在根目录下找到node_modules\@ionic\app-scripts\config\webpack.config.js。打开找到如下代码,去掉ModuleConcatPlugin这个插件就可以了。
如果还有其他问题,可以留言讨论。