- 博客(20)
- 收藏
- 关注
原创 解决支付宝包体积优化的遗留问题:运行时获取dexpc
本文解决了支付宝包体积优化方案遗留的一个未解决问题。1 问题背景1.1 安卓包体积优化精简安卓应用的包体积是提升其质量的重要手段之一。安卓应用的安装包(apk文件)中dex保存的是应用的代码,占有可观的体积。如果能够将这一部分的体积减小,那么无疑会有效地减小安装包的体积。dex中的debugitem主要保存着两类信息:1.方法的参数和局部变量信息。2.行号信息。删除debugitem后不会影...
2019-12-28 17:22:47 945
原创 你的程序为什么会崩溃?
准确地讲,标题应为“你的进程为什么会崩溃”。这篇文章不是教你找到进程崩溃的原因,所以看了这篇文章貌似对解决崩溃问题没什么帮助 (;¬_¬)这里思考的一个问题是:理论上,CPU遇到非法指令或非法数据等错误后,完全可以继续执行在这之后的指令,但是它为什么一定要崩溃?下面是我思考后得出的结果。进程崩溃是一种保护机制,是为了防止继续犯下更大的错误。比如说用户原本有10块钱,消费了1块钱,但是扣减...
2019-08-05 01:12:49 833
原创 实用的Android.mk用例
通过一个实例说明Android.mk的用法,四个module: add,sub,multi和div,分别对应四种编译方式:shared,static,prebuilt shared,prebuilt static.项目结构如图: 各个Android.mk内容如下:src/main/cpp/Android.mkinclude $(call all-subdir-makefiles)...
2018-07-14 14:40:03 772
原创 突破Android P(Preview 1)对调用隐藏API限制的方法
突破Android P(Preview 1)对调用隐藏API限制的方法一.概要本文基于对Android P(Preview 1)的源码分析,实现了三种绕过对调用隐藏API限制的方法,有效性均已得到验证,能够成功调用系统隐藏API。二.限制原理首先抛开Android P的具体实现过程,安卓系统要实现限制用户代码调用系统隐藏API,至少要做以下两个区分:必须区分一个Met...
2018-04-12 21:49:55 3732 1
原创 浅显理解Android的Matrix
Matrix就是一个从(x0,y0)到(x1,y1)的Map,也就是从原始点到结果点的映射.一个全新的(下称单位矩阵)Matrix映射结果为(x1=x0,y1=y0).单位矩阵Matrix调用post(pre)Translate(a,b)映射结果为(x1=x0+a,y1=y0+b).单位矩阵Matrix调用post(pre)Scale(sx,sy)映射结果为(x1=x0*sx,y1=y0*s
2018-01-21 13:14:09 331
原创 applicationId VS package
预备知识只有在使用Android Studio时才会存在applicationId,这个值一般写在build.gradle文件中.用Android Studio构建apk时,AndroidManifest.xml源文件和生成的apk中的AndroidManifest.xml会稍有变化.构建apk之前和构建apk之后applicationId和package的作用是会发生变化的,下面分别讨论之:
2017-06-21 23:01:59 403
原创 AndroidManifest.xml的意义
AndroidManifest.xml是一个什么文件?它是每个apk(zip)文件解压后根目录下的一个文件,每个apk都必须包含一个AndroidManifest.xml文件,且名字必须与此完全一致.为什么每个android应用都必须有一个AndroidManifest.xml文件?
2017-06-21 22:47:07 2468
原创 linux下的进程组会话作业的概念
进程组,会话,作业的概念 进程组是一个或者多个进程的集合; 会话是一个或者多个进程组的集合(一个会话中有一个前台进程组和零到多个后台进程组); 作业就是进程组,所以一个终端可以有多个作业
2017-03-27 22:01:21 610
原创 android从native启动java程序
从native启动/data/local/tmp/myapp.apk文件中com.myapp类的Main方法,
2017-03-27 21:32:35 682
原创 android的消息机制总结2
android怎样在非主线程中实现消息循环 有两种方法: 自己用代码实现:新启动一个Thread,在run方法中调用如下代码即可 ...Looper.prepare();...Looper mLooper=Looper.myLooper(); ...Looper.loop();
2017-03-17 23:05:13 615
原创 android的消息机制总结1
android为什么要使用消息队列模式(Looper,Handler,Message)? 这是一种异步机制,消息发送方不需要等到消息处理完成就可以直接返回. 当消息队列为空时能够阻塞等待,直到有消息时再处理.因为实际使用App时,大多数情况下需要等待用户输入(例如触屏事件).
2017-03-17 21:33:25 545
原创 nuwa总结
nuwa是什么?nuwa是一个开源的android应用热修复方案,通过替换存在bug的类,能够在不重新安装app的情况下,修复app存在的问题.
2017-02-17 15:13:29 2752
原创 Proguard的Keep使用方法
java代码存在互相引用的关系,构成一个网状关系.(个人理解)引用又分为两种:普通引用和字符串引用(例如反射,native方法等).而java代码的执行入口点必然是采用的字符串引用(例如main等方法),因为外部想要执行此代码必须知道一个明确的入口点名字..Proguard流程
2017-01-06 22:55:50 11661
原创 几种Dalvik Hook方案研究
Dalvik Hook的基本原理如上一篇文章所述,每个java方法在虚拟机内部都对应一个Method结构体(可以将JNI的jmethodID强转为指向此Method结构体首地址的指针得到),Dalvik Hook通常通过修改Method结构体内容实现.常见的两种hook思路:
2016-12-17 13:56:05 1846
原创 Dalvik虚拟机java方法执行流程和Method结构体分析
Method结构体是啥? 在Dalvik虚拟机内部,每个Java方法都有一个对应的Method结构体,虚拟机根据此结构体获取方法的所有信息.Method结构体是怎样定义的?
2016-12-14 21:57:35 2013
原创 Java ClassLoader总结
ClassLoader的终极目标是干啥? 将一串二进制数据传递给虚拟机,虚拟机据此构建一个Class对象为啥要有ClassLoader这个东西? 可以更加灵活地控制类加载的过程(比如可以在运行时加载类从而实现程序的热更新) 可以对class文件进行加密 ClassLoader的特点 全盘负责机制和双亲委托模型
2016-11-06 17:51:12 810
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人