【精】 学历史有什么用

之前在朋友圈发我学中亚地区历史的时候,碰到朋友问的最多的问题就是这个了:学历史有什么用。
凡是在朋友圈问我这个问题的,我基本上都是一句话:互联网没有增量了,多学点历史没坏处的。因为手机上解释的多了,我打字累,再加上别人也不一定愿意听,可能纯粹就是随便问一句。

使用 Ngrok 实现内网穿透

最近在做 Server 开发,需要将一个内网的服务暴露出去,使其在家也能访问到。

Kotlin 1.3 发布,协程正式版发布啦

从 Kotlin 1.3 开始,协程将进入稳定状态。此后不再会被标注为`experimental`,官方也会提供相应的工具帮助开发者完成迁移工作。
Ktor,这个库的 API 已经完善,期待大家的使用体验和反馈。Ktor 是一个基于协程的框架,使用它我们可以优雅的构建 Web 应用、Http 服务、移动应用和网页。

重新理解创业:失败并不可怕

在一个新点子冒出来的时候,我们首先要甄别这个是什么级别的思考。如果只是把事情从 9 分变成 9.5 分,这就是花很大力气去做小数点后面的事,没有太大的用处。可是,现在大多数公司都在努力做小数点以后的事。

Android 将 module 导出为 jar 最新版

今天碰上公司 Nexus 网络服务挂了,结果 aar 没办法 upload 。而偏偏遇上工程遗留问题,不支持 aar 直接依赖,只能想办法导出 jar 包依赖。所幸,操作还比较简单,但是这种方法只适合于每月资源引用的代码,而且还不支持传递依赖。

Android Studio 3.2 更新重点

版本帝最近更新的频率变低了,自从 2018 年 Google I/O 大会 Android Studio 宣布更新后,Google 精炼和完善了 20 多项新功能,并集中力量提升 Android Studio 3.2 稳定版的质量。

Android 十年,还有哪些可以做的

这篇文章是我在【2018安卓巴士开发者大会】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语。 独家发布在小专栏平台,希望能给我专栏订阅读者里买不到票参加大会的朋友带来帮助。

IPv6 地址格式

IPv6 地址大小为 128 位。首选 IPv6 地址表示法为 x:x:x:x:x:x:x:x,其中每个 x 是地址的 8 个 16 位部分的十六进制值。IPv6 地址范围从 0000:0000:0000:0000:0000:0000:0000:0000 至 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff。

addOnDrawListener 方法的兼容性问题

当一个视图树绘制时调用`OnDrawListener`的`onDraw()`函数。但是这个方法在 `Android8.0` 之前有个坑:`View` 在 `attach` 到 `window` 之前调用 `getViewTreeObserver().addOnDrawListener()` 将不会进入回调。因为`ViewTreeObserver`的`merge()`方法中没有处理`OnDrawListener`详见源码

如何成为优秀的技术主管?你要做到这三点

「技术主管」是开发团队中的某位程序员需要对一起创建系统的整个开发团队负责时所承担的角色。通常他既要对最终交付的软件系统负责,另外也会像一个程序员一样去开发实现系统。
一个技术主管的 60% ~ 70% 的时间可能花在了开发任务分解分配、开发实践、技术架构评审、代码审核和风险识别上,而余下的 30% ~ 40% 的时间则花在为了保障系统按时交付所需的各种计划、协作、沟通、管理上。和团队管理者不同的是,技术主管的大部分管理工作都是针对具体研发任务和技术事务的。

Android P 加载 dex 失败

`dex2oat`是 `ART` 虚拟机必备的一个组件,主要用来把安装的 `apk` 和动态加载的 `dex` 等文件转换成 `oat` 文件.主要是由于从一开始, `dex2oat` 就被设计为系统内部使用的编译部署工具.所以在高版本上生成格式发生了变化.所以再去用 `BaseDexClassLoader`或者是`DexClassLoader`、`PathClassLoader`等加载的时候就会出错.

Android 正则判断手机号(包含网络运营商)

Android 正则判断手机号, 2018年最新, 包含网络运营商

Mac上更新Ruby环境

想要升级Mac上自带的Ruby环境,需要使用到RVM。

Android 获取 IP 地址

开发中经常会需要判断当前是否连接网络, WiFi 或 移动数据连接判断的需求。

AndroidStudio更换xml默认的布局

自从 AndroidStudio 到 2.3 了以后,新建一个 Activity,默认的布局就从以前的 `LinearLayout` 变成了 Google 强推的 `ConstraintLayout`,但其实这个布局是可以被修改的。

Android Native Crash 收集

在 Android 平台上,Native Crash 一直是比较麻烦的问题,因为捕获麻烦,获取到了内容又不全,内容全了信息又不对,信息对了又不好处理。比 Java Crash 不知道麻烦多少倍。本篇核心讲解了自己实现一个 Android Native Crash 收集的方案步骤,重点问题的解决办法。

Android 通过 APT 解耦模块依赖

Android APT 的新玩法,生成类的特殊加载方式。在 Android 多 module 工程中使用 APT,会出现类冲突问题,如果你也碰上这种问题,希望本文对你有所帮助。

套路博弈背后的代码

每个人都会沉迷在自己的戏里,就看什么时候观众会看不下去而叫醒你。——《说故事的人》

Android 模块化平台设计-讲稿

这篇文章是我在 2018【携程技术沙龙移动技术专场】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语。 希望能给买不到票参加大会的朋友带来帮助。
演讲文稿版内容更精细,没有分享时语言的赘述和过多的废话,而且包含了很多分享时没有讲的内容,包含PPT下载。(如下载链接过期可加我微信)

《Android模块化平台的设计》PPT

目前国内对Android领域的探索已经越来越深,应用规模也越来越大,为了降低大型项目的复杂性和耦合度,同时也为了适应模块重用、多团队并行开发测试等等需求,模块化在 Android平台上变得势在必行。
本次分享将为大家介绍如何将完整项目模块化,改造后如何更快速的与使团队适应开发节奏;怎样优雅的移除模块间耦合,可以在不改动代码的情况下做到模块的动态增删;以及模块的开发、构建、更新、提测、发布流程化建议。

掌控 Android Gradle

目前国内对Android领域的探索已经越来越深,不少技术领域如插件化、热修复、构建系统等都对Gradle有迫切的需求,不懂Gradle将无法完成上述事情。所以Gradle必须要学习。

企业级 Android 模块化平台建设

这篇文章是应对各个公司所谓的:架构组,基础组,移动横向组,这样的部门在开发与日常工作时提升效率的一些建议(这些问题都是在我本人曾经的工作中遇到的),同时也适用于模块化开发的场景。

Kotlin Primer·第七章·协程库(上篇)

本篇只讲了协程库的使用。还有中篇讲协程的启动和切换实现原理,下篇核心讲解kotlin协程在JVM层的实现原理。
这可能是至今为止最详细实用的 Kotlin 协程库详解了。

优雅移除模块间耦合-讲稿

这篇文章是我在 2017 北京【droidcon 大会】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语。
独家发布在【小专栏】,希望能给买不到票参加大会的朋友带来帮助。

Kotlin Primer·第七章·协程库(中篇)

忙了三四个月的组件化,终于又有时间写 Kotlin 了。
这可能是至今为止最详细实用的 Kotlin 协程库详解了。