美文网首页
同一套代码上架不同app之踩坑

同一套代码上架不同app之踩坑

作者: 风去来兮_b7fe | 来源:发表于2018-11-27 15:32 被阅读0次

    背景:ionic@1.7.16 (现在ionic@3x稳定版,ionic@4.0.0-beta.16 😭),到我可能已经转了三四手,从一个写js两个月的前端er手里接下,这酸爽无法用言语表达。

    需求:这套app是一两年前开发的,新客户有新需求,要求splash开机画面和icon都要改成他们公司的,所以要不同的包名,不同的签名.......一套代码要上架不同个app......可惜各种交接文件根本没有打包上架配置等内容,一切从头开始,所以记录一下坑。

    1.事隔多年,公司没有一台电脑有完全配置(基本只保持了打包的功能),从公司svn上下载的项目居然还能缺少插件。所以相当于重新开个项目。Android Studio签名使用就不细说了,大多数问题是网络不好,文件下载不全而导致的错误,反正我是夜深人静wifi+4G热点流量+爬梯那个啥+试了n次才成功的。各种报错基本都能google到,很多都是自动加载新版本引起的版本冲突问题。

    2.查看版本ionic platforms list。重新添加android platform,本来适配的页面结果超出手机的可视界面了。添加的平台版本跟以前一样,代码不变,但是原代码设置缩放比例在重新配置sdk和platform后就不适配手机了,但是没有这段代码(如下),直接用<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">试了几个手机也没有适配问题,所以......以后有空了再去研究viewport吧。

    在调试时:android和ios键盘弹起有不同的处理,(<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">),视具体情况控制滚动条滚到底部,修改底部绝对定位尺寸。

    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 ios@4.4.0

    5.更新cordova插件 

    a、错误:Failed to install 'cordova-plugin-fastrde-mqtt': CordovaError: Version of installed plugin: "cordova-plugin-network-information@1.3.1" 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!

    相关文章

      网友评论

          本文标题:同一套代码上架不同app之踩坑

          本文链接:https://www.haomeiwen.com/subject/siztqqtx.html