贾小昆的个人网站

贾小昆的个人网站

Jaqen's Personal Website

Android Clean 架构
Clean 一般是指,代码以洋葱的形状依据一定的依赖规则被划分为多层:内层对于外层一无所知。这就意味着依赖只能由外向内。 架构独立。架构不依赖于一些满载功能的软件库。 可测试性。业务规则可以在没有 UI、数据库等外部元素的情况下完成测试。 UI的独立性。在不改变系统其余部分的情况下完成UI的简易修改。 数据库的独立性。业务规则不绑定数据库,可以随意更换数据库的实现。 外部机制独立。业务规则不知道外层的事情。 Framework and Drivers框架或者驱动,包括 UI、框架、数据库实现、网络实现细节等。 Interface Adapter接口适配层,负责将实现细节和业务逻辑...
Android 事件分发机制
MotionEvent根据面向对象思想,事件被封装成 MotionEvent 对象,以下是几个与手指触摸相关的常见事件: ACTION_DOWN : 手指初次触摸到屏幕时触发。 ACTION_MOVE:手指在屏幕上滑动时触发,会触发多次。 ACTION_UP:手指离开屏幕时触发。 ACTION_CANCEL:事件被上层拦截时触发。 对于单指操作,一次触摸事件流程是这样的: 按下(ACTION_DOWN)—> 滑动(ACTION_MOVE)—> 离开(ACTION_UP)。如果只是简单的点击,则没有 ACTION_MOVE 事件产生。 事件分发、拦截与消费与事件分发相关的三...
Android 加固技术调研
第一代加固第一代加固原理是基于 Dex 加载器的加固技术。 基本步骤1、从 Apk 文件中获取原始的 dex 文件。 2、对原始的 dex 文件进行加密,并将加密后的 dex 文件存放在 asset 目录。 3、用脱壳 dex 文件替换原始 apk 文件的 dex 文件。脱壳 dex 文件的作用主要有两个:一是解密加密后的 dex 文件,二是动态加载解密后的 dex 文件。 4、修改清单文件,将程序入口改为壳程序。 5、打包签名。 缺陷依赖 Java 的动态加载机制,解密后的 dex 文件必须解压到文件系统,即使是应用的私有目录,攻击者很容易获取文件。 第二代加固—不落地加载相对于第一...
《刷新》书摘
1、 在首堂正念训练课上,热尔韦博士问我们是否愿意先尝试一次特别的个人体验,大家全都点头表示同意。然后他要求我们中一人站出来当志愿者。结果没有人站出来,一时间房间里非常安静,气氛也非常尴尬。然后,我们的首席财务官埃米·胡德站了出来,她被要求背诵字母表,而且每个字母后面都要加入一个数字,即A1B2C3……让热尔韦博士感到奇怪的是:为什么不是每个人都站出来呢?这是一个高绩效团队吗?不是刚才每个人都说要尝试一下特别的体验吗?由于没有手机也没有电脑可看,所以我们低头看自己的鞋子,或看着同事紧张地微笑。这些问题的答案着实让人难以说出口,虽然它们就在嘴边。或是出于担心:担心被嘲笑,担心失败,担心被认...
Java 反射基础
最近在调研 Android 应用加固方案,涉及大量反射技术,因此趁这个机会总结下 Java 反射的一些知识。 什么是反射?反射是 Java 语言提供的一种基本功能。通过反射我们可以在运行时动态地操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造函数,甚至可以在运行时修改类定义。 基本使用方法反射的主要步骤包括: 获取目标类型的 Class 对象 通过 Class 对象分别获取 Constructor 类对象、Method 类对象 和 Field 类对象。 通过 Constructor 、Method 和 Field 分别获取目标类的构造函数、方法和属性的...
String、StringBuilder 和 StringBuffer
在之前的文章 Java 中 String 类为什么要设计成不可变的? 中对 String 的特性已经作了总结。这篇文章主要介绍另外两个常用的类 StringBuilder 和 StringBuffer 的特性。 我们知道 String 是不可变的 (Immutable),字符串的操作会产生新对象,消耗内存。为此,JDK 提供了 StringBuffer 和 StringBuilder 两个类。 StringBuffer 和 StringBuilder 都实现了 AbstractStringBuilder 抽象类,拥有几乎一致对外提供的接口;它们底层在内存中的存储方式与 String 相同...
Java 中 String 类为什么要设计成不可变的?
String 是 Java 中不可变的类,所以一旦被实例化就无法修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。本文总结下 String 类设计成不可变的原因及好处,以及 String 类是如何设计成不可变的。 String 类设计成不可变的原因及好处?其实好处就是原因,String 设计成不可变,主要是从性能和安全两方面考虑。 1、常量池的需要这个方面很好理解,Java 中的字符串常量池的存在就是为了性能优化。 字符串常量池(String pool)是 Java 堆内存中一个特殊的存储区域,当创建一个 String 对象时,假如此字符串已经存在于常量池中,则不会创建新的对象,...
Android RxJava + Retrofit + Dagger2 + MVP
如何即快速掌握 Android RxJava + Retrofit + Dagger2 + MVP,以下是个人认为值得学习的开源项目、库以及技术教程,以下两个项目基本涵盖了当前 Android 开发中常用的主流技术框架,适合没有项目经验的同学,能够帮助你快速提高项目开发能力、掌握前沿技术。 值得学习的项目 Awesome-WanAndroid :基于Material Design + MVP + Rxjava2 + Retrofit + Dagger2 + GreenDao + Glide ,一款极致体验的 WanAndroid 客户端。 WeiYue :微阅是一款使用 MVP + Re...
Android APK 签名原理
Android APK 签名原理涉及到密码学的加密算法、数字签名、数字证书等基础知识,这里做个总结记录。 非对称加密需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密。 其相对的加密即为对称加密,可以用现实世界中的例子来对比:一个传统保管箱,开门和关门都是使用同一条钥匙,这是对称加密;而一个公开的邮箱,投递口是任何人都可以寄信进去的,这可视为公钥;而只有邮箱主人拥有钥匙可以打开邮箱,这就视为私钥。 消息摘要算法一种能产生特殊输出格式的算法,其原理是根据一定的运算规则对原始数据进行某种形式的信息提取,被提取出的信息就被称作原始数据的消息摘要。著名的摘要算法...
写在工作一周年
早上收到了公司发来的祝福邮件,祝福入职工作一周年。 这一年里,经历了一些事,遇见了一些人,有一些所思所想,这里做个总结吧。 关于工作。 技术方面,相比于学生时代,还是有了很大提升,也逐渐能在公司站住脚。虽然说技术不是全部,但对于目前这个阶段,技术还是核心竞争力。首先感谢一下我的导师吧,他是一个性格很好的人,也很有耐心,对我技术及思维提升上给了很大的帮助。然后也要感谢自己,感谢自己对技术还是感兴趣的,还能继续坚持学习下去,毕竟这是我目前唯一的谋生技能。我生性内敛,很多时候不够主动,所以这一年也没得到比较好的机会,表现平平,这也是...
avatar
贾小昆