- 博客(41)
- 资源 (8)
- 问答 (2)
- 收藏
- 关注

原创 FMQ学习
FMQ 的简单介绍 android中进行通信方式, 大体有以下几种: 1. 最主要binder hwbinder 数据过内核, 最多能承受20ms级别的通信, 更高级别通信,对于binder 压力太大,在820A 上 20 ms 左右的通信, 单单通信耗费cpu 2~3%2. socket 数据要经过socket 双端的buf, A–>socket send buf----> socket read buf —>B 效率不高, 且依赖双端对socket的实现3. 共
2020-07-20 16:38:48
5849
原创 android 异常处理流程
异常处理有两种情况线程内异常捕获处理Signal Catcher 的处理流程线程内异常无法处理的情况线程内异常捕获处理异常信号的注册异常信号的注册 是发生在 zygote进程启动创建art虚拟机时:app_main.cppint main(int argc, char* const argv[]){AppRuntime runtime(argv[0], computeArgBlockSize(argc, argv)); runtime.start(....);}AndroidR
2021-03-23 18:37:54
692
原创 jni在libandroid_runtime.so 引出的诡异问题
背景:在libandroid_runtime.so添加了一个jni 方法, 在底层消息过来时, 此jni方法会回调java 的callback 方法,将数据吐给java.问题: jni回调到java, 但没有执行java的相关代码, 然后线程跳到JN继续执行, log中也没有线程的相关异常, 各个线程也正常运行着, 但相关代码就是没有执行代码:code for jnistatic void android_os_nng_startListener(JNIEnv* env, jclass c
2021-03-22 18:20:08
2227
原创 jni深入理解
jni的初始化zygote 启动时:app_main.cppruntime.start(“com.android.internal.os.ZygoteInit”, args, zygote);AndroidRuntime.cp JniInvocation jni_invocation; jni_invocation.Init(NULL); JNIEnv* env; if (startVm(&mJavaVM, &env, zygote) != 0) { r
2020-08-21 09:47:08
705
原创 Hal 文件的编译
hal 文件的作用hal文件用来定义hal层, 对外通信的接口 和 通信数据的格式处理 hal文件的工具out/host/linux-x86/bin/hidl-gen 命令会将 hal文件转换为相应的文件, 例:usage: out/host/linux-x86/bin/hidl-gen [-p <root path>] -o <output path> -L <language> (-r <interface root>)+ [-t] fqnam
2020-07-28 15:48:33
2506
原创 xposed的实现
一、xposed 的使用:hook一个方法,需要首先实现一个XC_MethodHook 用于,定义调用 方法之前与之后执行的操作。找到要hook的类,然后调用hookAllMethods 去hook 对应方法,代码为: XC_MethodHook callback = new XC_MethodHook() { //调用原方法之前调用 @Override protected void beforeHookedMethod(MethodHo
2020-07-22 17:59:20
1222
原创 xposed 框架创建以及初始化
一、xposed 的实现在art 虚拟机上,xposed的实现,依赖的是: app_proces: 在开机是选者是否启动 xposed 的流程,初始化xposed等 libxposed_art.so && libart.so: 替代系统的libart.so库 XposedBridge.jar: xposed 的java 层实现。二、 启动xposed 框架:app_process 文件夹有有两个入口文件:Android.mk 会在编
2020-07-22 16:38:28
741
原创 getSystemService流程
文章目录getSystemService调用栈:mBase 的赋值:通过构造函数赋值通过attachBaseContext赋值getSystemService调用栈:Activity—>ContextThemeWrapper—>ContextWrapper@Overridepublic Object getSystemService(String name) { retur...
2020-05-13 15:51:15
735
2
原创 hidl
framework—> Vendor Interface —> halVendor Interface:`Android O` 新增加的一个机制,用于将`framework` 与 `hal` 分开,便于在系统升级时,`OEM` 厂商 跳过`SoC` 厂商,先对`framework`进行升级。例如:8.0 之前: framework 与 hal 是紧耦合...
2018-03-05 18:08:00
4107
4
原创 A|B升级框架
A|B升级A|B 升级主要包含了3个部分:boot_control 服务主要用于提供修改 A|B 系统分区状态的相关接口。UpdateEngine 服务 主要用于后台更新 A|B 系统,并通过通过boot_control去修改 当时的分区状态。java 层的 UpdateEngine 类,用于向apk 暴露接口A|B 升级的大概流程为: 当需要进行OTA 升...
2018-02-09 17:57:59
2621
原创 稳定性问题总结
稳定性问题比较杂,且很多是概率性问题,没有统一处理方式,需要针对具体的问题,具体分析, 必现的问题较易解决,针对当前代码添加各种调试log,一步步debug去定位,过程虽然可能慢点,但一般都会解决。 但针对偶发性的概率问题,则较为麻烦,依赖于大量的测试复现,然后统计 分析当前抓取到的 events、system 等log中,找到复现的步骤,然后去定位。 且针对与这种概
2018-01-30 11:34:04
7462
原创 浅探热修复技术
热修复是一个为了即时解决紧急bug的技术,从传统的开发流程看,如果要解决一个应用中的bug,流程为: 重新发布版本 ——> 用户下载安装 —–> bug 修复 此流程 存在 bug修复的不及时、且用户下载安装成本较高 等缺陷。而如果使用热更新技术,修复一个bug 的流程 为: 检测服务端是否存在 patch —存在—>下载 patch 到本地 |
2017-10-08 17:21:59
461
原创 后台服务,注入input事件
service 的启动界面 @Override public IBinder onBind(final Intent intent) { Log.i("service onBind"); return new IMyAidlInterface.Stub() { @Overrid public void te
2017-07-14 17:18:39
835
原创 从字节码角度理解一些java 问题
1、非静态内部类对象持有外部的引用:public class ExternalClass{ class InsideClass{ }}javac 会编译出两个ExternalClass$InsideClass.class 与ExternalClass.class 使用javap -c 查看这两个文件:Compiled from "Externa
2017-06-27 16:11:42
363
原创 javap 与字节码指令
1、binder 对端打印 完成 2、java进程实时输出 待完成 3、native反射调用java代码, 有异常时,需要输出native 堆栈 待完成 4、后台进程智能管理(binder 通信检测、连杀、后台管理) 完成 1/4 5、后台log 日志系统 6、jdb 的封装改进
2017-06-20 18:36:05
1529
原创 System_server 与/dev/socket/zygote
system_server除了在刚创建的时候通过/dev/socket/zygote
2017-06-05 18:07:44
1790
原创 Zygote 与/dev/socket/zygote
1、zygote socket 的创建apk的启动是ams 通过socket 与zygote 通信,然后由zygote fork出来一个进程,来加载运行apk的。ams 与zygote 通信的socket 是在系统启动时,由init.zygote*.rc 中指定创建的:service zygote /system/bin/app_process -Xzygote /system/bin –zygo
2017-06-05 16:59:32
1830
1
原创 systemimage 太大导致的编译失败
针对此种异常可以做以下操作: 1、可以删除out目录下一些,多余的预置apk out/target/product/system/priv-app/** 之后调用make snod 直接进行打包2、修改device 下对应工程内的BoardConfigCommon.mk 文件,扩大system.img的限制 此类device/product/BoardConfigCommon.mk 文件中
2017-05-31 15:05:33
1667
原创 范型&&诡异异常
Looper 中是使用一个ThreadLocal 来存储 当前线程的 looper的, static final ThreadLocal sThreadLocal = new ThreadLocal(); 在prepare 方法中,对此 ThreadLocal 方法赋值:private static void prepare(boolean quitAllowed) { if (sTh
2017-05-17 11:44:11
382
原创 java 与native 互锁,造成的watchdog
一、发生watchdog有两种情况:1、system_server 特定进程特别繁忙,导致 watchdog ,无法向system_server 的特定线程post检测任务,导致的watchdog 超时,只有在system_server 特别繁忙(类似陷入死循环),在长达1分钟的时间内,handler 无法处理新到来的一个任务的情况下才会发生此情况,比较少见2、死锁, 之前处理的watchdog 大
2017-05-15 15:01:22
1855
1
原创 vim 配置
Vundle.vim 用于管理插件,安装配置为:git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 修改.vimrc调用:vim +PluginInstall +qall 命令 参考:https://github.com/VundleVim/Vundle.VimYouCompleteMe
2017-05-04 10:12:08
543
原创 oat文件的 backtrace 定位
backtrace 为: #00 pc 00000000026c0024 /data/dalvik-cache/arm64/system@framework@boot.oat (offset 0x26c0000) #01 pc 00000000026e9d38 /data/dalvik-cache/arm64/system@framework@boot.oat (offset
2017-04-26 10:54:51
4459
原创 记一次简单异常------系统升级后信息概率报错
现象: 本地升级update升级后,提示信息停止运行堆栈: 04-14 06:42:17.747 2854 3279 E AndroidRuntime: FATAL EXCEPTION: TransactionService 04-14 06:42:17.747 2854 3279 E AndroidRuntime: Process: com.android.mms, PID: 2854 0
2017-04-20 11:29:52
1302
原创 superuser root 原理详细分析
Root 方法: 通过fastboot 刷入指定的recovery.img, 替换了系统原生的recovery, 进入recovery,刷入root相关文件,以达到root目的。目前市面常见的 root 管理工具为: supersu、superuser、kingroot 等,因为 supersu、 kingroot 不开源, 逆向分析其底层实现 较为困难,所以本次是以 开源
2017-04-13 10:34:12
23093
原创 logd 删除log
进程Log过多,超过上限,导致log被删除,类似:chatty : uid=1000(system) MountService expire 168 lineslogd 删除log的判断依据为: 查看代码,logd 的判断是否删除的依据为: void LogBuffer::maybePrune(log_id_t id) {
2017-03-15 17:22:40
2666
原创 watchdog ,hang_detect分析
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2017-03-14 11:26:14
3959
1
原创 双微信,分享发生TransactionTooLargeException 异常,记录
前提条件:1. 开启双应用(设置-》双应用)2. 安装微信。复现步骤:1. 用相机拍一张6M左右的照片并保存到手机。2. 进入图库,打开这张6M左右的照片后选择分享-》朋友。实际结果:2. 界面闪一下后,无法弹出微信账号选择界面。期望结果:2. 能够成功弹出微信账号(主号,小号)选择界面。备注:1. 5M以内的照片分享时能够成功弹出微信账号(主号,小号)
2017-03-06 14:45:51
2167
原创 system_server socket 泄露
system_server 报oom02-13 21:19:00.236 1122 1138 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: ActivityManager02-13 21:19:00.236 1122 1138 E AndroidRuntime: java.lang.OutOfMemoryError:
2017-03-06 13:50:49
1992
原创 今日头条,清理分析
操作步骤:1.开启管家锁屏自动清理2.打开手机一些APP实际结果:锁屏几分钟后有部分应用未清理(例如今日头条APP,这两个必现)期待结果:锁屏几分钟后应正常清理后台应用复现率:必现今日头条:6.0.2apk不被清理,一般情况下,有两种情况:1、APK 在保护名单中2、APK 在灭屏时处于前台查看log:开始清理后台进程。02-09
2017-03-06 12:18:14
3320
原创 xposed 的编译
XposedTools: 编译xposed的相关脚本,与工具。xposedbridge: xposed 框架的java层,XposedInstaller: xposed 框架的独立apk,用于管理基于xposed的相关插件Xposed : 修改之后的app_process,用于替代系统的 app_processandroid_art: 对art_methods 进行改造后的ar
2017-02-27 12:32:56
6494
转载 如何快速分析fd leaks, 文件句柄泄露.
转发:http://bbs.16rd.com/thread-26768-1-1.html如何快速分析fd leaks, 文件句柄泄露.[Keyword]FD leaks, File Description Leaks, Too many open files, error 24[Solution]android 默认每一个进程最多能够打开的文件数量为1024,
2017-02-20 13:59:41
14120
原创 Android 字体引起的简单问题
问题:手机更改设置完字体后,关机界面与crash 弹窗,仍是默认字体,launcher 、systemui、apk 却正常。手机更改默认字体的 方案为(非原生):在 android.graphics.Typeface类的create方法中,进行判断,如果设置了字体那么就返回 设置的字体(REPLACE_TYPEFACE),如果没有设置字体那么就返回默认字体。设置字体,会调用
2017-02-13 18:40:06
688
原创 Watchdog 源码分析
/** Copyright (C) 2014 MediaTek Inc.* Modification based on code covered by the mentioned copyright* and/or permission notice(s).*//* * Copyright (C) 2008 The Android Open Source Project * * L
2017-02-07 09:48:29
2142
1
原创 logservice
android 工具, 在/mnt/sdcard/log 目录下,循环记录kernel,aplog,event 一定大小的 log信息:aplog为:总共为16*16个, 每一个log文件为1M,每满16个log文件,打包成tar 压缩包,压缩包,满足16个后,删除最老的压缩包,添加压缩生成新的压缩包一个压缩包大小1.6M,kernel : 同上evetn: 一个log 大小为
2017-01-05 18:07:40
2024
原创 jni 打印堆栈方法
一、jni 打印java 层堆栈。 jclass throwable_class = env->FindClass("java/lang/Throwable"); jmethodID throwable_init = env->GetMethodID(throwable_class, "", "(Ljava/lang/String;)V"); jobject throwable_obj
2016-10-18 15:55:02
2014
原创 加壳应用反编译
使用gcore dump出apk 的内存,在从内存中扣出来dex文件,此方法只针对于简单的加壳应用生效。使用gdb dump出来内存的方法有两种:1、使用正常gdbserver 与gdb 的方法去dump内存正常 gdbserver 与gdb的用法在手机端: gdbserver :6000 --attach pid在电脑端:adb forward tcp:6
2016-09-25 13:47:29
3267
原创 交叉编译 android 版本的gdb
交叉编译gdb,在网上已经烂大街,但资料都比较散,在此总结一下我在编译期间遇到的所有问题:NDK版本:android-ndk-r12bgdb 版本:http://ftp.gnu.org/gnu/gdb/gdb-7.11.tar.xz系统版本:ubuntu 16.04 14.04一、搭建环境:1、下载NDK,生成交叉编译工具链$NDK/build/tools/
2016-09-25 13:47:23
7183
1
原创 android coredump 调试
coredump 可以用来调试android native 进程的异常1、coredump 在android中打开 设置coredump 大小 ulimit -c unlimited //不限制coredump 大小,也可以设置为具体值2、设置coredump 文件名称,与路径 echo "1" > /proc/sys/ker
2016-04-04 21:00:59
3275
原创 jdb 调试android 简介
jdb 包含在jdk,使用jdb 之前需要先配置jdk的环境变量。jdb 常用于三方apk 无源码动态调试,与其配合的工具为 baksmali、apkanalyser,通过apkanalyser打印堆栈,理清楚正常情况下的代码流程。使用baksmali,获取 相关 的方法名,变量名,使用jdb 动态调试,获取这些值。jdb调试流程为:1、打开ddms 获取需要调试进程的端口
2016-04-01 22:30:32
6353
1
android 中隐式绑定服务的顺序
2014-05-17
android 每一个应用的主线程的hashcode()为何是一样的?
2014-05-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人