├── Android热修复技术原理(最新最全).md ├── BlockChain.md ├── Git.md ├── Golang.md ├── Gradle.md ├── Groovy.md ├── JavaScript.md ├── Kotlin.md ├── LightGames.md ├── Plugin.md ├── Python.md ├── README.md ├── TypeScript.md └── picture └── hotfix ├── 1.png ├── 10.png ├── 11.png ├── 12.png ├── 13.jpg ├── 14.png ├── 15.png ├── 16.png ├── 17.png ├── 18.png ├── 19.png ├── 2.png ├── 20.png ├── 21.png ├── 22.png ├── 23.png ├── 24.png ├── 25.png ├── 26.png ├── 27.png ├── 28.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png └── 9.jpg /Android热修复技术原理(最新最全).md: -------------------------------------------------------------------------------- 1 | # 本文框架 2 | - 什么是热修复? 3 | - 热修复框架分类 4 | - 技术原理及特点 5 | - Tinker框架解析 6 | - 各框架对比图 7 | - 总结 8 | 9 |   通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单描述一下Tinker的框架结构。 10 | 11 | # 一、什么是热修复? 12 | ## 正常开发流程 13 | 14 | ![](/picture/hotfix/1.png) 15 | 16 | ## 热修复开发流程 17 | 18 | ![](/picture/hotfix/2.png) 19 | 20 | ## 热修复优势 21 | 22 | ![](/picture/hotfix/3.png) 23 | 24 | ## 修复什么? 25 | 26 | ![](/picture/hotfix/4.png) 27 | 28 | # 二、热修复框架分类 29 | ## 现状:百花齐放百家争鸣 30 | 31 | ![](/picture/hotfix/5.png) 32 | 33 | ## 简单分类 34 | 35 | ![](/picture/hotfix/6.png) 36 | 37 | ## 更合理的分类 38 | 39 | ![](/picture/hotfix/7.png) 40 | 41 | # 三、技术原理及特点 42 | ## 3.1 阿里Dexposed -- native解决方案 43 | ### 原理: 44 | 45 | - 直接在native层进行方法的结构体信息对换,从而实现完美的方法新旧替换,从而实现热修复功能 46 | 47 |   他的思想完全来源于Xposed框架,完美诠释了AOP编程,这里用到最核心的知识点就是在native层获取到指定方法的结构体,然后改变他的nativeFunc字段值,而这个值就是可以指定这个方法对应的native函数指针,所以先从Java层跳到native层,改变指定方法的nativeFunc值,然后在改变之后的函数中调用Java层的回调即可。实现了方法的拦截功能。 48 | 49 | - 基于开源框架Xposed实现,是一种AOP解决方案 50 | - 只Hook App本身的进程,不需要Root权限 51 | 52 | ---------- 53 | ![](/picture/hotfix/8.png) 54 | 55 | ![](/picture/hotfix/9.jpg) 56 | 57 | ![](/picture/hotfix/10.png) 58 | 59 | 60 | ### 优点: 61 | 62 | - 即时生效 63 | - 不需要任何编译器的插桩或者代码改写,对正常运行不引入任何性能开销。这是AspectJ之类的框架没法比拟的优势; 64 | - 对所改写方法的性能开销也极低(微秒级),基本可以忽略不计; 65 | - 从工程的角度来看,热补丁仅仅是牛刀小试,它真正的威力在于『线上调试』; 66 | - 基于Xposed原理实现的AOP不仅可以hook自己的代码,还可以hook同进程的Android SDK代码,这也就可以让我们有能力在App中填上Google自己挖的坑。 67 | 68 | ### 缺点: 69 | 70 | - Dalvik上近乎完美,不支持ART(需要另外的实现方式),所以5.0以上不能用了; 71 | - 最大挑战在于稳定性与兼容性,而且native异常排查难度更高; 72 | - 由于无法增加变量与类等限制,无法做到功能发布级别; 73 | 74 | ### 相关链接: 75 | 76 | - 文章:[https://www.zhihu.com/question/31894163](https://www.zhihu.com/question/31894163 "如何看待阿里开源的dexposed框架?") 77 | - 文章: 78 | [http://www.wjdiankong.cn/android%E4%B8%AD%E5%85%8Droot%E5%AE%9E%E7%8E%B0hook%E7%9A%84dexposed%E6%A1%86%E6%9E%B6%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86%E8%A7%A3%E6%9E%90%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0/](http://www.wjdiankong.cn/android%E4%B8%AD%E5%85%8Droot%E5%AE%9E%E7%8E%B0hook%E7%9A%84dexposed%E6%A1%86%E6%9E%B6%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86%E8%A7%A3%E6%9E%90%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0/ "Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复") 79 | - Dexposed源码:[https://github.com/alibaba/dexposed](https://github.com/alibaba/dexposed) 80 | - Xposed源码:[https://github.com/rovo89/Xposed](https://github.com/rovo89/Xposed) 81 | 82 | ## 3.2 阿里AndFix -- native解决方案 83 | ### 原理: 84 | 85 | - 与Dexposed一样都基于开源框架Xposed实现,是一种AOP解决方案 86 | 87 | ### 优点: 88 | 89 | - 即时生效 90 | - 支持dalvik和art(AndFix supports Android version from 2.3 to 7.0, both ARM and X86 architecture, both Dalvik and ART runtime, both 32bit and 64bit.) 91 | - 与Dexposed框架相比AndFix框架更加轻便好用,在进行热修复的过程中更加方便了 92 | 93 | ### 缺点: 94 | 95 | - 面临稳定性与兼容性问题 96 | - AndFix不支持新增方法,新增类,新增field等 97 | 98 | ### AndFix(Dexpsed)框架不稳定的原因(痛点) 99 | 100 | ![](/picture/hotfix/11.png) 101 | 102 | ![](/picture/hotfix/12.png) 103 | 104 | ### 相关链接: 105 | 106 | - 文章:[https://zhuanlan.zhihu.com/p/23935568](https://zhuanlan.zhihu.com/p/23935568 "Android热修复框架AndFix原理解析及使用") 107 | - AndFix源码:[https://github.com/alibaba/AndFix](https://github.com/alibaba/AndFix) 108 | 109 | 110 | ## 3.3 QQ空间--Dex插桩方案(大众点评的Nuwa参考其实现并开源) 111 | ### 原理: 112 | 113 | - 原理是Hook了ClassLoader.pathList.dexElements[]。因为ClassLoader的findClass是通过遍历dexElements[]中的dex来寻找类的。当然为了支持4.x的机型,需要打包的时候进行插桩。 114 | - 越靠前的Dex优先被系统使用,基于类级别的修复 115 | 116 | ![](/picture/hotfix/13.jpg) 117 | 118 | ### 优点: 119 | 120 | - 不需要考虑对dalvik虚拟机和art虚拟机做适配 121 | - 代码是非侵入式的,对apk体积影响不大 122 | 123 | ### 缺点: 124 | 125 | - 需要下次启动才会生效 126 | - 最大挑战在于性能,即Dalvik平台存在插桩导致的性能损耗,Art平台由于地址偏移问题导致补丁包可能过大的问题 127 | - 虚拟机在安装期间为类打上CLASS_ISPREVERIFIED标志是为了提高性能的,我们强制防止类被打上标志是否会影响性能?这里我们会做一下更加详细的性能测试.但是在大项目中拆分dex的问题已经比较严重,很多类都没有被打上这个标志。 128 | 129 | ### 插桩方案性能上的痛点: 130 | 131 | ![](/picture/hotfix/14.png) 132 | 133 | ### 相关链接: 134 | 135 | - 文章:[https://zhuanlan.zhihu.com/magilu/20308548](https://zhuanlan.zhihu.com/magilu/20308548 "安卓App热补丁动态修复技术介绍") 136 | - 文章:[http://blog.csdn.net/sbsujjbcy/article/details/50812674](http://blog.csdn.net/sbsujjbcy/article/details/50812674 "Android 热修复Nuwa的原理及Gradle插件源码解析") 137 | - Nuwa源码:[https://github.com/jasonross/Nuwa](https://github.com/jasonross/Nuwa) 138 | - HotFix源码:[https://github.com/dodola/HotFix](https://github.com/dodola/HotFix) 139 | - DroidFix源码:[https://github.com/bunnyblue/DroidFix](https://github.com/bunnyblue/DroidFix) 140 | 141 | ## 3.4 美团Robust -- Instant Run 热插拔原理 142 | ### 原理: 143 | 144 | - Robust插件对每个产品代码的每个函数都在编译打包阶段自动的插入了一段代码,插入过程对业务开发是完全透明 145 | - 编译打包阶段自动为每个class都增加了一个类型为ChangeQuickRedirect的静态成员,而在每个方法前都插入了使用changeQuickRedirect相关的逻辑,当 changeQuickRedirect不为null时,可能会执行到accessDispatch从而替换掉之前老的逻辑,达到fix的目的。 146 | 147 | ![](/picture/hotfix/17.png) 148 | 149 | ### 优点: 150 | 151 | - 几乎不会影响性能(方法调用,冷启动) 152 | - 支持Android2.3-8.x版本 153 | - 高兼容性(Robust只是在正常的使用DexClassLoader)、高稳定性,修复成功率高达99.9% 154 | - 补丁实时生效,不需要重新启动 155 | - 支持方法级别的修复,包括静态方法 156 | - 支持增加方法和类 157 | - 支持ProGuard的混淆、内联、优化等操作 158 | 159 | ### 缺点: 160 | 161 | - 代码是侵入式的,会在原有的类中加入相关代码 162 | - so和资源的替换暂时不支持 163 | - 会增大apk的体积,平均一个函数会比原来增加17.47个字节,10万个函数会增加1.67M。 164 | - 会增加少量方法数,使用了Robust插件后,原来能被ProGuard内联的函数不能被内联了 165 | 166 | ### 相关链接: 167 | 168 | - 美团技术文章:[https://tech.meituan.com/android_robust.html](https://tech.meituan.com/android_robust.html "Android热更新方案Robust") 169 | - 美团技术文章:[https://tech.meituan.com/android_autopatch.html](https://tech.meituan.com/android_autopatch.html "Android热更新方案Robust开源,新增自动化补丁工具") 170 | - Robust源码:[https://github.com/Meituan-Dianping/Robust](https://github.com/Meituan-Dianping/Robust) 171 | 172 | ## 3.5 微信Tinker 173 | 174 | ### 原理: 175 | 176 | - 服务端做dex差量,将差量包下发到客户端,在ART模式的机型上本地跟原apk中的classes.dex做merge,merge成为一个新的merge.dex后将merge.dex插入pathClassLoader的dexElement,原理类同Q-Zone,为了实现差量包的最小化,Tinker自研了DexDiff/DexMerge算法。Tinker还支持资源和So包的更新,So补丁包使用BsDiff来生成,资源补丁包直接使用文件md5对比来生成,针对资源比较大的(默认大于100KB属于大文件)会使用BsDiff来对文件生成差量补丁。 177 | 178 | ---------- 179 | 180 | ![](/picture/hotfix/15.png) 181 | 182 | ![](/picture/hotfix/16.png) 183 | 184 | ---------- 185 | 186 | ### 优点: 187 | 188 | - 支持动态下发代码 189 | - 支持替换So库以及资源 190 | 191 | ### 缺点: 192 | 193 | - 不能即时生效,需要下次启动 194 | 195 | ### Tinker已知问题: 196 | 197 | - Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件(1.9.0支持新增非export的Activity); 198 | - 由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码; 199 | - 在Android N上,补丁对应用启动时间有轻微的影响; 200 | - 不支持部分三星android-21机型,加载补丁时会主动抛出"TinkerRuntimeException:checkDexInstall failed"; 201 | - 对于资源替换,不支持修改remoteView。例如transition动画,notification icon以及桌面图标。 202 | 203 | ### Tinker性能痛点: 204 | 205 | - Dex合并内存消耗在vm head上,容易OOM,最后导致合并失败。 206 | - 如果本身app占用内存已经比较高,可能容易导致app本系统杀掉。 207 | 208 | ### 相关链接: 209 | 210 | - 文章:[http://geek.csdn.net/news/detail/104000](http://geek.csdn.net/news/detail/104000 "微信 Tinker 的一切都在这里,包括源码") 211 | - 文章:[Tinker官方文章](https://github.com/Tencent/tinker/wiki "wiki") 212 | - Tinker源码:[https://github.com/Tencent/tinker](https://github.com/Tencent/tinker) 213 | 214 | ## 3.6 阿里Sophix 215 | 216 | ### 原理(双剑合璧): 217 | ![](/picture/hotfix/18.png) 218 | 219 | ### 优化Andfix(突破底层结构差异,解决稳定性问题): 220 | 221 | ---------- 222 | 223 | **Andfix底层ArtMethod结构时采用内部变量一一替换,倒是这个各个厂商是会修改的,所以兼容性不好。** 224 | 225 | ![](/picture/hotfix/20.png) 226 | 227 | 228 | **Sophix改变了一下思路,采用整体替换方法结构,忽略底层实现,从而解决兼容稳定性问题。** 229 | 230 | ![](/picture/hotfix/19.png) 231 | 232 | ### 突破QQ和Tinker的缺陷 233 | 234 | ---------- 235 | 236 | **QQ和Tinker的缺陷** 237 | 238 | ![](/picture/hotfix/21.png) 239 | 240 | **Sophix对dex的解决方案** 241 | 242 | - Dalvik下采用阿里自研的全量dex方案:不是考虑把补丁包的dex插到所有dex前面(dex插桩),而是想办法在原理的dex中删除(只是删除了类的定义)补丁dex中存在的类,这样让系统查找类的时候在原来的dex中找不到,那么只有补丁中的dex加载到系统中,系统自然就会从补丁包中找到对应的类。 243 | - Art下本质上虚拟机以及支持多dex的加载,Sophix的做法仅仅是把补丁dex作为主dex(classes.dex)而已,相当于重新组织了所有的dex文件:把补丁包的dex改名为classes.dex,以前apk的所有dex依次改为classes2.dex、classes3.dex ... classesx.dex,如下图所示。 244 | 245 | ![](/picture/hotfix/22.png) 246 | 247 | ### 资源修复另辟蹊径 248 | 249 | ---------- 250 | 251 | **常用方案(Instant Run技术):这种方案的兼容问题在于替换AssetManager的地方** 252 | ![](/picture/hotfix/23.png) 253 | 254 | **Sophix资源修复方案** 255 | ![](/picture/hotfix/24.png) 256 | 257 | ### SO修复另辟蹊径 258 | 259 | ---------- 260 | 261 | ![](/picture/hotfix/25.png) 262 | 263 | # 四、Tinker框架解析 264 |   之所以只贴了Tinker的代码框架,是因为目前开源的方案中是最好的,当然除了Robust。 265 | ## 代码结构 266 | ![](/picture/hotfix/26.png) 267 | 268 | ## 修复流程 269 | ![](/picture/hotfix/27.png) 270 | 271 | **这里后续再补一个详细的源码分析,敬请期待** 272 | 273 | # 五、对比图(来自不同的地方) 274 | ## 来自Tinker的对比 275 | ![](http://images2017.cnblogs.com/blog/823551/201801/823551-20180119173848396-1135737571.png) 276 | 277 | ## 来自Sophix的对比 278 | ![](/picture/hotfix/28.png) 279 | 280 | ## 来自[蘑菇街 Android 热修复探索之路](https://mp.weixin.qq.com/s/GuzbU1M1LY1VKmN7PyVbHQ) 281 | ![](http://images2017.cnblogs.com/blog/823551/201801/823551-20180119181035646-1613402870.png) 282 | 283 | ## 其他文章 284 | - [浅谈Android热修复](http://blog.csdn.net/caihongdao123/article/details/52051799) 285 | - [Android热修复原理(一)热修复框架对比和代码修复](https://juejin.im/post/5aa7598b51882555731bca9e) 286 | - [Android 热修复专题:支付宝、淘宝、微信、QQ空间、饿了么、美丽说蘑菇街、美团大众点评方案集](https://zhuanlan.zhihu.com/p/25863920 "Android 热修复专题:支付宝、淘宝、微信、QQ空间、饿了么、美丽说蘑菇街、美团大众点评方案集合") 287 | ![](http://images2017.cnblogs.com/blog/823551/201801/823551-20180119174807209-784087153.jpg) 288 | 289 | # 六、总结 290 | 291 |   如果不考虑增大apk的体积,只是简单的修复代码,不修复so和资源,选择Robust是最稳定的,否则的话选择Tinker是一个不错的方案。虽然阿里Sophix横空出世,但是它不开源,而且商业收费,所以一般不是很赚钱的app选择收费的可能就很小了。不过它确实各方面都做了大量的优化,本文中的很多知识点也来源于阿里的《Android热修复技术原理.pdf》一书,本书值得一读,里面就是基于Sophix框架来编排的。 -------------------------------------------------------------------------------- /BlockChain.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/BlockChain.md -------------------------------------------------------------------------------- /Git.md: -------------------------------------------------------------------------------- 1 | # Git相关资源 2 | ## Git工具 3 | - [Git - Downloading Package](http://git-scm.com/download/win) 4 | - [Tortoisegit - Windows Shell Interface to Git - Google Project Hosting](https://code.google.com/p/tortoisegit/) 5 | 6 | ## 学习文档 7 | - [Git-TortoiseGit完整配置流程](http://www.cnblogs.com/popfisher/p/5466174.html) 8 | - [Windows下Git多账号配置,同一电脑多个ssh-key的管理](http://www.cnblogs.com/popfisher/p/5731232.html) 9 | - [Git教程首页 - Git教程](http://www.yiibai.com/git/home.html#) 10 | - [Git - Documentation](https://git-scm.com/doc) 11 | - [Git 使用简易指南](http://www.bootcss.com/p/git-guide/) 12 | - [webcoding/useGit](https://github.com/webcoding/useGit) 13 | - [git/github学习笔记 - 虫师 - 博客园](http://www.cnblogs.com/fnng/archive/2011/08/25/2153807.html) 14 | - [GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流](http://blog.csdn.net/vipzjyno1/article/details/22098621) 15 | - [git-osc - 代码托管 - 开源中国社区](http://git.oschina.net/oschina/git-osc/wikis/Home) 16 | - [史上最浅显易懂的Git教程(廖雪峰的官方网站)](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) -------------------------------------------------------------------------------- /Golang.md: -------------------------------------------------------------------------------- 1 | # Golang 2 | 3 | ## 官方资料 4 | - 官方网址:[https://golang.org/](https://golang.org/) 5 | 6 | 7 | ## 快速入门指南 8 | - Go语言中文网:[https://studygolang.com/](https://studygolang.com/) 9 | - [Go入门指南](http://tour.studygolang.com/welcome/1) 10 | - Golang中国社区:[https://www.golangtc.com/](https://www.golangtc.com/) 11 | - [Go语言教程-菜鸟教程](http://www.runoob.com/go/go-tutorial.html) -------------------------------------------------------------------------------- /Gradle.md: -------------------------------------------------------------------------------- 1 | # Gradle资料 2 | 3 | - [Gradle Docs](https://docs.gradle.org/current/userguide/userguide.html) -------------------------------------------------------------------------------- /Groovy.md: -------------------------------------------------------------------------------- 1 | # Groovy脚本 2 | 3 | ## 官方文档 4 | 5 | - [Groovy官网](http://www.groovy-lang.org/) 6 | 7 | ## 教程 8 | 9 | - [Groovy教程_w3cschool](https://www.w3cschool.cn/groovy/) 10 | - [精通 Groovy](https://www.ibm.com/developerworks/cn/education/java/j-groovy/j-groovy.html) 11 | - [Groovy官方指南(翻译)](http://ifeve.com/groovy-guide/) 12 | - [Groovy脚本基础全攻略](http://blog.csdn.net/yanbober/article/details/49047515) -------------------------------------------------------------------------------- /JavaScript.md: -------------------------------------------------------------------------------- 1 | # JavaScript 学习指南 2 | 3 | ## 学习资源 4 | - [JavaScript 全栈教程(廖雪峰的官方网站)](https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000) 5 | - [JavaScript 基础教程(W3Cschool)](https://www.w3cschool.cn/javascript/) 6 | - [深入理解 JavaScript(W3Cschool)](https://www.w3cschool.cn/deep_learn_javascript/) -------------------------------------------------------------------------------- /Kotlin.md: -------------------------------------------------------------------------------- 1 | # Kotlin学习资料 2 | 3 | - [Kotlin官网](http://kotlinlang.org/) 4 | - [Kotlin CHINA](https://kotliner.cn/) 5 | - [[已完结]Kotlin 从入门到放弃 视频 知乎专栏](https://zhuanlan.zhihu.com/p/23101437) 6 | - [Println](http://www.println.net/) -------------------------------------------------------------------------------- /LightGames.md: -------------------------------------------------------------------------------- 1 | # 小游戏/轻游戏开发 2 | ## 微信小游戏 3 | - [你的第一个小游戏 -> 开发手册](https://mp.weixin.qq.com/debug/wxagame/dev/index.html) 4 | ## 游戏引擎 5 | - Cocos:[http://www.cocos.com/](http://www.cocos.com/) 6 | - Egret:[https://www.egret.com/cn/](https://www.egret.com/cn/) 7 | - LayaBox:[https://ldc.layabox.com/doc/?nav=zh-as-3-4-5](https://ldc.layabox.com/doc/?language=en&nav=en-as-5-0-1) 8 | - Unity:[https://unity3d.com/cn/](https://unity3d.com/cn/) 9 | ### Egret 10 | - Egret官网(下载地址):[https://www.egret.com/cn/](https://www.egret.com/cn/) 11 | - Egret开发者官网:[http://developer.egret.com/cn/](http://developer.egret.com/cn/) 12 | - Egret开发微信小游戏文档:[http://developer.egret.com/cn/github/egret-docs/Engine2D/minigame/introduction/index.html](http://developer.egret.com/cn/github/egret-docs/Engine2D/minigame/introduction/index.html) 13 | - Egret开发FaceBook游戏文档:[http://developer.egret.com/cn/github/egret-docs/Engine2D/facebookInstantGames/index.html](http://developer.egret.com/cn/github/egret-docs/Engine2D/facebookInstantGames/index.html) 14 | - 绘制API:[https://html.spec.whatwg.org/multipage/canvas.html?t=201832#2dcontext](https://html.spec.whatwg.org/multipage/canvas.html?t=201832#2dcontext) 15 | 16 | ### Cocos 17 | - cocos2d-x:[http://www.cocos2d-x.org/](http://www.cocos2d-x.org/) 18 | - [Cocos2d-x v3.16开发手册](http://docs.cocos.com/cocos2d-x/manual/zh/) 19 | - [Cocos Creator v1.9.x 用户手册](http://docs.cocos.com/creator/manual/zh/) 20 | - [Cocos 视频教程](http://docs.cocos.com/creator/manual/zh/video-tutorial/) 21 | - [Cocos Creator 入门](http://docs.cocos.com/creator/manual/zh/getting-started/) 22 | - [新手教程 | Cocos Creator 调试入门(使用Chrome浏览器的开发工具)](http://forum.cocos.com/t/cocos-creator/56746/1) 23 | - [调试Cocos Creator项目的两种方式](https://blog.csdn.net/stillwater123/article/details/79234459) 24 | - [Cocos Creator + TypeScript 入门教程](https://blog.csdn.net/potato47/article/details/79254524) 25 | 26 | ## 网络协议 27 | - [MQTT](http://mqtt.org/) 28 | 29 | ### MQTT 30 | - [MQTT协议中文版](https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html) 31 | - [初识 MQTT(为什么 MQTT 是最适合物联网的网络协议)](https://www.ibm.com/developerworks/cn/iot/iot-mqtt-why-good-for-iot/index.html?ca=drs-&utm_source=tuicool&utm_medium=referral) 32 | - [MQTT.js](https://www.npmjs.com/package/mqtt) 33 | - [Eclipse Paho JavaScript client](https://eclipse.org/paho/clients/js/) 34 | - [mqttws31.js 在typescript中使用](https://github.com/icanos/ng2-mqtt/blob/master/README.md) 35 | 36 | ## 服务端框架 37 | - [mqant:一款基于Golang语言的简洁,高效,高性能的分布式游戏服务器框架](https://github.com/liangdas/mqant) -------------------------------------------------------------------------------- /Plugin.md: -------------------------------------------------------------------------------- 1 | # 插件化框架 2 | 3 | - [阿里巴巴插件化框架Atlas](http://atlas.taobao.org/docs/) -------------------------------------------------------------------------------- /Python.md: -------------------------------------------------------------------------------- 1 | # Python学习资料 2 | 3 | ## 基础语法 4 | - [简明 Python 教程](http://sebug.net/paper/python/) 5 | - [疯狂的Python:快速入门精讲- 网易云课堂](http://study.163.com/course/introduction.htm?courseId=302001#/courseDetail) 6 | - [疯狂python-快速入门-milo](http://www.ablesky.com/kecheng/detail_473907) 7 | - [小白的Python新手教程,基于新的Python3(廖雪峰的官方网站)](https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000) 8 | ## Python框架 9 | - [Flask文档](http://flask.pocoo.org/) 10 | - [Django官网](https://www.djangoproject.com/) 11 | - [PyQt4教程](http://jimmykuu.sinaapp.com/static/PyQt4_Tutorial/html/) 12 | - [PyQt官网](http://www.riverbankcomputing.co.uk/news) 13 | 14 | ## 第三方库 15 | - [lxml - XML and HTML with Python(lxml is the most feature-rich and easy-to-use library for processing XML and HTML in the Python language)](http://lxml.de/index.html#introduction) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FavoriteForAndroid 2 | Android收藏夹,整理一些比较有用的精品网站,博客,工具(持续更新) 3 | 4 | # Android相关技术 5 | ## 精品资源 6 | - [Android官方培训课程中文版](http://hukai.me/android-training-course-in-chinese/index.html) 7 | - [Android官方培训课程中文版Github地址](https://github.com/PopFisher/android-training-course-in-chinese) 8 | - [Android 开源项目分类汇总,更全更新](https://github.com/PopFisher/android-open-project) 9 | - [开源代码分析 codekk.com -> 对一些比较流行的开源框架进行源码分析,学习框架的时候比较有用](http://p.codekk.com/) 10 | - [ImportNew -> 专注Java & Android 技术分享](http://www.importnew.com/) 11 | - [伯乐在线 -> 技术博客](http://blog.jobbole.com/category/android/) 12 | - [安卓巴士(APKBUS)-> 中国最大的安卓程序员社区](http://www.apkbus.com/) 13 | - [Android Studio 安卓开发者社区](http://ask.android-studio.org/?/explore/) 14 | - [Android Studio 中文社区](http://www.android-studio.org/) 15 | - [Free Android Icons - 1000+ icons for your App -> 很多很漂亮的App图标](http://www.icons4android.com/) 16 | - [Android军火库 -> Android developer portal with tools, libraries, and apps -> 可以搜到很多实用的Android项目](https://android-arsenal.com/) 17 | - [收集整理Android开发所需的Android SDK、开发中用到的工具、开发教程、设计规范,免费的设计素材等。](https://github.com/inferjay/AndroidDevTools) 18 | ## 精品博客 19 | - [老罗的Android之旅 -> 很全面的Android教程](http://blog.csdn.net/luoshengyang?viewmode=contents) 20 | - [技术小黑屋 -> 这个博主写的文章质量很高](http://droidyue.com/) 21 | - [美团点评技术团队 -> 技术团队把自己内部的一些探索实践写了出来](https://tech.meituan.com/) 22 | 23 | ## 热修复 24 |  **开源框架汇总如下:** 25 | 26 | - Dexposed:[https://github.com/alibaba/dexposed](https://github.com/alibaba/dexposed) 27 | - AndFix:[https://github.com/alibaba/AndFix](https://github.com/alibaba/AndFix) 28 | - Nuwa:[https://github.com/jasonross/Nuwa](https://github.com/jasonross/Nuwa) 29 | - HotFix:[https://github.com/dodola/HotFix](https://github.com/dodola/HotFix) 30 | - DroidFix:[https://github.com/bunnyblue/DroidFix](https://github.com/bunnyblue/DroidFix) 31 | - Robust:[https://github.com/Meituan-Dianping/Robust](https://github.com/Meituan-Dianping/Robust) 32 | - RocooFix:[https://github.com/dodola/RocooFix](https://github.com/dodola/RocooFix) 33 | - Aceso:[https://github.com/meili/Aceso](https://github.com/meili/Aceso) 34 | - Amigo:[https://github.com/eleme/Amigo](https://github.com/eleme/Amigo) 35 | - Tinker:[https://github.com/Tencent/tinker](https://github.com/Tencent/tinker) 36 | 37 | ---------- 38 |  **各框架对比以及技术原理请阅读下文** 39 | 40 | - [Android热修复技术原理(最新最全)](https://github.com/PopFisher/FavoriteForAndroid/blob/master/Android%E7%83%AD%E4%BF%AE%E5%A4%8D%E6%8A%80%E6%9C%AF%E5%8E%9F%E7%90%86%EF%BC%88%E6%9C%80%E6%96%B0%E6%9C%80%E5%85%A8%EF%BC%89.md) 41 | 42 | ## 插件化 43 | - [插件化框架](https://github.com/PopFisher/FavoriteForAndroid/blob/master/Plugin.md) 44 | 45 | ## 性能优化 46 | - [Android性能优化典范](http://hukai.me/) 47 | 48 | ## 精品Android工具 49 | - [Android Census -> 查看设备信息](https://census.tsyrklevich.net/devices) 50 | 51 | ## Png图片压缩工具(裁剪apk size) 52 | 1. [TinyPng:轻量级,能保证基本图片质量](https://tinypng.com/ "TinyPng") 53 | 2. [pngquant:压缩力度大,有损压缩,不能保证图片质量](https://pngquant.org/ "pngquant") 54 | 55 | ## 反编译 56 | - [android在线反编译 -> Android APK Decompiler](http://www.decompileandroid.com/) 57 | 58 | # 编程语言学习 59 | - [Python](https://github.com/PopFisher/FavoriteForAndroid/blob/master/Python.md) 60 | - [Kotlin](https://github.com/PopFisher/FavoriteForAndroid/blob/master/Kotlin.md) 61 | - [JavaScript](https://github.com/PopFisher/FavoriteForAndroid/blob/master/JavaScript.md) 62 | - [Groovy](https://github.com/PopFisher/FavoriteForAndroid/blob/master/Groovy.md) 63 | - [Golang](https://github.com/PopFisher/FavoriteForAndroid/blob/master/Golang.md) 64 | - [TypeScript](https://github.com/PopFisher/FavoriteForAndroid/blob/master/TypeScript.md) 65 | 66 | # 编译脚本 67 | - [Gradle](https://github.com/PopFisher/FavoriteForAndroid/blob/master/Gradle.md) 68 | 69 | # 相关教程网 70 | - [易百教程 -> 专注于IT教程和实例](http://www.yiibai.com/) 71 | - [AS&Gradle视频教程](http://ask.android-studio.org/?/explore/category-video) 72 | - [W3Cschool -> 学编程,从w3cscholl开始](https://www.w3cschool.cn/) 73 | 74 | # 精品网站 75 | - [SegmentFault -> 每个月帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。](https://segmentfault.com/) 76 | - [51CTO.COM技术成就梦想 -> 中国领先的IT技术网站](http://www.51cto.com/) 77 | - [在线工具-开源中国社区 -> 提供JDK在线文档,XML格式化,各种代码格式,正则表达式测试等](http://tool.oschina.net/) 78 | - [Square Open Source -> Square开源的所有项目](http://square.github.io/) 79 | 80 | # 精品工具 81 | - [Charles -> Web debugging proxy application](https://www.charlesproxy.com/) 82 | - [codota -> Your AI Pair Programmer(Codota understands the world’s code and provides you with the right suggestion at the right time)](https://www.codota.com/) 83 | - [Everything Search Engine -> 快速检测磁盘上的文件](http://www.voidtools.com/) 84 | - [ConEmu-Windows terminal -> 代替cmd的必备工具](https://conemu.github.io/) 85 | - [Babun -> a windows shell you will love!](http://babun.github.io/) 86 | - [在线颜色选择器 | RGB颜色查询对照表 -> aTool在线工具](http://www.atool.org/colorpicker.php) 87 | 88 | # 精品博客 89 | - [阮一峰的网络日志](http://www.ruanyifeng.com/blog/) 90 | - [正则表达式30分钟入门教程](http://deerchao.net/tutorials/regex/regex.htm) 91 | 92 | # 项目管理 93 | - [Git](https://github.com/PopFisher/FavoriteForAndroid/blob/master/Git.md) 94 | 95 | # 小游戏开发(微信小游戏,FB小游戏) 96 | - [微信小游戏](https://github.com/PopFisher/FavoriteForAndroid/blob/master/LightGames.md) 97 | 98 | # 机器学习 99 | - [TensorFlow 官方文档中文版](http://tensorfly.cn/tfdoc/get_started/introduction.html) 100 | - [深度学习框架比较:Deeplearning4j、Torch、Theano、Caffe和TensorFlow - Deeplearning4j: Open-source, Distributed Deep Learning for the JVM](https://deeplearning4j.org/cn/zh-compare-dl4j-torch7-pylearn) 101 | - [斯坦福大学公开课 :机器学习课程_机器学习的动机与应用_网易公开课](http://open.163.com/movie/2008/1/M/C/M6SGF6VB4_M6SGHFBMC.html) 102 | 103 | # 区块链(blockchain) 104 | - [深入浅出区块链](https://learnblockchain.cn/) 105 | - [区块链理论学习入门指南 – 代码家](https://daimajia.com/2017/08/24/how-to-start-blockchain-learning) -------------------------------------------------------------------------------- /TypeScript.md: -------------------------------------------------------------------------------- 1 | # TypeScript(TS) 2 | 3 | ## TypeScript-JavaScript的超集 4 | 5 | ## 官方资料 6 | - 官址:[http://www.typescriptlang.org/](http://www.typescriptlang.org/) 7 | - 官网(中文):[https://www.tslang.cn/index.html](https://www.tslang.cn/index.html) 8 | 9 | 10 | ## 快速入门指南 11 | - TS语言中文网:[https://www.tslang.cn/](https://www.tslang.cn/) 12 | - [TS中文手册](http://www.runoob.com/manual/gitbook/TypeScript/_book/) 13 | - [TS快速入门教程-W3Cschool](https://www.w3cschool.cn/typescript/typescript-tutorial.html) 14 | - [TS入门教程-菜鸟教程](http://www.runoob.com/w3cnote/getting-started-with-typescript.html) 15 | 16 | ## 开发工具(IDE) 17 | - [官网推荐工具列表](http://www.typescriptlang.org/#download-links) 18 | - [Node.js(已经集成了NPM)](https://www.npmjs.com/get-npm) 19 | - [Visual Studio Code](https://code.visualstudio.com/) => [搭建TypeScript开发环境](https://segmentfault.com/a/1190000006124164) 20 | - [WebStorm](https://www.jetbrains.com/webstorm/) => [搭建TypeScript开发环境](https://blog.csdn.net/sujun10/article/details/54171394) 21 | 22 | ### Visual Studio Code 23 | - Code editing Redefined. 24 | - Free. Open source. Runs everywhere. 25 | - Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux. It comes with built-in support for JavaScript, TypeScript and Node.js and has a rich ecosystem of extensions for other languages (such as C++, C#, Java, Python, PHP, Go) and runtimes (such as .NET and Unity). Begin your journey with VS Code with these [introductory videos](https://code.visualstudio.com/docs/getstarted/introvideos). 26 | 27 | ### Node.js 28 | - 简单的说 Node.js 就是运行在服务端的 JavaScript。 29 | - Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 30 | - Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好 31 | 32 | ### What is npm? 33 | - npm makes it easy for JavaScript developers to share and reuse code, and makes it easy to update the code that you’re sharing, so you can build amazing things. 34 | 35 | ### WebStorm 36 | - The smartest JavaScript IDE 37 | - Powerful IDE for modern JavaScript development 38 | - [WebStorm 2017,2018 激活方法](https://blog.csdn.net/jiangxinyu50/article/details/79104016) 39 | - [WebStorm 2017 激活破解方法大全](https://blog.csdn.net/voke_/article/details/76418116) -------------------------------------------------------------------------------- /picture/hotfix/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/1.png -------------------------------------------------------------------------------- /picture/hotfix/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/10.png -------------------------------------------------------------------------------- /picture/hotfix/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/11.png -------------------------------------------------------------------------------- /picture/hotfix/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/12.png -------------------------------------------------------------------------------- /picture/hotfix/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/13.jpg -------------------------------------------------------------------------------- /picture/hotfix/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/14.png -------------------------------------------------------------------------------- /picture/hotfix/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/15.png -------------------------------------------------------------------------------- /picture/hotfix/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/16.png -------------------------------------------------------------------------------- /picture/hotfix/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/17.png -------------------------------------------------------------------------------- /picture/hotfix/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/18.png -------------------------------------------------------------------------------- /picture/hotfix/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/19.png -------------------------------------------------------------------------------- /picture/hotfix/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/2.png -------------------------------------------------------------------------------- /picture/hotfix/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/20.png -------------------------------------------------------------------------------- /picture/hotfix/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/21.png -------------------------------------------------------------------------------- /picture/hotfix/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/22.png -------------------------------------------------------------------------------- /picture/hotfix/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/23.png -------------------------------------------------------------------------------- /picture/hotfix/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/24.png -------------------------------------------------------------------------------- /picture/hotfix/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/25.png -------------------------------------------------------------------------------- /picture/hotfix/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/26.png -------------------------------------------------------------------------------- /picture/hotfix/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/27.png -------------------------------------------------------------------------------- /picture/hotfix/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/28.png -------------------------------------------------------------------------------- /picture/hotfix/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/3.png -------------------------------------------------------------------------------- /picture/hotfix/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/4.png -------------------------------------------------------------------------------- /picture/hotfix/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/5.png -------------------------------------------------------------------------------- /picture/hotfix/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/6.png -------------------------------------------------------------------------------- /picture/hotfix/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/7.png -------------------------------------------------------------------------------- /picture/hotfix/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/8.png -------------------------------------------------------------------------------- /picture/hotfix/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PopFisher/FavoriteForAndroid/9dfff6f7d9cbe2761a3c960aa4f95841addbfe7f/picture/hotfix/9.jpg --------------------------------------------------------------------------------