工匠若水
码龄12年
  • 2,546,657
    被访问
  • 139
    原创
  • 1,301,127
    排名
  • 7,825
    粉丝
关注
提问 私信
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2010-10-18
博客简介:

工匠若水

博客描述:
日拱一卒,功不唐捐。
查看详细资料
  • 4
    领奖
    总分 631 当月 6
个人成就
  • 移动开发领域优质创作者
  • 博客专家认证
  • 获得2,143次点赞
  • 内容获得1,613次评论
  • 获得2,049次收藏
  • GitHub 获得2,796Stars
创作历程
  • 10篇
    2021年
  • 22篇
    2020年
  • 8篇
    2017年
  • 12篇
    2016年
  • 68篇
    2015年
  • 1篇
    2014年
  • 18篇
    2013年
  • 10篇
    2012年
成就勋章
TA的专栏
  • Flutter
    9篇
  • Kotlin 编程
    6篇
  • 面向对象设计模式
    26篇
  • Android应用开发
    19篇
  • Android应用框架浅析
    17篇
  • Android开源代码学习
    9篇
  • android NDK开发
    5篇
  • Android系统源码浅析
    1篇
  • react-native/web周边
    5篇
  • OO设计模式
    26篇
  • 服务器接口开发
  • 数据库
    3篇
  • Python3
    5篇
  • Unix C及C高阶编程
    13篇
  • Java编程
    6篇
  • 开发设计思想
    3篇
  • 开发工具
    10篇
  • 嵌入式开发
    6篇
  • 硬件电路
    1篇
  • 脚本相关
    15篇
兴趣领域 设置
  • 数据结构与算法
    数据结构
  • 移动开发
    kotlinflutterandroid studio
  • Android
    gradleandroid jetpackrxjava
  • 软件工程
    性能优化
  • 职场和发展
    面试
  • 最近
  • 文章
  • 视频
  • 课程
  • 关注/订阅/互动
搜TA的内容
搜索 取消

Flutter 安卓 Platform 与 Dart 端消息通信方式 Channel 源码解析

背景本系列前面已经分析了 Flutter 的很多知识,这一篇我们来看下 Flutter 平台通信相关原理。Flutter 官方提供三种 Platform 与 Dart 端消息通信方式,他们分别是 MethodChannel、BasicMessageChannel、EventChannel,本文会继续延续前面系列对他们进行一个深度解析,源码依赖 Flutter 2.2.3 版本,Platform 选取熟悉的 Android 平台实现。对于 MethodChannel、BasicMessageChannel
原创
发布博客 2021.08.22 ·
5851 阅读 ·
6 点赞 ·
5 评论

Flutter 绘制动机 VSYNC 流程源码全方位分析

前面系列我们依赖 Android 平台实现分析了端侧很多机制,但是有一个知识点一直比较迷糊,那就是 Flutter 是怎么被触发绘制的?这个问题在网上的答案基本都说 VSYNC,但是少有人说这个 VSYNC 是怎么被关联起来的,本文就针对这个问题进行一个 Platform 到 Engine 到 Dart Framework 分析,源码依赖 Flutter 2.2.3。
原创
发布博客 2021.08.18 ·
5617 阅读 ·
5 点赞 ·
0 评论

Flutter Android 端 FlutterView 相关流程源码分析

背景前面文章我们分析了 flutter 在 android 端编译命令相关流程,也分析了 Flutter App dart 代码入口开始到三棵核心树诞生流程,按照源码顺序,我们接下来需要先分析一下 Flutter Android 端 framework 平台实现代码(非 native engine 引擎部分),下面以一个纯 Flutter App 为例展开分析。工程结构及 API 变更对于一个纯 flutter app 来说,当我们在 yaml 依赖中添加两个 flutter plugin 依赖,然后
原创
发布博客 2021.08.15 ·
5464 阅读 ·
3 点赞 ·
6 评论

Flutter Android 端 FlutterEngine Java 相关流程源码分析

背景前面文章我们分析了 flutter 在 android 端编译命令相关流程,也分析了 Flutter App dart 代码入口开始到三棵核心树诞生流程,按照源码顺序,我们接下来需要先分析一下 Flutter Android 端 framework 平台实现代码(非 native engine 引擎部分),下面以一个纯 Flutter App 为例展开分析。工程结构及 API 变更对于一个纯 flutter app 来说,当我们在 yaml 依赖中添加两个 flutter plugin 依赖,然后
原创
发布博客 2021.08.10 ·
4606 阅读 ·
1 点赞 ·
2 评论

Flutter Android 端 FlutterInjector 及依赖流程源码分析

背景前面文章我们分析了 flutter 在 android 端编译命令相关流程,也分析了 Flutter App dart 代码入口开始到三棵核心树诞生流程,按照源码顺序,我们接下来需要先分析一下 Flutter Android 端 framework 平台实现代码(非 native engine 引擎部分),下面以一个纯 Flutter App 为例展开分析。工程结构及 API 变更对于一个纯 flutter app 来说,当我们在 yaml 依赖中添加两个 flutter plugin 依赖,然后
原创
发布博客 2021.08.08 ·
5162 阅读 ·
0 点赞 ·
0 评论

Flutter Android 端 Activity/Fragment 流程源码分析

背景前面文章我们分析了 flutter 在 android 端编译命令相关流程,也分析了 Flutter App dart 代码入口开始到三棵核心树诞生流程,按照源码顺序,我们接下来需要先分析一下 Flutter Android 端 framework 平台实现代码(非 native engine 引擎部分),下面以一个纯 Flutter App 为例展开分析。工程结构及 API 变更对于一个纯 flutter app 来说,当我们在 yaml 依赖中添加两个 flutter plugin 依赖,然后
原创
发布博客 2021.08.02 ·
5638 阅读 ·
3 点赞 ·
2 评论

Flutter 的 runApp 与三棵树诞生流程源码分析

背景从写 Flutter 第一行程序开始我们就知道在 Dart 的 main 方法中通过调用 runApp 方法把自己编写的 Widget 传递进去,只有这样编译运行后才能得到预期效果。你有没有好奇这背后都经历了什么?runApp 为什么这么神秘?或者说,在你入门 Flutter 后应该经常听到或看到过 Flutter 三棵树核心机制的东西,你有真正的想过他们都是什么吗?如果都没有,那么本文就是一场解密之旅。Flutter 程序入口我们编写的 Flutter App 一般入口都是在 main 方法,其
原创
发布博客 2021.08.01 ·
6166 阅读 ·
7 点赞 ·
9 评论

Flutter 命令本质之 Flutter tools 机制源码深入分析

背景上一篇《Flutter Android 工程结构及应用层编译源码深入分析》我们分析了 Flutter Android 相关的应用层主要编译流程,其中分析到底层本质命令工具【Flutter SDK 下bin/flutter编译命令分析】小节时只提到,我们执行任何 flutter 命令的本质都是把参数传递到了FLUTTER_SDK_DIR/packages/flutter_tools/bin/flutter_tools.dart源码的 main 方法中,没有对这里面进行深入分析。本文要做的事就是层层递进揭
原创
发布博客 2021.07.25 ·
5721 阅读 ·
3 点赞 ·
6 评论

Flutter Android 工程结构及应用层编译源码深入分析

本文部分配图及源码最近基于 Flutter 2.2.3 版本进行了修正更新发布。目的是为了弄清 Flutter 在安卓端应用层的整个编译来龙去脉,以便编译过程中出任何问题都能做到心里有数,另一个目的是为了能够在应用层定制 Flutter 编译。全文比较长,图文并茂,由工程结构深入到源码解析。
原创
发布博客 2021.07.18 ·
7501 阅读 ·
4 点赞 ·
12 评论

AnnotationProcessor 处理器不工作怎么定位?

什么是 Annotation Processor 构建问题写过自定义注解处理器的老司机们乍一看这个问题觉得挺简单,是的,因为网上基本通篇都在教你怎么打日志,但是你有没有想过如果连日志都打印不出来的时候你怎么定位呢?譬如如下代码:// 确认 META-INF/services/javax.annotation.processing.Processor 没问题// 确认构建脚本没问题,确认注解 Bridge 有被使用且有参与构建@AutoService(Processor.class)public c
原创
发布博客 2021.01.13 ·
6281 阅读 ·
4 点赞 ·
3 评论

给你的 app 三两下通过 JNI 移植一个 tracepath 追踪路由数据链

背景Linux 的 tracepath 指令可以追踪数据到达目标主机的路由信息,同时还能够发现 MTU 值。它跟踪路径到目的地,沿着这条路径发现 MTU。它使用 UDP 端口或一些随机端口。它类似于 Traceroute,只是不需要超级用户权限,并且没有花哨的选项。Android 也是移植的它,其源码放置位置在platform/external/iputils/tracepath6.c。我们之所以直接移植tracepath6.c而不是tracepath.c的原因是 tracepath6 支持 IPV6
原创
发布博客 2020.12.09 ·
4164 阅读 ·
2 点赞 ·
0 评论

Jetpack 全家桶之 App Startup 看完源码后真不是你们说的那样

背景我们都知道,Application 初始化一直是安卓开发中被诟病最多的问题之一,尤其是 app 支持多进程且航母级应用场景下。随着业务迭代,初始化代码控制不到位的情况下是灾难性的,后人不敢随意挪动位置,或者说因为时机太早且为 app 启动必经之路,每次修改的影响面都很难评估,造成的启动性能影响也很严重。此时可能很多小伙伴觉得 Jetpack 的 App Startup 库就是解决上面这段话里的问题的,因为他们觉得官方库介绍里说:The App Startup library provides a s
原创
发布博客 2020.11.29 ·
5096 阅读 ·
1 点赞 ·
1 评论

kotlin 实战之委托总结

工匠若水可能会迟到,但是从来不会缺席,最终还是觉得将自己的云笔记分享出来吧 ~特别说明,kotlin 系列文章均以 Java 差异为核心进行提炼,与 Java 相同部分不再列出。随着 kotlin 官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓即可,差异只是语法层面的事情,建议不要过多关注。类委托类委托原理:by 关键字后面的对象实际会被存储在类的内部,编译器则会将父接口的所有方法实现出来,并且将其转移给委托对象去执行。//定义一个接口interface InterfaceB
原创
发布博客 2020.11.22 ·
6416 阅读 ·
0 点赞 ·
0 评论

Groovy 动态面向对象复盘总结

工匠若水可能会迟到,但是从来不会缺席,最终还是觉得将自己的云笔记分享出来吧 ~背景前面《Groovy 本质初探及闭包特性原理总结》文章中我们总结了 Groovy 的本质,可以发现 Groovy 不但增强了 java 的脚本能力,也提供了新的面向对象特性;就像前面看到的,Groovy 对 java 非对象基础类型直接变成了引用类型,引入了闭包,并为对象集合增加了许多简化符号和拓展能力;前面文章也说了,这些特性可以看作是 java 的一种语法糖,但如果 Groovy 的对象仅仅提供 java 的语法糖能力,
原创
发布博客 2020.11.22 ·
4328 阅读 ·
0 点赞 ·
0 评论

Groovy 本质初探及闭包特性原理总结

工匠若水可能会迟到,但是从来不会缺席,最终还是觉得将自己的云笔记分享出来吧 ~Groovy 语言的本质Groovy 是基于 JVM 的一种语言,也是 Java 的一种升级拓展语言。其具备脚本语言的特性,但又不算脚本,所以其运行有如下两种方式:基于源码直接运行,譬如 groovy Test.groovy。基于预编译模式运行,譬如先 groovyc Test.groovy 然后 java Test。无论上面的哪种运行方式,其本质都是 JVM 字节码,可以理解成和 java 编译运行没啥区别,只是
原创
发布博客 2020.11.18 ·
4801 阅读 ·
1 点赞 ·
0 评论

kotlin 实战之泛型与逆变协变总结

工匠若水可能会迟到,但是从来不会缺席,最终还是觉得将自己的云笔记分享出来吧 ~特别说明,kotlin 系列文章均以 Java 差异为核心进行提炼,与 Java 相同部分不再列出。随着 kotlin 官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓即可,差异只是语法层面的事情,建议不要过多关注。范型(generics)与协变逆变范型用来表示变量类型的参数化。一个简单的范型类定义使用样例:class Generics<T>(t: T) { var tmp: T =
原创
发布博客 2020.11.18 ·
4321 阅读 ·
2 点赞 ·
0 评论

kotlin 实战之函数与 lambda 表达式总结

工匠若水可能会迟到,但是从来不会缺席,最终还是觉得将自己的云笔记分享出来吧 ~特别说明,kotlin 系列文章均以 Java 差异为核心进行提炼,与 Java 相同部分不再列出。随着 kotlin 官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓即可,差异只是语法层面的事情,建议不要过多关注。kotlin 函数与 lambada 表达式在 kotlin 中调用 java 方法时不能使用具名参数语法,因为 java 字节码并不总是会保留方法参数信息。默认参数函数//重载一个 te
原创
发布博客 2020.11.11 ·
4647 阅读 ·
1 点赞 ·
0 评论

kotlin 实战之面向对象特性全方位总结

工匠若水可能会迟到,但是从来不会缺席,最终还是觉得将自己的云笔记分享出来吧 ~特别说明,kotlin 系列文章均以 Java 差异为核心进行提炼,与 Java 相同部分不再列出。随着 kotlin 官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓即可,差异只是语法层面的事情,建议不要过多关注。面向对象//kotlin 类默认修饰符是 public 的,不用再显式指定 publicclass MyClass {}//kotlin中一个类的类体没有任何内容则花括号可以省略,如下:
原创
发布博客 2020.11.10 ·
4656 阅读 ·
1 点赞 ·
0 评论

AGP 升级问题续集来了,不看血亏,真是骚,你真的了解 R 的 Class 常量池?

背景上一篇文章《记录一次 AGP 调研过程中的思考,我从一个事故搞出了一个故事!》发布后有很多小伙伴表示看不懂,本来不想写这篇的,但是恰巧最近大组有同事在做另一个技术需求时他的 R 也炸了,只是他炸的是 javac 阶段,我上篇分析的场景是 ASM 生成字节码阶段,所以我让他将他的R.java文件发我,我尝试编译并与我的字节码做对比发现了一点我以前没意识到的点,所以自己觉得上篇博文还是不够深入,AGP 升级的 R 问题还能继续挖坟考古,所以想来个续集。鉴于有人上篇没看懂,这篇就循序渐进的图文并茂下。所以接
原创
发布博客 2020.11.09 ·
6258 阅读 ·
2 点赞 ·
2 评论

kotlin 实战之 let、with、run、apply、also、takeIf、takeUnless、repeat 源码总结

工匠若水可能会迟到,但是从来不会缺席,最终还是觉得将自己的云笔记分享出来吧 ~特别说明,kotlin 系列文章均以 Java 差异为核心进行提炼,与 Java 相同部分不再列出。随着 kotlin 官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓即可,差异只是语法层面的事情,建议不要过多关注。letlet扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择;let函数另一个作用就是可以避免写一些判断null的操作。obje
原创
发布博客 2020.11.07 ·
1697 阅读 ·
3 点赞 ·
0 评论
加载更多