ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从OHA到FileProvider:Android开放生态的技术遗产与演进之路

从OHA到FileProvider:Android开放生态的技术遗产与演进之路 2007年11月5日Google牵头成立开放手持设备联盟OHA公开了初代Android系统。如果你现在正用Android Studio改一个Gradle依赖或者在某个content://开头的FileProvider路径里找文件可能很难想象这个让全球开发者又爱又恨的系统已经走过了十几个年头。而在另一个时间坐标上同一天还发生过一件被很多人遗忘的事——诺基亚品牌逐渐退出手机历史取而代之的是Microsoft Lumia。这篇文章不打算写成编年史而是想从这三个事件出发拆解Android为什么能走到今天以及它给普通用户、从业者和整个软件行业留下了哪些至今仍在发挥作用的技术遗产。1. 11月5日移动操作系统历史上被低估的转折点1.1 三件事为什么偏偏挤在同一天把“初代安卓公开发布”“OHA成立”“诺基亚更名为微软Lumia”放在一起看会发现移动操作系统的发展其实有一条非常清晰的暗线开放联盟模式的崛起和封闭品牌模式的落幕。2007年的11月5日OHA的成立和Android的公开基本是同步发生的。Google很清楚光靠一家软件公司做手机系统很难撬动当时由运营商和手机厂商把持的产业链。所以Android从第一天起就不是孤立的开源项目而是一个以联盟为外壳、以开源为手段、以生态为目标的整体方案。当时对外发布的还只是初代Android的企业公开版本真正的Android 1.0正式版要等到2008年9月才随HTC DreamG1一起登场但这一天已经向外界释放了足够强烈的信号Google要正式下场做手机系统了。2014年的11月5日微软在那个时间段正式推动了诺基亚手机品牌的“去Nokia化”。微软在2013年宣布收购诺基亚设备与服务部门72亿美元的交易在2014年4月完成随后几款Lumia机型陆续从Nokia Lumia改名为Microsoft Lumia。放在当下来看这个更名几乎成了诺基亚手机帝国崩塌的象征性节点。三件事挤在同一天让人觉得像某种历史叙事安排好的转折一边是新的开放联盟刚刚起步一边是旧的传统巨头正在退出牌桌。1.2 2007年以前的智能手机市场Android为什么要以这种形式诞生要理解Android为什么选择“联盟开源”的路子得先看2007年之前的手机市场有多封闭。那个年代的主流智能手机系统有三股力量塞班系统Symbian靠诺基亚撑场面Windows Mobile靠微软和一批老牌PDA厂商维持存在Palm系统则在小众商务人群里挣扎。开发者想在这几个平台上做应用体验差别很大。Symbian的C开发门槛高Windows Mobile的界面交互基本还是“拿起触控笔点小图标”的思路Palm更接近极客玩具。更麻烦的是每个手机厂商都会在系统上做大量定制应用在不同机型上的兼容性很不稳定。可以说那个时代的智能手机并没有一个真正面向所有开发者的统一开放平台。Google在2005年收购了Andy Rubin创办的Android公司。有意思的是Android最初并不是为手机设计的团队早期想做的其实是“一个面向数码相机的智能操作系统”。但2007年1月iPhone一发布整个行业的游戏规则变了多点触控、全屏交互、App分发中心这些概念让Google意识到相机系统肯定没前途必须转身做手机系统而且是做一个能跟iPhone正面抗衡的开放平台。为什么需要OHA联盟因为手机产业链太复杂。芯片有高通的有德州仪器的有英特尔的手机有HTC、三星、摩托罗拉运营商有T-Mobile、Orange这些大渠道。如果Google单打独斗就算系统做出来没有厂商愿意量产、没有运营商愿意渠道推广也很难起来。OHA的成立本质上就是Google把一整条产业链上的关键角色都拉进同一艘船芯片厂商负责适配手机厂商负责造机运营商负责铺货Google负责系统和软件生态。这样一来Android就不再只是Google的项目而是几十家公司共同押注的开放标准。后来的结果大家都看到了。这个策略不仅让Android在iPhone的高压之下活了下来还在几年之内反向超越成为全球装机量最大的移动操作系统。而同期那些坚持封闭授权的竞争对手一个接一个被历史淘汰。2. 初代安卓系统1.0时代到底有没有“能用”的资本2.1 安卓1.0的基础组件与核心设计很多新入行的开发者对Android最早的印象就是“四个组件”也就是Activity、Service、BroadcastReceiver和ContentProvider。这四个概念从Android 1.0就定下来了一直延续到今天。我当年第一次接触Android开发时最震撼的不是界面多漂亮而是它的应用模型非常“互联网化”一个应用可以由多个Activity拼起来后台任务可以交给Service跨应用通信靠BroadcastReceiver如果想让其他App读取你的数据只要实现ContentProvider就行。回过头来看这套设计在2007年是非常前卫的。它不像塞班那样要求开发者面对一个完整的大程序而是天然地把App拆成可独立运行的模块后来HTC、三星等厂商能做出各种五花八门的定制ROM跟这套灵活的应用模型有很大关系。初代Android 1.0自带的系统应用也已经比较完整拨号、短信、浏览器、相机、计算器、闹钟、联系人、邮件、地图这些都在。底层是Linux内核应用跑在Dalvik虚拟机上。所谓“初代Android公开发布”现在看来其实还只是个半成品没有复制粘贴、虚拟键盘体验一般、通知系统虽然已经存在但还不支持下拉手势但这些都不能否认一个核心事实——它的应用模型和系统框架从第一版就已经站住了脚。2.2 安卓1.0的“反iPhone”取舍键盘、SD卡、多任务iPhone在2007年改变了用户对手机的交互预期但初代Android在很多设计上其实刻意选了另一条路线。首先初代Android没有走“全触屏”路线。HTC Dream作为第一台安卓手机直接做了侧滑物理键盘。当时很多人觉得这是落后但从商业角度看这个设计很聪明。2007年到2008年很多用户对全触屏虚拟键盘还是有恐惧感物理键盘能降低换机门槛。而且安卓1.0对“实体按键”的支持也考虑得很周到菜单键、返回键、搜索键、主页键这些物理按键让早期Android能在不同厂商之间快速适配。其次Android 1.0就支持了可插MicroSD卡扩展存储。这看起来是个很不起眼的功能但在当时对用户有巨大吸引力。那个年代旗舰机内存普遍只有256MB到512MB能靠一张存储卡扩展容量对很多实用主义者来说是iPhone做不到的。再一个就是多任务。初代Android已经有了真正的后台任务能力应用切到后台还能继续跑通知栏里能看到各种消息。这一点直到今天仍然是Android和iOS在系统哲学上最大的差异之一。这些“反iPhone”取舍也埋下了隐患。开放的多任务导致后台应用频繁唤醒耗电和卡顿成了早期Android被诟病最多的问题可插SD卡又带来大量文件碎片给后来的存储权限治理挖了坑物理键盘让系统UI复杂度上升等厂商取消键盘后很多适配逻辑又得推翻重来。2.3 从安卓1.0到如今的演进脉络Android 1.0之后系统版本演进速度非常快。我用一张表简单整理一下主线方便大家理解今天各种新特性是从哪来的版本年份里程碑意义1.02008随HTC Dream商用发布确立四组件模型2.2/2.32010引入JIT、优化API系统流畅性首次达到可用级别4.02011Holo风格统一平板与手机交互界面进入现代阶段4.42013ART运行时可选性能与内存管理大改5.0/6.02014/2015Material Design诞生运行时权限体系落地7.0/8.02016/2017分屏、通知渠道、Project Treble9.0/102018/2019黑暗模式、手势操作、存储权限升级11/122020/2021文件隐私保护强制化Material You动态主题13/14/152022以后大屏适配、隐私沙箱、模块化系统组件持续增强这个演进脉络能解释很多热词里看起来零零散散的问题。比如“android 12 aosp新增功能”之所以成为高频搜索词是因为Android 12那一代改动特别大不仅在系统UI上引入了Material You还强化了大屏设备适配能力。再比如“android 4.4.4能升级吗”这类问题本质上就是版本碎片化的历史遗留。应该说Android这十几年的演进其实都是在不断修补1.0时代那些开放设计带来的“自由后遗症”。3. 开放手持设备联盟OHAAndroid的“众筹机制”3.1 OHA成立的商业逻辑为什么谷歌需要30多家公司OHA的官方角色是一个由多家企业组成的商业联盟目标是推进移动设备的开放式标准。Android是OHA成立后推出的第一个、也是最重要的项目。有人可能会想Google自己手握搜索、地图、云计算为什么不能直接做一个操作系统然后闭源授权这里面有个很现实的商业逻辑手机不是电脑用户买手机很大程度上是选硬件品牌不是选软件系统。如果Google自己做系统、自己造手机、自己找运营商那它就会变成所有手机厂商的竞争对手没有一个厂商会愿意用这样的系统。联盟模式解决的就是这个“军心问题”。OHA成立时拉进了几十家覆盖产业链不同环节的公司包括手机厂商HTC、LG、三星、摩托罗拉芯片厂商高通、英伟达、德州仪器、英特尔运营商T-Mobile以及博通、Marvell这些通信半导体公司。每家公司都在Android生态里找到了各自的利益点芯片厂商希望处理器有更多出货渠道手机厂商希望摆脱对单一系统的依赖运营商则需要一个能跟iPhone竞争、愿意配合定制业务的开放平台。Google要的则是话语权和生态规模安卓系统本身不是主要收入来源真正能带来长期收益的是搜索、应用商店和云服务。这种“众筹机制”虽然管理松散但在抢占市场初期效率极高。3.2 OHA成员名单与产业博弈彼时和今日的格局变化OHA创始成员名单里有些名字放在今天看已经像化石了摩托罗拉、HTC、LG、索尼爱立信、德州仪器、Marvell。它们在2007年还都处在智能手机第一线但后来有的被收购有的淡出市场有的彻底转向其他领域。摩托罗拉是当年OHA里最积极的手机厂商之一第一代真正走量的安卓手机Droid系列就出自它手后来被Google收购、又被卖给联想。HTC是早期安卓阵营最大的受益者G1、Nexus One都是HTC代工但HTC过度依赖高端代工没有在供应链和渠道上形成规模优势最终在手机市场逐步沉寂。LG曾经凭借Nexus 4、Nexus 5积累了不错的口碑但后来也没能撑住。半导体领域的德州仪器、Marvell在移动SoC上早早出局最终市场基本被高通和部分自研芯片厂商瓜分。这些变化说明一个问题OHA作为一个联盟并没有能力保证成员永远成功。它真正做到的是让Android这个系统在诞生初期获得了一个足够庞大的硬件实验场。谁的方案落地快谁就能吃到红利谁的脚步慢了换来的就是被市场淘汰。开放联盟最大的优点是不把鸡蛋放在一个篮子里最大的弱点则是联盟内部永远存在博弈。三星后来曾经花大力气推广Tizen系统诺基亚在拥抱Windows Phone之后也彻底退出了OHA。类似的博弈从来没有停止过。3.3 OHA对安卓生态的长远影响从开源到碎片化的双刃剑OHA给Android带来的核心遗产是“开源免费”的授权模式。Android底层采用Apache许可证厂商可以免费使用、修改甚至可以闭源。这个策略让Android在最短时间内占领了大量国际市场的低端机和高端机的每个价位段但也直接造成了后来臭名昭著的碎片化。碎片化体现在两个层面。第一个是系统版本碎片化Android 5.0都发布了我还在帮朋友处理Android 4.4.4的兼容问题第二个是厂商ROM碎片化同样是Android小米、三星、华为、OPPO、vivo的系统外观和交互逻辑完全不同。对普通用户来说碎片化让人搞不清楚自己到底用的什么系统对开发者来说碎片化意味着要在真机矩阵上反复测试。我记得早年做安卓项目时办公室里总会放一堆不同品牌的千元机每台手机装同一个APK看哪个会在启动时崩溃。为了解决碎片化Google后来推出了CTS兼容性测试、Project Treble、APEX模块化组件等一堆机制。严格来说这些都是在给OHA当初定下的开放策略“擦屁股”。如果没有OHA和开源Android可能不会碎片化得这么厉害但也可能走不到现在的规模。这是一枚硬币的两面今天再复盘只能说这个代价换来的收益是值得的。4. 同一片历史现场诺基亚更名微软Lumia与Android的宿命对决4.1 诺基亚Lumia的“微软化”更名背后的商业细节2013年9月微软宣布将以72亿美元收购诺基亚设备与服务部门包括大量手机专利和Lumia品牌使用权。2014年4月交易完成后微软开始对诺基亚手机业务进行整合随后在2014年10月到11月之间首次在公开产品线中把“Nokia Lumia”改成“Microsoft Lumia”。第一款以“Microsoft Lumia”品牌面世的产品是Lumia 535发布于2014年11月。它是一款定位低端的手机用5英寸屏幕、骁龙200处理器、1GB内存配置放到当时只能算入门却承载了微软彻底“去Nokia化”的信号。之所以选这款机器打头阵是因为微软想要尽快摆脱诺基亚品牌在消费者心中“跟不上时代”的印象同时把Windows Phone硬件完全纳入自家掌控。这次更名本身没有太多技术含量但商业含义极深。诺基亚作为老牌功能机巨头品牌价值曾经高到连纸浆、轮胎企业都想沾光。微软花大价钱收购不是为了保留这个品牌而是想彻底消化它的硬件研发能力。更名之后诺基亚作为手机品牌的一线时代正式终结那些Lumia 920、Lumia 1020曾经的拍照神机都变成了极客群体手里的收藏品。站在11月5日这个时间节点回看这一天可以被看作是“诺基亚手机品牌开始退场”的标志性起点。4.2 Windows Phone为何输给Android决策链、生态、开发环境Windows Phone输给Android很多人会简单归因为“应用太少”但真正的原因比这复杂得多。第一Windows Phone起步并不算太晚。2010年上市时它的Metro磁贴界面非常有辨识度系统流畅性也不差。但微软的决策链太长从Windows Phone 7到Windows Phone 8底层内核换了应用还不能完全兼容再到Windows 10 Mobile又试图把手机、平板、PC统一成一套UWP生态。每次转型都把开发者往新的开发模型上赶API一变再变很多小团队根本没有精力跟进。第二应用生态的“冷启动”没有解决。开发者给Android写AppGoogle提供统一的SDK下载、模拟器、兼容性测试工具用户基础从一开始就不断增长。而Windows Phone的应用商店不仅审核流程不透明开发工具也总是处于“即将完善”的状态给开发者一种随时会被抛弃的感觉。没有应用用户就不买没有用户开发者更不愿意投入。这个恶性循环最终把Windows Phone的份额压到了个位数。第三微软在硬件上的投入策略摇摆不定。诺基亚时代做的Lumia手机其实有不少硬件亮点比如卡尔蔡司镜头、无线充电、超灵敏触控但定价和渠道一直没能打出来。更名成Microsoft Lumia之后微软也未能扭转颓势Lumia产品线在2015年之后基本停滞2017年官方彻底放弃手机业务。反观Android阵营哪怕是一个小厂商只要跟着开放生态走都有机会用性价比打开市场。这场宿命对决早在系统和分发模式上就已经注定了结局。4.3 开发者视角从920到950再到现在跨平台开发的启示我自己当年也短暂接触过Windows Phone开发。说实话Metro UI的很多设计放到今天依然不过时XAML布局做出来的界面也很统一比早期Android的“各家ROM风格混战”要好看得多。但作为开发者真正决定是否投入一个技术栈的不是界面好不好看而是能不能持续赚钱、能不能从平台上获取用户。这也是现在做跨平台开发时很值得复盘的一段历史。Flutter、React Native能在今天流行不只是因为它们写一套代码能跑多端更重要的是Android和iOS的市场地位已经稳固开发者可以放心在上面做长期投入。如果非要押注一个正在没落的平台再先进的跨平台框架也救不了项目。从Lumia时代得到的启发是技术人容易迷信“技术优势”觉得只要系统设计得好用户就一定会来。但一个操作系统的胜负手往往藏在开发者的迁移成本、应用分发的开放性、厂商利益分配这些“脏活累活”里。Windows Phone的设计比早期Android精致但它输在了生态和决策上。技术实力很重要但生态治理能力更重要。5. 那段历史留下的技术“遗产”今天的安卓开发者还在继承什么5.1 从ADB到Android Studio官方工具链的演进记录早期做Android开发工具链远没有今天这么友好。Android 1.0时代Google给出的是一个叫ADT的Eclipse插件外加一个命令行工具集里面最常用的就是ADBAndroid Debug Bridge。我第一次接触ADB时还在用USB线连一个HTC手机敲adb install来装包稍有问题就要抓logcat看日志。后来Google在2013年正式推出Android Studio基于IntelliJ IDEA把Gradle作为默认构建系统。从那时起Android开发才从“能写”进入了“好用”的阶段。现在大家搜“android studio下载”“android studio安装教程”“android studio汉化”这类关键词本质都是在问同一个问题到底怎么把这套复杂的工具链跑起来。这里分享几个现代开发环境的关键点。首先SDK Manager里不止有Android SDK Platform还有SDK Command-line Tools和Platform Tools后者是ADB和fastboot的安装来源模拟器Emulator性能和Android SDK Build Tools也息息相关。其次Android Studio从2021年之后默认自带JetBrains RuntimeJava环境不再需要手动配到系统里但对老项目来说JDK版本仍然可能跟Gradle版本冲突。如果遇到这类问题优先去看Gradle JDK设置而不是怀疑代码逻辑。再一个是无线调试。Android 11之后官方支持了无线调试Wireless Debugging功能可以在“开发者选项-无线调试”里直接配对用adb pair命令和adb connect ip:port就能连接。只要开发机跟手机在同一局域网内就不再需要到处找数据线了。vivo手机配合无线调试使用时通常要在开发者选项里打开“USB调试”和“无线调试”两个开关配对码会显示在手机上。这个方法实测下来非常稳定强烈建议所有安卓开发者都配好。早期工具链的演进可以总结成这张表环节早期方案现代方案开发IDEEclipse ADTAndroid Studio构建系统Ant / MavenGradle AGP设备连接ADB通过USBADB /无线调试 /模拟器模拟器轻量AVD性能一般Emulator支持快照、硬件加速依赖管理手动jar包Maven Central / Google Maven5.2 Framework、AOSP与APEX开源世界的版本管理Android的历史遗产里最容易被忽略的是它背后那套开源系统的治理方式。AOSPAndroid Open Source Project是Android的官方开源项目系统源码一直公开开发者可以自己编译、移植、定制这也是国内很多“定制ROM”和魔改系统的源头。但普通App开发更多接触的是Android Framework层也就是你在代码里调用的Activity、Service、View这些API的底层实现。Framework层和AOSP之间的关系可以理解成小区物业和整个楼盘的关系。AOSP是整个小区的地基和公共设施Framework是电梯和楼道而App就像每个住户自己装修的屋子。住户一般不会自己改造电梯但电梯出了问题所有人都要受影响。这也是为什么“android framework”一直是热门搜索词——很多日常开发里遇到的卡顿、ANR、启动闪退追根溯源都要回到Framework层去看。开源社区的氛围让AOSP迭代很快但版本碎片化也随之而来。为此Google在Android 10之后引入了APEXAndroid PACKage EXtension机制。APEX说白了就是能把系统组件打包成独立模块在不刷机的情况下随安全补丁一起更新类似Linux里的Snap包。这个设计解决了一个历史难题以前系统组件跟着ROM走厂商不升级系统用户就永远用不到修复现在核心组件可以单独升级了。热词里的“android apex”已经有一部分人开始研究它背后的原理未来系统更新会越来越少依赖厂商ROM这是对历史碎片化的正面回应。另外开发者在考古老资料时经常会遇到“android abe”这个关键词它其实是Android Backup Extractor的缩写用来分析安卓备份文件*.ab。这类工具虽然小众但在数据迁移和离职交接时偶尔能派上用场。遇到这类问题我一般建议先在命令行里跑一遍java -jar abe.jar unpack backup.ab backup.tar看看备份里到底装了什么再决定下一步怎么处理。5.3 存储安全与FileProvider安卓文件系统的历史包袱安卓早期最受用户喜欢的一点是文件系统完全开放插一张SD卡所有应用都能往里写文件。但这个“自由”后来变成了隐私和安全的噩梦。一些恶意App会扫描SD卡里其他应用的私有文件用户卸载App后残留大量垃圾目录数据备份也经常出现权限纠缠。Google从Android 6开始引入运行时权限到Android 10强制推行Scoped Storage再到Android 11把外部存储访问进一步收紧整个过程就是一段跟历史包袱作战的历史。这个背景下FileProvider出现了。Android官方在Support Library 24之后要求应用之间分享文件时必须使用content://URI不能再用file://。如果你在错误日志或调试过程里看到类似content://com.tencent.wework.fileprovider/external_path/android/data/com...这样一串长路径不用慌它只是某个App在file_paths.xml里配置了external-path授权路径然后通过FileProvider暴露给其他应用读取而已。在开发中给App配置FileProvider其实很简单。第一步在AndroidManifest.xml里注册一个FileProviderprovider android:nameandroidx.core.content.FileProvider android:authorities${applicationId}.fileprovider android:exportedfalse android:grantUriPermissionstrue meta-data android:nameandroid.support.FILE_PROVIDER_PATHS android:resourcexml/file_paths / /provider第二步在res/xml/file_paths.xml里配置你想要暴露的目录paths external-path nameexternal_storage path. / cache-path namecache path/ / files-path nameinternal_files path/ / /paths然后在代码里用FileProvider.getUriForFile生成URI再配上Intent和FLAG_GRANT_READ_URI_PERMISSION就能安全地把文件分享给其他应用。虽然配置过程多了几步但这是Android存储安全体系的一部分。了解这层机制之后再看网上那些“为什么content://路径找不到文件”的报错就明白多半是路径配置覆盖范围设置得过大或过小的问题。5.4 打磨细节蓝牙、进度条、动态图标那些年踩过的坑Android的界面和系统能力一直有个特点官方API提供基础能力但真正要做出好手感还得靠开发者自己打磨。以蓝牙开发为例传统蓝牙的开发要经历打开蓝牙、发现设备、配对、创建Socket、建立数据通道这一整个流程每一步都有兼容性问题。BLE低功耗蓝牙普及之后权限模型又变复杂起来Android 12还专门增加了BLUETOOTH_SCAN、BLUETOOTH_CONNECT这些运行时权限旧代码在Android 12以上经常出现一打开扫描就崩溃的问题。我现在做蓝牙相关需求时都会先把targetSdkVersion调高再看权限是否完整尤其不要把位置权限漏掉很多扫描不到设备的问题本质是位置权限没申请。UI层面的热词也很有意思。“android进度条”看着简单但定制时经常遇到样式不生效的问题ProgressBar只是系统控件不同版本的默认样式差异很大建议要么直接用MaterialProgressBar要么用自定义Drawable重画。遇到“协调布局banner”这类需求时推荐直接上CoordinatorLayout配合AppBarLayout、CollapsingToolbarLayout它能在滚动折叠、悬停操作上提供一套标准方案缺点是坑很多尤其是不同厂商ROM的WebView和RecyclerView联动滚动实测下来一定要反复做真机适配。“viewpager叠卡片”也是经典场景用RecyclerView的PagerSnapHelper加CardView就能实现类似卡片层叠的轮播效果比自己去写手势要稳得多。“android动态图标主题”在Android 12之后主要是动态壁纸和主题图标Google的Material You会根据壁纸颜色生成一套主题色这本身是系统级能力但第三方App如果没有适配monochrome图标在主题化桌面上就会显得很突兀。还有一个容易被忽略的细节是音频并发策略。Android早期对不同应用同时录制的限制非常严格直到Android 9才正式支持多个应用同时录音热词里那个“android audio - 支持多应用同时录音_android9.0修改方法”就是指向这个特性。新版系统里开发者可以通过AudioMixAttributes配置MixPolicy让一个应用持续录音的同时另一个应用也能启用麦克风这在视频会议、直播导播等场景里非常实用。6. 给后来者的复盘如果回到2007年Android做对了什么6.1 三个关键决策复盘如果把Android的成功拆成几个关键决策我认为最有价值的三个是第一选择联盟模式第二选择开源第三从第一天就认真对待开发者体验。联盟模式让Android不用自己造手机就能获得全行业的硬件支持。开源让厂商可以随便定制用户基数迅速扩大的同时也把生态的分发权牢牢握在Google手里。开发者体验则体现在SDK、模拟器、API文档、示例代码这些细枝末节里。2007年Google公开Android开发包时不仅提供了Java语言绑定还有一套模拟器普通人在没有真机的情况下也能写App。这一点在当年的对手里几乎没有谁能做到同等程度。对比诺基亚和微软的路线你会发现它们其实也有很好的技术资源但决策链太长始终没有把“第三方开发者”这个环节放到最高优先级。Android赢的并不是某一次产品发布而是赢在早早把整条产业链和整个开发者社区都变成了自己的“合作方”。6.2 现在的移动端开发还可以从这段历史学到什么复盘历史不是为了怀旧而是为了在今天的技术选型里少踩坑。我现在的习惯是每接触一个新的开发框架、跨平台方案或者云端产品都会先问三个问题谁来维护它它的生态里有多少真实用户如果维护方明天改变策略我手里的项目会不会立刻陷入被动这三个问题很多都来自Android和Windows Phone这段“宿命对决”给的教训。对于正在学习Android开发的人我想说不用被大量热词吓退。“android studio怎么设置中文”、 “移植android studio项目”、“centos android studio”这些话题在网上一搜一大把但它们背后没有秘密只是版本、路径、环境变量这些基础工程问题。学会看官方文档、学会在命令行下面排错、学会读懂logcat日志比背一百个快捷键有用得多。我自己做Android开发这些年最深的体会是一个平台的形态往往是它历史上那些策略决策的投影。Android能走到今天靠的不是哪一个天才设计而是OHA成立那天就已经定下的开放基调。如果你现在正被某个content://路径搞到头大或者被Gradle版本折磨得想摔键盘不妨想想这些“折磨”的根源——它们都是当年选择开放、选择联盟、选择快速前进所付的代价。历史不是用来背的而是用来帮自己少走弯路的。
返回列表