![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 75
OSTCB
这个作者很懒,什么都没留下…
展开
-
SandHook 之 Native Inline Hook
简介在 SandHook ART Hook 稳定之后,抽空把 Native Inline Hook 实现了,虽然有重复造轮子的嫌疑,但确实是本人一行一行码出来的,基本所有的东西都是自己实现的。Github: https://github.com/ganyao114/SandHook支持目前支持ARM32ARM64其实 X86 非常好实现,但是想了一下还是往后稍稍吧,等 ARM 稳...原创 2019-05-27 11:26:18 · 3489 阅读 · 3 评论 -
Android 双开沙箱 VirtualApp 源码分析(六)ContentProvider
上一章:Android 双开沙箱 VirtualApp 源码分析(五)BroadcastReceiverProvider 注册回顾前面,Activity 启动的时候会检查 Application 是否初始化,会调用 bindApplication,里面执行了安装 Provider 的方法:private void installContentProviders(Context app, List<P原创 2017-07-28 15:07:50 · 6492 阅读 · 2 评论 -
Android 双开沙箱 VirtualApp 源码分析(四)启动插件 Service
上一章:Android 双开沙箱 VirtualApp 源码分析(三)App 启动原生 Service 创建过程首先有必要了解一下原生 framework 对 Service 的创建,因为在 VA 中启动 Service 和 Activity 有很大的区别。首先入口 ContextWrapper.startService():@Override public ComponentName st原创 2017-07-27 17:23:27 · 7278 阅读 · 2 评论 -
Android 双开沙箱 VirtualApp 源码分析(三)App 启动
上一章:Android 双开沙箱 VirtualApp 源码分析(二) 在这之前,我们还是要先了解一下 VA Client Framework 和 VAService 之间的通讯方式VAService 与通讯VAService首先,VAService 是指 VA 仿造 Android 原生 framework 层 Service 实现的一套副本,举例有 VActivityManagerServic原创 2017-07-27 13:17:10 · 15587 阅读 · 10 评论 -
Android 双开沙箱 VirtualApp 源码分析(二)
上一章:Android 双开沙箱 VirtualApp 源码分析(一)VA 初始化先看一下代码: VirtualCore.startuppublic void startup(Context context) throws Throwable { if (!isStartUp) { // 确保 MainThread if (Loo原创 2017-07-26 16:00:10 · 14549 阅读 · 3 评论 -
Android 双开沙箱 VirtualApp 源码分析(一)
最近发现了一个非常好的开源项目,基本实现了一个 Android 上的沙箱环境,不过应用场景最多的还是应用双开。 VA github: https://github.com/asLody/VirtualApp VA 的源码注释: https://github.com/ganyao114/VA_Doc 第一章主要是分析一下项目的整体结构。包结构android.content主要是 PackageP原创 2017-07-26 14:46:15 · 39694 阅读 · 8 评论 -
Android O 8.0 BroadcastReceiver 注册工具
关于 Android O 不出意外,为了控制 App 自动唤醒,Google 在新系统中又一次严格控制了 App 的后台行为,这一次在 Menifest 中注册的广播 Action 大部分都失效了。 为了方便在 8.0 上继续使用 Menifest 注册 Receiver,只能手动解析 Menifest 转为动态注册。所以顺手写了这么一个工具。 github 使用导入项目中原创 2017-08-08 13:05:39 · 3990 阅读 · 2 评论 -
Retrofit 原理简析
简介 Retrofit 所做的事情简单来说就是将你的 Http 业务 API --> Http 请求实现,类似于 Spring MVC 中的 Controller,它的主要任务是解析你的业务接口,从接口上获取你的 Http 接口协议,然后组装 Http 请求,进行异步 Request。 Retrofit 整合了多个组件,包括 JSON/XML 的 ORM 映射,用于解析返回值;Http原创 2017-07-20 15:20:37 · 1007 阅读 · 0 评论 -
Android 架构设计 本科《毕业论文》
不知不觉学生时代已经结束,由于在 Android 上面花了不少功夫,所以这次毕业论文也是对我 Android 学习的一次总结,基本上都是自己写的。有关 Android 架构设计的一些想法,当然也有一些主流 Android 框架的源码解析(biru可以下来看一看。文档下载地址:https://github.com/ganyao114/Android_Architecture目录:原创 2017-07-20 14:56:54 · 5112 阅读 · 2 评论 -
Android MVP 实现。基于Dagger2 + RxJava + Retrofit2 + Realm + ButterKnife + EventBus
前言随着 Android 项目的越来越大,主流正在向 MVP 靠拢,但是一直没有一个比较好的较为通用的实现模式。那么下面结合一些人的做法介绍一下我的想法。基础模块1.Dagger 2 依赖注入模块项目各个模块使用 Dagger 2进行依赖的管理以解耦各个模块。MVP 三层间使用 Dagger 2进行生命周期以及依赖的管理。各个组件使用接口进行抽象,各种实现使用 Dagger 2 进行拼装,实现原创 2016-10-29 10:28:36 · 5207 阅读 · 3 评论 -
打造超越 EventBus 的事件管理框架
EventPoster一.目的 二.概述以及优势 1.模块化,易扩展 2.缓存管理 3.预加载 4.对于注册的实例的管理,防止 Leak 5.各模块 Handler 的管理 三.用法 1.与 MVP 结合使用 2.接口 3.扩展模块一.目的 纯粹的想做一个轮子,已经有 EventBus 了,为什么还要去做?原创 2016-10-18 11:53:40 · 1504 阅读 · 0 评论 -
Android 双开沙箱 VirtualApp 源码分析(五)BroadcastReceiver
上一章:Android 双开沙箱 VirtualApp 源码分析(四)启动插件 Service方案猜测同 Activity 一样,Client App 在 Menifest 中注册的静态广播外部 AMS 是无法知晓的,经过前几章的分析,相信大家已经是老司机了,我们可以先尝试提出自己的观点。 1. 和 Activity 一样使用 Stub 组件占坑?仔细想一想是无法实现的,因为你无法预先确定原创 2017-07-28 11:53:27 · 6864 阅读 · 2 评论 -
Android ART Hook & 注入实现细节
author: Swift Gantitle: Android ART Hookdate: 2019/04/01SandHookAndroid Art HookSwift GanAgenda简介ART Invoke 指令生成基本实现指令检查Xposed 支持inline 处理Android Q架构图进程注入简介SandHook 是作用在 Android ...原创 2019-04-11 11:14:58 · 7055 阅读 · 1 评论 -
SandHook 第四弹,Android Q 支持 & Hidden API & Inline 的特别处理
SandHook目前支持 4.4 - 10.032/64 bit支持 Xposed APIGithub:https://github.com/ganyao114/SandHookAndroid Q 支持Hidden Api这个是从 Android P 就开始引入的反射限制机制。目前来说有几种方案:Hook 法,Hook 某些判断函数,修改 ART 对限制 API 的判断流程...原创 2019-03-15 21:08:08 · 3200 阅读 · 4 评论 -
Android ART invoke 代码生成
前言在前面 SandHook 系列我们知道 ArtMethod 入口替换并不能覆盖所有的方法,而且这个问题比预想的严重的多的多。而导致 Hook 不到的原因不仅仅是 inline 优化,Inline 只是小头,真正主要的原因是 Art Optimizing 代码生成的 Sharpening 优化。Quick &amp;amp; OptimizingART 中的 Compiler 有两种Quic...原创 2019-03-03 23:01:50 · 1672 阅读 · 0 评论 -
SandHook 第二弹 - Xposed API 兼容 & 指令检查 & 进程注入
Xposed API 兼容由于 SandHook 需要手动写一个签名与目标方法相同的 Hook 方法,如果想把 API 包装成类 Xposed 的 Callback 式 API 是比较困难的,首先参数列表的解析就需要另外实现。Epic 是用写好的一堆 Stub 函数进行分发,SandHook 参考了 EdXposed(YHAFA 的封装) 使用 Dexmaker 动态生成 Hook 函数。动态...原创 2019-02-12 16:07:09 · 5921 阅读 · 0 评论 -
SandHook 第三弹 - 性能优化 & Xposed 模块 & 阻止 VM Inline
简介前面有提到过 SandHook 需要手动写一个 Hook 方法作为 Hook 的入口,所以想要兼容 Xposed Callback 式 API 就必须凭空生成一个 Hook 方法来转发 Xposed Callback 逻辑。所以我选择了 DexMaker,但是 Dexmaker 生成代码并且加载的时候还是太慢了,尽管只需要第一次生成(后面只需要加载即可),第一次 Hook 一个函数大概需要...原创 2019-02-22 22:38:17 · 5708 阅读 · 0 评论 -
Android ART Hook 实现 - SandHook
简介Github: https://github.com/ganyao114/SandHook关于 Hook,一直是比较小众的需求。本人公司有在做 Android Sandbox(类似 VA),算是比较依赖 Hook 的产品,好在 Android Framework 大量使用了代理模式。所以也不用费劲在VM层作文章了,直接用动态代理即可。然而,VM 层的 Java Hook 还是有些需求的,...原创 2019-01-27 16:11:20 · 23163 阅读 · 4 评论 -
Android ART hook 框架 YAHFA 的 Bug 修复以及改进建议
YAHFA目前简单找了一下 Android 上的 ART Hook Epic 和 YAHFA 较为流行,支持的版本也比较好 5.0 - 9.0,所以看了一下 YAHFA 源码并且跑了一下 demo。Bug使用中发现在 5.0 - 6.0 的 64 位机器上会挂掉,调试了一下发现 YAHFA 在试图获取 dexCacheResolvedMethods 列表时读到了非法地址。因为 ArtMet...原创 2019-01-15 17:52:45 · 2199 阅读 · 0 评论 -
记一次 JVM 源码分析(3.内存管理与GC)
简介miniJVM 的内存管理的实现较为简单原创 2018-11-08 12:41:25 · 1402 阅读 · 1 评论 -
AppBarLayout + RecycleView 滑动后,item 在一段时间内无法点击的问题
1原创 2018-06-11 14:31:58 · 3081 阅读 · 11 评论 -
Android 被动依赖注入框架
1.lazyInject被动依赖注入框架 for Android Github2.配置关闭 Instant RunSetting-&amp;gt;Build-&amp;gt;Instant Run 此项功能与 AspectJ(本项目依赖 AsoectJ) 冲突 Gradle根目录/build.gradle buildscript { ... ...原创 2018-04-17 17:13:58 · 2114 阅读 · 0 评论 -
ActivityLifecycleCallbacks的正确使用姿势
这是Android4.0之后的新Api,大多数人可能没有在意这一改动。但是对于一些框架的设计使用却有非常重要的意义的。public interface ActivityLifecycleCallbacks { void onActivityCreated(Activity activity, Bundle savedInstanceState); void on原创 2016-09-26 11:18:22 · 1544 阅读 · 1 评论 -
打造JSON的ORM解析框架
JSON解析原创 2016-09-08 16:47:54 · 2003 阅读 · 0 评论 -
Android数据绑定,MVVM框架,SpringMVC for Android
最近研究怎么让自己的程序节省几行代码。仔细想一想,我们在做客户端类的APP时,最基础,大量重复的场景就是:1.从服务器请求数据2.解析得到的数据并处理加以封装3.将封装好的数据送到UI线程显示到View上。那么,不可避免的。一次流程我们需要编写:http数据请求,JSON解析处理,异步处理,Handler,业务异常处理,View显示,如果有集合控件,还得写ViewHolder,Adapte原创 2016-08-31 22:46:52 · 1721 阅读 · 0 评论 -
Android组件保活,service保活
首先介绍一下android的进程. Android 进程分为两种 :其一,java层的进程,也就是在虚拟机里运行的进程,他们的父进程是zygote进程,我们平时调用的AM里面的类似getrunningprocess()方法,返回的就是这类进程信息,这类进程很容易被杀死。其二,native层的原生进程 也就是linux c的进程,这类进程比较安全,其中父进程是init进程的更加安全,很难杀死,在原创 2016-06-21 18:20:14 · 2507 阅读 · 0 评论 -
实现Android的MVP框架
对于Android到底使用MVC,MVVM还是MVP相信大家已经争论已久了。其实争论的由来个人认为对于Activity的存在,这个角色似乎介于View和Controller之间。难免内部会耦合大量逻辑。其实这也和Android的设计思路有关,Android每个活动片段被设计成一个Context,即一个上下文,一个场景,一次交互。这是一个很抽象的概念,对于Context来说,Android四原创 2016-06-25 16:11:05 · 4196 阅读 · 0 评论 -
打造Android集合控件数据绑定(支持添加监听,支持AbsListView与RecycleView,支持异步加载等)(二)ORM注解以及解析
前面提到了我使用注解做ORM映射1.首先是绑定item布局文件的注解@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface ListDataSrc { int value();}这个没什么好说的2.然后是各个控件id的绑定注解,为了扩展性,我抽象出了一个基类注解@Tar原创 2016-05-20 16:27:08 · 844 阅读 · 0 评论 -
打造Android集合控件数据绑定(支持添加监听,支持AbsListView与RecycleView,支持异步加载等)(三)具体实现
在上面一篇中我们已经获得了所有必要的数据,下面就是在抽象好的onBinder回掉中调用这些method。1.首先补一下上一篇的坑,Pojo类的解析过程如下public void bind(AbsListView view,RecyclerView recyclerView,List list,Class clazzType,Object ltnImpl){原创 2016-06-02 10:33:54 · 980 阅读 · 1 评论 -
打造Android集合控件数据绑定(支持添加监听,支持AbsListView与RecycleView,支持异步加载等)(一)基础篇
使用反射+注解实现ORM关系映射,类似hmb,Spring等。老规矩,先看一下使用效果:调用:ListBinder.With(mRecyclerView).setLtnImpl(this).bind(news)Pojo类@ListDataSrc(R.layout.list_item_card_main)public class NewsListPojo impleme原创 2016-05-19 11:55:20 · 885 阅读 · 0 评论 -
在Android上打造属于自己的Rxjava框架(三)操作符变换
Rxjava为了保持链式调用和简单便捷性原创 2016-05-19 08:52:10 · 659 阅读 · 0 评论 -
在Android上打造属于自己的Rxjava框架(四)扩展成EventBus
这一篇实现起来其实非常非常简单,仔细想一下RxJava和EventBus的区别,无非就是EventBus的全局可达性,就是一个全局静态变量的问题。下面就来简单实现一下。1.首先给IPubliser增加几个方法public IPublisher name(String t);public IPublisher save();public void destroy();再在原创 2016-05-19 10:24:09 · 619 阅读 · 0 评论 -
Android逆向之分析某锁机恶意软件
最近贴吧里冒出了一批以免流为名的锁机软件,吧友深受其害,连夜反编译分析了一个。首先反编译APK,找到程序入口一般是onCreate;找到发现很简单,点击按钮执行d方法;找到d方法发现也很简单,就是把ijm-x86.so复制到SD卡下;很明显如果ljm-x86.so确实是so文件的话是不符合逻辑的,因为这样锁机软件只能运行在X86平台下。思考了一下全局搜搜原创 2016-05-19 08:32:31 · 3118 阅读 · 0 评论 -
在Android上打造属于自己的Rxjava框架(二)调度器
前言:上一篇架构了Rx的基础,这次我们来动手写一下调度器,对应RxJava的Schedule,个人认为对于android来说,调度器的加入是重中之重。对于Android来说异步处理一直是在编码上是一个扰乱代码结构的因素,Handler的编写常常让人头疼。原创 2016-05-18 10:14:05 · 1296 阅读 · 1 评论 -
在Android上打造属于自己的Rxjava框架(一)基础篇
前言 .最近发现Rxjava比较火,所以去了解了一下,发现确实挺有意思的,于是乎迫不及待的下载了源码下来研究一番。然后就迫不及待的写了一份类似的,与RxJava还是有很大不同的。一是接触时间太短,匆匆看了几行源码就开始写了,二是平时确实不用JS,那种函数式响应式编程的感觉很薄弱吧。所以还是按照平时我在android编码里的习惯设计的这个小框架。1.基础:观察者模式,都是基于观察者模式那原创 2016-05-18 08:19:44 · 1404 阅读 · 0 评论 -
浅谈并小结java内存泄漏
一.定义首先什么是内存泄漏,简单点说就是用完了忘了回收,而其他对象等资源想用却没法用的一种“站着茅坑不拉屎”的浪费资源的情况。在C/C++中,多数泄漏的场景就是程序离开某一运行域时,如在某个方法体中new出的对象或者malloc出的结构体等,并且只有该方法体中的局部变量指向这块内存区域时,在该方法返回时,存在栈中的局部变量指针随着栈帧被一起销毁,那么就没有任何指针可以指向该内存区域了,那么这块原创 2016-08-17 13:21:25 · 2887 阅读 · 0 评论 -
关于synchronized与lock的性能比较
记得当初看教程的时候大家都说lock性能比好不少,最近需要自己设计一个缓存终于要自己尝试一番了。1.关于两者的实现的比较A).一般认为synchronized关键字的实现是源自于像信号量之类的线程同步机制,涉及到线程运行状态的切换,在高并发状态下,CPU消耗过多的时间在线程的调度上,从而造成了性能的极大浪费。然而真的如此么? B).lock实现原理则是依赖于硬件,现代处理器都支持CAS指令,所谓C原创 2016-09-09 13:41:35 · 13348 阅读 · 4 评论 -
Android性能优化总结
简要总结一下Android性能优化。一. 加载预加载:1.反射注解框架Reflect信息,在Application内多线程预加载至缓存。2.资源预加载懒加载:1.Fragment懒加载2.资源懒加载二. 缓存1. Http缓存,淘汰时间2. 图片缓存,bitmap压缩,Lru淘汰,持久化二级缓存3. 反射注解框架Reflect信息缓存,防止原创 2016-09-19 22:17:19 · 1042 阅读 · 0 评论 -
Android App架构设计
前言Web的架构经过多年的发展已经非常成熟了,我们常用的SSM,SSH等等,架构都非常标准。个人认为,Web服务逻辑比较清晰,目的明确,流程也相对固定,从服务器收到请求开始,经过一系列的的拦截器,过滤器->被转发到控制器手中->控制器再调用服务->服务再调用DAO获取想要的数据->最后把数据返回给web层。哪怕中间增加一些东西,如缓存什么的。他的模型依然是以用户请求的线程为生命周期,经过一个个切面(原创 2016-09-20 14:35:17 · 7686 阅读 · 1 评论 -
Android ViewPage+Fragment伸缩实现菜单效果,仿Ifanr
先上Ifanr效果 实现效果 1.布局xml 设置android:clipChildren=”false” 使子View在ViewPage被缩放时允许超出ViewPage的范围 activity_main.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.androi原创 2016-09-22 22:12:10 · 2145 阅读 · 0 评论