- 博客(70)
- 资源 (17)
- 收藏
- 关注

原创 Android 可视化性能监控和辅助小工具合集
MagicBox是一款Android平台的小工具合集, 性能检测, 接口请求控制和拦截等功能集合. 建议在Debug和测试阶段使用.功能清单小工具: 提供各种小工具辅助开发测试, 并支持外部扩展.功能描述APP信息打开展示APP详细信息, 支持外部扩展设备信息打开展示设备详细信息仪表盘打开或关闭系统弹窗, 用于实时展示性能和网络数据Crash信息直接在APP内查看Crash信息, 也支持导出到SD卡沙盒查看查看APP沙盒空间, 支持文本预览和导
2020-06-15 10:42:03
3295

原创 Android 热修复方案Tinker(七) 插桩实现
Tinker V1.7.5是最后一个还支持回退Qzone方案插桩实现补丁修复的版本.由于Tinker的全量合成需要拿到原dex,而第三方的加固通常会将原dex隐藏起来做保护所以使用了第三方加固就只能用V1.7.5的Qzone模式.除非自己做dex保护或者不使用加固,但是有时候用不用第三方加固不是开发者能决定的并且自己实现加固的门槛和成本都是很高的.基于这些因素还是很有必要分析Tinker的Qzone方案实现,用了这套
2017-02-03 14:17:01
7239

原创 Android 热修复方案Tinker(六) Gradle插件实现
这篇文章主要分析一下Tinker中gradle插件的设计以及各个任务的职能.Gradle插件工作流程的简单实现在Android Gradle 插件编写文章中有讲过,这里就不复述了.下图是Tinker Gradle插件的类图结构.
2016-12-29 11:53:43
8798

原创 Android 热修复方案Tinker(五) SO补丁加载
SO文件加载的时机和Dex跟资源的加载有些不一样,像Dex和资源的加载都是系统在特定的时机自动去加载,而SO加载的时机则是让开发者自己控制.开发者可以通过System类对外暴露出来的两个静态方法load和loadLibarary加载SO.这两个方法都拿到ClassLoader再通过Runtime实现的.
2016-12-11 18:00:25
9338

原创 Android 热修复方案Tinker(四) 资源补丁加载
想要做资源的更新首先需要了解分析资源加载流程,这样才能找到突破口.一般我们在应用中使用和加载资源都是通过Context对象的getResources方法.这里以Android 6.0的源码分析资源加载的流程.
2016-12-04 16:37:27
10160
4
原创 ThreadPoolExecutor精简解析
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
2019-12-16 10:33:46
296
原创 基于Express React AntD和MongoDB构建一个CMS系统
Demeter是一个CMS系统, 提供用户体系以及App项目相关内容管理. 其中会包括用户模块, 项目模块和归档模块等. 该系统会长期迭代和维护.
2017-11-05 11:26:09
3932
原创 在redux-observable中替换fetch请求网络数据
通常在React项目中会搭配redux来管理React的state状态. 由于项目有异步action的需求, 并且后续会使用到rxjs, 同时想要action层面保持良好的纯字面量风格, 这时就考虑使用redux-observable提供异步action的支持. 目前项目中用到异步action的场景主要是接口的请求, 在接入redux-observable之前项目是使用isomorphic-fetc
2017-08-21 09:52:49
3036
原创 Android 安全规约
Android 安全规约汇总了一些安全工具扫描的规则, Android的安全漏洞以及实际项目中需要注意的安全问题. 并分筛选出市面上加固方案和360火线扫描能够覆盖到的, 和需要手工检查的问题. 具体分布如下表所示.规约可以作为开发时的安全手册, 也可以作为上线前的安全问题checklist.
2017-06-12 09:23:07
1529
原创 火线扫描Android静态代码
火线扫描是由360公司内部孵化出的免费静态代码扫描工具, 它目前最新版本v1.2.4主要针对Android静态代码的安全问题进行扫描. 在360内部该方案也服务于360安全卫士、手机助手、手机浏览器等15个App. 据火线的开发者说后续可能会对Kotlin(Android first-class开发语言)扫描、IOS扫描、圈复杂度和覆盖率统计等提供支持.并且火线是本地部署, 可以避免代码泄露和其他
2017-06-11 11:56:11
1957
原创 React Native Application和Activity源码分析
基于V0.43.3版本 React Native Android端的ReactApplication和ReactActivity的实现原理.
2017-06-04 16:26:03
3295
原创 单元测试之道
单元测试的好处是众所周知的, 它可以提早发现bug, 提高开发过程中的项目质量, 完善代码的设计等. 所以大部分人是认同单元测试的作用, 也都同意它的必要性. 但是真正在实施或落地单元测试的时候又会有各种各样的阻力.理由也是多种多样的, 例如费时, 测试代码不是我的工作, 代码能编译通过为什么还要写单元测试等.
2017-05-06 14:18:08
1401
原创 React Native 环境搭建, 新建项目, 运行和调试
React Native 可以理解为一个基于 JavaScript, 具备动态配置能力, 面向前端开发者的移动端开发框架. 目前为止虽然一直还没有V1.0.0版本, 但是相信很多小伙伴都了解过或者已经入坑了. 为什么RN那么有人气呢? 我们可以先简单分析一下RN的场景.
2017-04-04 19:56:34
2023
原创 Android 开发中使用 AOP
大家对AOP应该都不陌生, 就算没有用过也肯定听说过. 用过或了解过Java AOP的同学应该都知道AspectJ的大名. 因为AspectJ与java程序完全兼容,几乎是无缝关联, 所以只需要做一些简单的AJC适配就可以用在Android开发中. AspectJ用法简单容易上手, 不像之前说过的ASM那样有陡峭的学习曲线, 需要了解Java的字节码指令才能做代码注入. 同时AspectJ也很强大
2017-03-19 14:19:44
4544
原创 Python 发送邮件脚本
在一些场景中经常需要发送邮件, 像是持续集成和运维报警等. 而使用Python脚本能够很快捷方便得实现发送各种邮件的需求.这里就通过Python基于SMTP(Simple Mail Transfer Protocol)实现一套可以群发,Html内容和附件的脚本.既然是要发送各种类型的邮件, 首先需要有一个邮箱.这里就以腾讯企业邮箱为例.做完一下三个准备工作之后就可以开始
2017-02-26 14:41:12
5835
原创 Python 自动化加固流程
这里的加固指的是那种需要把文件上传到第三方网站上, 等它加固完成之后再下载下来的场景.这里就以梆梆加固为例, 通过Python脚本将这个过程自动化起来.既然牵扯到第三方的网站, 那么这个脚本绝大多数的操作都跟网络请求相关. 简单设计一下脚本的结构, 先封一个基类出来对外提供一些基础的网络操作, 方面以后扩展使用.子类根据实际的业务场景对外提供功能方法.
2017-02-19 12:48:22
3950
3
原创 配置SonarQube,Jenkins集成扫描Android项目
SonarQube是一款开源的质量管理平台, 可以从不同的维度分析项目的质量.也可以把SonarQube跟Jenkins结合起来, 从而帮助我们快递定位潜在的问题, 更好得把控项目输出的质量.SonarQube的安装分为两部分, 分别是Server和Scanner.Server是整个SonarQube平台运行基础.Scanner提供了代码扫描的功能, 以及针对Gradle的扫描配置.Jenkins的安装配置这里就不展
2017-02-12 14:28:58
7300
原创 Android Gradle 插件编写
现在绝大多数的android项目都是使用gradle来构建了,相信大家对gradle已经很熟悉了.像是声明当前module为application, library或者java;又像通过配置android {...}的属性来影响构建或者编译的过程;或者当引入一些需要参与到编译过程的库时,经常需要使用自定义的gradle的插件.那么这些究竟是怎么实现的? 这篇文章就结合gradle配置,插件和Tas
2016-12-18 17:35:34
5466
1
原创 Android 热修复方案Tinker(三) Dex补丁加载
之前有说到Tinker的修复原理是跟Qzone类似,这里就详细分析一下为什么这样做可以修复补丁.虽然其他Android版本的源码实现可能不一样,但是都是基于相同的原理.所以这里就以Android 6.0的源码为例介绍原理.具体每个系统版本的不同实现下面会详细说明.首先从加载dex文件的入口开始看, /libcore/dalvik/src/main/java/dalvik/system/DexC
2016-11-23 17:02:36
8731
2
原创 Android 热修复方案Tinker(二) 补丁加载流程
这篇文章从加载补丁的入口tryLoad处开始分析Tinker补丁加载的流程.根据不同的类别Tinker可以支持dex,SO和资源更新,接下来会详细分析.先贴出补丁加载的主要类图.从tryLoad入口开始,tryLoad中调用加载补丁流程的方法,并统计出这次Load Patch所消耗的时间. Intent resultIntent = new Intent(); //统计
2016-11-20 12:31:16
7938
2
原创 Android 热修复方案Tinker(一) Application改造
这篇文章主要分析一下Tinker隔离Application.至于为什么要隔离Application?可以参考上一篇 Android 热修复方案分析文章中说到的Qzone方案,要给除了Application子类所有的类注入一个独立dex中的类引用,来避免class被打上CLASS_ISPREVERIFIED标记.而这个独立的dex是在Application启动之后加载的,所以Application子
2016-11-16 16:06:44
17649
1
原创 Android 热修复方案分析
绝大部分的APP项目其实都需要一个动态化方案,来应对线上紧急bug修复发新版本的高成本.之前有利用加壳,分拆两个dex结合DexClassLoader实现了一套全量更新的热更方案.实现原理在Android 基于Proxy/Delegate 实现bug热修复这篇博客中有分解.因为这套方案是在Java端实现,并且是全量更新所以兼容性较好,成功率较高.但是在线上跑了几个月之后就碰到了瓶颈,因为随着业务的增
2016-11-11 16:06:07
7134
原创 Android 日志管理框架 NativeLogger
日志是任何项目开发中的必须组件,它可以帮助我们.既然日志可以帮助我们做很多分析,那么开发者肯定是有很多定制需求的,例如不同环境过滤不同等级的log,格式化输出,输出到文件,打包日志上传分析等等.这里就针对Android平台开发一套日志框架.后续将持续完善. github地址:https://github.com/HiJesse/Android-NativeLogger功能清单 状
2016-09-12 13:35:36
8144
12
原创 Android 项目部署之Nexus私服搭建和应用
一.概述 Nexus是一个基于maven的仓库管理的社区项目.主要的使用场景就是可以在局域网搭建一个maven私服,用来部署第三方公共构件或者作为远程仓库在该局域网的一个代理.简单举几个例子就是: 1.第三方Jar包可以放在nexus上,项目可以直接通过Url和路径配置直接引用.方便进行统一管理. 2.同时有多个项目在开发的时候,一些共用基础模块可以单独抽取到nexus上,需要用的项目直接从nexus上拉取就行(基础模块的实现,维护和部署可以交给专门的人员,其他项
2015-09-23 16:33:29
17672
原创 Android 运行中效验文件完整合法性
1.概述 因为之前项目有动态热修复的功能,在修复的过程中会从服务器上下载一个新的dex文件来替换老的dex文件,所以就牵扯到文件身份效验的问题.通常接口会下发一个MD5值,只是一个MD5值的话只能做一个完整性效验,并不能确定文件的合法性,如果攻击者模拟接口下发一个正确的MD5值,照样可以替换文件.所以这里就在效验MD5完整性之后再根据签名做合法性效验.
2015-09-05 15:19:47
27734
8
原创 Android设计模式之工厂模式 Factory
一.概述 平时做项目跟使用第三方类库的时候经常会用到工厂模式.什么是工厂模式,简单来说就是他的字面意思.给外部批量提供相同或者不同的产品,而外部不需要关心工厂是如何创建一个复杂产品的过程.所以工厂模式可以降低模块间的耦合,同时可以提高扩展性(当有新的产品出现时,只需要扩展工厂就行了,上层模块不敏感). 工厂模式根据抽象的角度和层级的不同可以分为两种模式: 1.工厂方法模式 (Factory Method) 2.抽象工厂模式 (Abstract Fac
2015-08-23 16:25:06
24251
2
原创 Android 5.0之后隐式声明Intent 启动Service引发的问题
一.概述 Android系统升级到5.0之后做了不少的变化(5.0变化),开发人员一定要注意这些变化,要不然就有的折腾了.这次最大的变化应该是把Dalvik虚拟机改成了ART(Android Runtime),后续会专门讲解这一块.其他的都是一些零碎的问题,例如前段时间发了一篇Android 5.0之后修改了HashMap的实现(传送门).这篇主要讲一下遇到跟Service相关的问题.
2015-08-13 15:16:24
38849
1
原创 Android源码之DeskClock (四)
一.概述 之前写三的时候饶了个弯,通过DeskClock这个项目简单实现了一下加固+热修复,在这篇继续回到正规继续分析源码.在二里面大致分析了DeskClock的主入口,跟四个主要功能Fragment的转换,从这篇开始就着手分析这四大功能.先从Clock功能的Fragment开始讲起.
2015-08-09 18:20:43
12111
原创 Android设计模式之代理模式 Proxy
一.概述 代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A坐享中介筛选的结果,并且交房租也是交给中介,这就是一个典型的日常生活中代理模式的应用.平时打开网页,最先开到的一般都是文字,而图片等一些大的资源都会延迟加载,这里也是使用了代理模式.
2015-07-28 22:14:05
25796
1
原创 Android 基于Proxy/Delegate 实现bug热修复
一.概述 现在越来越多的app开始采用本地app结合html5的设计结构,这样做不仅可以跨平台,并且在某个业务或模块出了严重的bug,可以直接在html5+后台实时修复,省去了发布新包和新版本的步骤.那么在不是html5结构的android app中怎么实现不重新打包更新版本的情况下实现热修复bug呢?这里介绍的一种方法是通过升级dex文件来修复线上包的紧急bug。二.实例三.总结
2015-07-21 12:08:45
16664
1
原创 Android源码之DeskClock (三) Proxy/Delegate Application 框架应用
1.概述当项目有加壳子的需求的时候,可以使用Proxy/Delegate Application框架的方式,在正常的模式中,一个程序一般只有一个Application入口,而Proxy/Delegate模式中需要有两个Application,原程序的Application改为Delegate Application,再新加一个Proxy Application
2015-07-20 09:09:17
14488
原创 Android源码之DeskClock (二)
1.概述 在DeskClock(一)中介绍了该程序源码的迁出,现在开始分析该应用的源码,DeskClock主要有四个功能,闹钟,时钟,定时,和秒表,在这篇博客中主要分析DeskClock的入口和主UI上的逻辑结构,在后续的系列中会把这四个功能都串起来.
2015-07-13 18:01:59
16438
原创 Android activity-alias 多入口配置
以前装应用的时候有些应用会在桌面上生成两个图标,这两个图标有些是同一个Activity的入口,有些是另外一个Activity的入口,这样的效果是怎么实现的呢?在看Android原生DeskClock程序的时候看到了这个功能的实现.使用的是activity-alias:1.语法格式<activity-alias android:enabled=["true" | "false"]
2015-07-11 10:27:02
18914
1
原创 Android源码之DeskClock (一)
一.概述二.移植出DeskClock这个系列分析的是Android kitkat(4.4)版本的DeskClock程序.用4.4版本来分析主要原因是博主的手机是4.4的,之前有移植lollipop的DeskClock程序到手机上,结果不兼容,后来就用kitkat的DeskClock程序了.既然分析参考DeskClock的内容,当然需要有源码才行,还必须得原汁原味的.大家
2015-07-06 14:16:21
20636
4
精通移动APP测试实战:技术、工具和案例
2019-02-13
Android 开源库DataDroid
2014-11-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人