背景:[email protected] (现在ionic@3x稳定版,[email protected] ),到我可能已经转了三四手,从一个写js两个月的前端er手里接下,这酸爽无法用言语表达。
需求:这套app是一两年前开发的,新客户有新需求,要求splash开机画面和icon都要改成他们公司的,所以要不同的包名,不同的签名.......一套代码要上架不同个app......可惜各种交接文件根本没有打包上架配置等内容,一切从头开始,所以记录一下坑。
1.事隔多年,公司没有一台电脑有完全配置(基本只保持了打包的功能),从公司svn上下载的项目居然还能缺少插件。所以相当于重新开个项目。Android Studio签名使用就不细说了,大多数问题是网络不好,文件下载不全而导致的错误,反正我是夜深人静wifi+4G热点流量+爬梯那个啥+试了n次才成功的。各种报错基本都能google到,很多都是自动加载新版本引起的版本冲突问题。
2.查看版本ionic platforms list。重新添加android platform,本来适配的页面结果超出手机的可视界面了。添加的平台版本跟以前一样,代码不变,但是原代码设置缩放比例在重新配置sdk和platform后就不适配手机了,但是没有这段代码(如下),直接用试了几个手机也没有适配问题,所以......以后有空了再去研究viewport吧。
在调试时:android和ios键盘弹起有不同的处理,(),视具体情况控制滚动条滚到底部,修改底部绝对定位尺寸。
varviewport = document.querySelector("meta[name=viewport]");
varwinWidths = window.screen.width;
vardensityDpi = winWidths /400;
if(densityDpi <=1) {
viewport.setAttribute('content', 'width=device-width, user-scalable=no,target-densitydpi=device-dpi,initial-scale=' + densityDpi + ',maximum-scale=' + densityDpi + ',minimum-scale=' + densityDpi);
}else{
viewport.setAttribute('content', 'width=device-width, user-scalable=no,target-densitydpi=device-dpi,initial-scale=' + 1 + ',maximum-scale=' + 1 + ',minimum-scale=' + 1);
}
3.重新添加ios platform,本来statusbar是嵌入app的,结果多出来了,如下图1。原因就是sdk11了
解决办法:cordova plugin add cordova-plugin-disable-ios11-statusbar
4.ios打包
错误:duplicate symbol _OBJC_CLASS_$_CDVLogger
解决方案:https://github.com/ionic-team/ionic/issues/12849
ionic cordova platform remove ios(默认安装的是@4.5.5)
ionic cordova platform add [email protected]
5.更新cordova插件
a、错误:Failed to install 'cordova-plugin-fastrde-mqtt': CordovaError: Version of installed plugin: "[email protected]" does not satisfy dependency plugin requirement "cordova-plugin-network-information@^2.0.1". Try --force to use installed plugin as dependency.
根据提示先删除cordova-plugin-network-information,然后再安装对应版本cordova-plugin-network-information@^2.0.1
一般第一次装cordova-plugin-fastrde-mqtt会默认装相对应的依赖。
b、ionic build android错误: 无法将类 Wechat中的方法 getAppId应用到给定类型;
需要: 没有参数
找到: Activity
原因: 实际参数列表和形式参数列表长度不同
解决方案:将版本从2.3.0降到2.1.0
5. 微信应用是跟包名和签名绑定的,要上新app就要不同的包名,就要申请不同的微信移动应用,申请一次审核周期是7个工作日内。
检查android apk是否签名成功,到apk的目录下运行 jarsigner -certs -verbose -verify xxx.apk
讲下大概流程:
as制作签名文件->as打正式包->安装到android手机上,用微信的签名获取工具:GenSignature获取签名->微信开放平台创建一个移动应用获取AppID->等待审核完毕,然后按照微信开放平台资源中心文档进行开发。
碰到一个很尴尬的问题,ios能用微信的功能,android不能,最后发现是打包用错了签名文件(主要怪as制作签名文件太容易,然后密码记不住o(╥﹏╥)o)。不过一个好处是debug的时候把原代码中关于微信功能的代码捋了一遍。
反正这次把ionic 1x的ios和android从开发到打包上架都重新研究了一遍,各种bug熟悉了一遍(╮(╯▽╰)╭),google大段大段的英文也能看下去了(那什么感觉学了几十年的英语突破有望了),下一步就是前端框架的重构了,产品升级到ionic3x!