Android程序员的救赎之路(二)

上回说到要举一个例子来说明,在看例子前,我们先来说说问题,有时我们会在工作中遇到很难的专业问题,如设计一个业务算法或用OpenGL做3D特效,这类的问题虽然不简单,但属于比较单一的类型。即使出现问题,你也能比较容易集中在特定的领域里去解决它,解决或学习它们的过程中你可能并不需要做太多的选择。

但现实往往会给你一些不一样的问题,总是给你一种不知所措的感觉,有时觉得是自己领域的问题,迷糊中又觉得不是。如我遇到的一个“Access-Control-Allow-Origin”异常问题。

跨域和跨界

我们的APK使用了Cordova框架,在这个框架中加载本地的Html/JS文件,是一个单页Web应用,Web视图上的数据是通过JS发送Http请求从一个提供Rest服务的Tomcat获取。

关于跨域问题可以看到这篇文章:跨域资源共享 CORS 详解

问题描叙:

  1. 在很多手机都是正常的(Android SDK从4.4到7.1),只在某个型号的锤子手机上出现;
  2. 在出现问题的锤子手机(SM901, SDK 6.0.1, API23)上做测试,发现同是生产版的apk,但Release版和Debug的效果不一样,Release版本会有这个问题,而Debug版本正常。

在问题手机上的截图:


从上面的两点看,你可能会很容易想到是Android的兼容性问题,毕竟这是她的前科不少。

针对第2点,Android Studio默认会为项目构建一个Debug和一个Release版本的应用,这两个版本的不同主要体现在在非开发机上的调试功能以及APK的签名方式,如debuggable属性,在Debug上是true,在其他版本是false。

而且我试过只要把Release的debugable=true,不会出现“Access-Control-Allow-Origin”。

网上也有一些别人试过的做法,如设置"setAllowUniversalAccessFromFileURLs",不过对这个手机还是无效。

新发现

并不是所有的锤子手机都会出现这个问题,我有一台相同型号的手机就没这个问题。但有一次进入“开发这模式”,把“严格模式”打开,在这台手机上重现了这个问题。

不过又引入了新的问题:就算之后我把“严格模式”关闭,在Release版上这个问题仍然出现,关机重启还是能重现。也就是说只要我打开过一次就一直重现,卸载重装还是一样。

逻辑上不能完全说是严格模式引起的,因为严格模式关了还有这个问题(当然,也有可能是厂商的严格模式关闭有BUG)。

再测试发现,把Webview中访问的Url换成其他的(如https://github.com)并不会报Access-Control-Allow-Origin的错误,那么问题是服务端了?

技术的本质

了解了一下,这个项目的前后端构建,大体涉及的技术节点如下:

我们不妨问一下我们自己,这个是Android端的问题、前端的问题,还是后端的问题?

如果是移动端,我们可能就局限在兼容性的问题上了,可能需在Android更深入的知识或者咨询锤子手机的专家。如果在前端或者后端,可能也需要他们对移动端也有部分了解。

这只是一个具体的案例,这个问题你可以按手机的兼容性去解决,也可以从前端、Nginx和Java后端去寻求其他的解决方案。

而我们可能也有所察觉,新技术都是建立在多个已有技术的组合之上的。技术并不是凭空产生的,而且通过不同的组合衍生的。这个案例虽然看似不复杂,但却涉及前后端来配合查找方案,势必就会涉及多个技术栈。

取舍

这个问题最终怎么解决呢?

其实,我没有解决,取舍如下(理解成借口也成立):

  1. 我可以通过非技术手段绕过这个问题;
  2. 我有更有价值的事情要去完成;

不过我还是很感兴趣花时间去看一下跨域和Nginx方面的一些知识。

我们解决问题不一定非要局限于自己熟悉的领域,我们可以尝试各种正常和“不正常”的方式,但需要从几个方面进行取舍:

  • 这真的是问题吗?
  • 解决这个问题的成本高吗?
  • 解决这个问题的对自己和公司有多大的价值?
  • 除了技术的解决方案,没有其他的选择吗?

很多时候追问第一个问题会发现,你遇到的很多问题都不需要解决,或者可以用非技术方案解决。还有很多问题因为你有更合适的技术栈,或者可以咨询或得到这方面的帮助,能让你用更优雅简洁的方案解决。

这也是我慢慢在转变的方向,单一的技术慢慢变成爱好。真正要做好事情,还需要我们给自更加拥抱变化和未知的机会。技术重要,但有更多的技术组合能让你产生更大的价值。

并在这个过程感受到了新的东西,发现一些秘密:

我们一直以为自己在解决技术问题,其实我们面临的是沟通问题。

关于沟通下一篇还是用技术实例做“药引”,敬请期待。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容