安卓系统
文章平均质量分 69
aa787282301
这个作者很懒,什么都没留下…
展开
-
APP 支持asan检查
android-ndk开发工具下有一个asan_device_setup脚本:~/Android/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/bin/asan_device_setup执行了脚本之后app就能支持asan检查了具体原理为:1.app_process被替换为了一个脚本:#!/system/bin/sh-from-zygoteASAN_OPTIONS=start_deac原创 2021-09-10 15:35:23 · 642 阅读 · 0 评论 -
push framework.jar无法开机
之前遇到一个问题push framework.jar后无法开机,最近有同事问了一下,太久了自己都忘了,因此做下记录有些安卓编译时默认会生成oat文件,把所有jar中的dex文件删掉,因为可以节省体积,加快首次开机速度俗称预编译,因为默认吧dex文件删掉了,我们删掉了framework.jar,/system/framework/arm/,/system/framework/oat/重新开机需要重新生成bootclass,因为缺少dex文件就会生成失败,导致无法开机,解决方法,在BoardConfig..原创 2021-09-02 18:29:06 · 1122 阅读 · 0 评论 -
Graphics内存计算
dumpsys meminfo详情dumpsys meminfo surfaceflingerApplications Memory Usage (in Kilobytes):Uptime: 14170420 Realtime: 14170420Pss Private Private SwapPss Heap Heap HeapTotal Dirty Clean Dirty Size Alloc Free------ ------ ------ ------ ------ ----原创 2021-09-01 10:06:21 · 2939 阅读 · 1 评论 -
linux错误代码定义
#define EPERM 1 /* Operation not permitted */#define ENOENT 2 /* No such file or directory */#define ESRCH 3 /* No such process */#define EINTR 4 /* Interrupted system call */#define EIO 5 /* I/O error */#define .原创 2021-08-19 16:27:31 · 830 阅读 · 0 评论 -
hook学习案例
main.c#include <inttypes.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <sys/mman.h>#include <test.h>#define PAGE_START(addr) ((addr) & PAGE_MASK)#define PAGE_END(addr) (PAGE_START(ad原创 2021-07-19 21:58:02 · 197 阅读 · 0 评论 -
hiddenapi无法反射问题
一.摘要 最近在q上遇到一个问题,有同事反应为什么我反射的方法在q上找不到对应的方法了,只获得了一些class.java的方法,这是q上在art中新加的hiddenapi相关的策略做了限制导致的,那么我们来看看是怎么限制的吧二.代码分析1.测试代码:void test() { List list = new ArrayList(); Class mclass = null; try { mclass = Class.forName...原创 2021-07-19 21:54:32 · 2108 阅读 · 1 评论 -
怎么读dumpstate数据
SystemProperties.set("ctl.stop", "dumpstate"); SystemProperties.set("ctl.start", "dumpstate"); new Thread(new Runnable() { @Override public void run() { ...原创 2021-06-07 20:36:30 · 281 阅读 · 0 评论 -
simpleperf
python app_profiler.py -p packagenamepython report_html.py原创 2021-06-06 10:32:08 · 176 阅读 · 0 评论 -
android存储读写测试工具-fio
一.工具下载并编译1.wget http://brick.kernel.dk/snaps/fio-2.2.5.tar.gz2.tar -zxvf fio-2.2.5.tar.gz3.cd fio-2.2.54.因为我们要在android中运行,所以我们需要安装交叉编译工具sudo apt-get install gcc-arm-linux-gnueabihf5.编译代码,指定arm运行平台,编译工具为arm-linux-gnueabihf-gcc,并且需要静态编译/configu原创 2020-10-22 20:44:39 · 4045 阅读 · 2 评论 -
native内存泄漏分析
一.摘要 我们在分析内存泄漏时java内存泄漏我们可以集成LeakCanary来进行监控,出现问题时会打印出泄漏时的引用关系,那么我们native内存泄漏时如何分析呢?native内存泄漏我们可以通过malloc_debug工具来进行监控,详细的介绍请参考:https://android.googlesource.com/platform/bionic/+/master/libc/malloc_debug/README.md二.如何使用 默认情况下高通的手机已经包含了mal...原创 2020-06-08 22:06:02 · 4630 阅读 · 0 评论 -
fd泄漏检测
一.摘要我们在分析fd泄漏问题的时候一般的通用方法是在/proc/pid/fd下不断的ls -al | wc -l统计fd数量,并且查看哪个fd不断的增多,然后再去代码中排查对应的代码,有时候光看fd并不容易找到泄漏的地方。本文章将介绍高通的leakdetect方法。二.leakdetect使用介绍默认情况下手机已经包含了fd泄漏的检测代码,具体路径在:bionic/libc/malloc_debug/,它可以监控:file(1),socket(2),mmap(3)具体原理就不多说了,.原创 2020-06-02 18:05:28 · 2882 阅读 · 0 评论 -
adb tcp工具
平时我们调试有时需要使用到tcp来远程连接手机,每次输入一堆命令实在太麻烦,写了个脚本:#!/usr/bin/env python#coding=utf-8# owner:penzhicaiimport sysimport osimport timeimport platformgetIpCount = 0LINUX = 1WINDOWS = 2def usePlatform(): sysstr = platform.system() if(sysstr =原创 2020-05-13 21:24:39 · 1742 阅读 · 0 评论 -
native 解析死锁方法
一. 概述 我们平时在分析system_server watchdog问题时有时候会遇到一些native层的死锁问题,正常情况下我们是把所有可疑的线程调用栈全部通过symbols找到可以的死锁线程,这个方法比较耗费体力和脑力。这篇文章将会教会你一个更为简便的方法我们通过gdb调试直接打印出对应吃锁的线程。二.通过GDB查看线程锁 我们通过aosp代码找到锁的定义:h...原创 2020-03-06 12:37:00 · 5867 阅读 · 0 评论 -
CL-200A串口通信
一.进入串口模式1.cl-200a关机,开关拨向“O”端2.hold on键弹出3.同时按下SET/CALL/CF,并且开关拨向“I”端,这时候会进入USB模式二.CL-200A通信命令 模式 命令 PC connect 02 30 30 35 34 31 20 20 20 03 31 33 0D 0A Set Hol...原创 2019-12-17 14:11:49 · 2420 阅读 · 14 评论 -
Sensor记录日志导致的亮屏慢问题分析
一. 问题描述1.1 现象 手机解锁卡顿1.2 结论 diag记录数据慢导致系统卡顿二. 问题分析2.1日志分析 在大量的日志中发现Slow Looper的日志,都是DisplayPowerController的DisplayControllerHandler处理消息超时,并且有大量的dvm_lock_sample提示registerListen...原创 2019-12-09 20:44:39 · 5269 阅读 · 0 评论 -
Android.bp条件编译
一.概要 我们修改代码的时候经常会有一些共线的机器,我们只想进指定的机器或者指定的分支,在Android.mk中可以直接使用if来做判断,但是到了Android.bp中就无法在bp文件中使用条件编译了,本文将教会你怎么让bp文件也支持条件编译二.Android.bp介绍http://androidxref.com/9.0.0_r3/xref/frameworks/na...原创 2019-10-30 14:10:41 · 8991 阅读 · 1 评论 -
android稳定性学习路线
一.JAVA crash1.JAVA crash原理2.常见的JAVA crash介绍3.空指针异常分析技巧4.多线程处理异常分析技巧5.主动抛异常分析技巧二.NATIVE crash1.NATIVE crash原理2.常见的NATIVE crash介绍3.空指针异常分析技巧4.多线程处理异常分析技巧5.主动抛异常分析技巧三.WATCHDOG1....原创 2019-10-23 11:00:48 · 336 阅读 · 0 评论 -
注册Sensor后的第一笔数据
一.概要二 .上层三.底层四.常见问题1.注册sensor后为什么有时候不报数据?2.sensor的第一笔数据什么时候上报?五.总结原创 2019-10-17 17:26:38 · 222 阅读 · 0 评论 -
查看kernel调用栈对应的代码行号
我们在分析watchdog问题时经常会遇到D状态的线程,然后它的调用栈如下:"ActivityManager" prio=5 tid=11 Native| group="main" sCount=1 dsCount=0 obj=0x12c567e0 self=0x7f77a35a00| sysTid=2180 nice=-2 cgrp=default sched=0/0 handle=0x7f7c...原创 2018-03-03 16:28:40 · 3291 阅读 · 0 评论 -
android自动亮度-驱动
一.摘要自动亮度中最为重要的环节之一就是光感驱动驱动硬件读取环境光数据并计算lux值。它主要的工作原理就是通过读取环境光中的C/R/G/B通道成份,然后通过通道值的大小计算lux值并且上报数据给framework,framework通过不同的lux值计算当前亮度,然后设置手机亮度值。本文主要介绍光感驱动如果计算lux值的过程。二.代码流程分析先上一个主要流程,我们根据该流程来逐步...原创 2019-06-10 19:12:02 · 2207 阅读 · 2 评论 -
idea使用Allatori混淆java代码
摘要 我们平时开发的java项目大多是生成一个jar包运行,而jar包可以通过jd-gui进行解析,然后看到我们的源代码,如果我们写了大量的代码别人直接通过这样的方式把我们的辛苦成果直接窃取了那是多么难过的事情,因此我们很有必要对jar包做一些混淆代码的操作,让别人无法直接看懂我们的代码。本文将教会你如果把jar包进行混淆一.创建java项目,并运行1.创建并运行工程:点...原创 2019-06-04 16:26:44 · 6540 阅读 · 2 评论 -
idea添加数据库
一.摘要 我们平时在写代码的时候经常会用到数据库,我们需要时常查看我们的数据是不是符合预期的,我们希望有一个图形界面可以直接看到数据,而不需要每次都手动敲指令,这样工作效率会比较低。本文将教会你怎么直接在idea中配置数据库,然后能直接看到我们的数据。二.配置在idea最右侧有一个工具栏,我们点击DataBase按钮,然后会出现如上界面,我们选择添加按钮选择M...原创 2019-06-10 23:47:42 · 6970 阅读 · 0 评论 -
Sensor注册流程
一.概要 我们在android中经常会注册sensor然后监听sensor的数据来做一些特殊的功能,但是之前一直没有关注过整个注册的流程,本文将会告诉你高通855平台中sensor的整个完整的注册流程是什么样子的,先大概总结一下:APP进程创建一个SensorEventQueue,等待接收system_server发送过来的数据system_server进程会保存app端的Se...原创 2019-06-25 19:30:52 · 5766 阅读 · 2 评论 -
sensor数据分发
一.概要 数据分发的流程你就是注册时序的一个逆过程,上一篇文章中说到了注册,android.hardware.sensors@1.0-service进程最后会创建一个data_msg_reader_thread线程在不断的监听数据,当收到数据后,数据会逐步往APP传递,传递的进程是android.hardware.sensors@1.0-service->system_se...原创 2019-06-26 14:07:37 · 2026 阅读 · 0 评论 -
App收集Native Crash案例
由于一直都在做android系统相关的工作,获取native crash日志文件比较方便,只要发生native crash我们直接去/data/tombstones下找就行了,然后找到当天系统的symbols文件,再配合addr2line就可以分析了。因为今天被人问了app 没有权限应该怎么获取native crash堆栈,自己也只是大概知道是通过捕获信号量的方式处理的,并没有能说得很清楚,所以花...原创 2019-06-30 03:36:38 · 1130 阅读 · 0 评论 -
Sensor-sensor日志
一.摘要 在一些传感器异常的问题中我们常常需要看最近的sensor日志,那么我们可以通过dumpsys sensorservice来看最近sensor上报的数据。二.日志的初始化已经记录 我们在SensorService.cpp中有一个std::unordered_map<int, RecentEventLogger*> mRecentEvent;对象,这个对象...原创 2019-07-23 15:12:49 · 1860 阅读 · 0 评论 -
android自动亮度失效问题调查
一. 问题描述1.1 现象 手机自动亮度失效,调节亮度条屏幕闪烁1.2 JIRA 1.3 结论 1.android.hardware.light@2.0-service转换亮度值出问题,导致调节屏幕亮度异常 2.kernel设置的最大亮度值有问题,导致无法调大最大亮度 二. 问题分析2.1 基础学习在分析之前我们得大概知道自动亮度的...原创 2019-02-24 01:36:08 · 3384 阅读 · 0 评论 -
从aboot调用xbl方法
原创 2019-01-31 22:47:24 · 1221 阅读 · 0 评论 -
无限重启-千牛app
一. 问题描述1.1 问题JIRA XXX1.2 现象 手机无限重启,清数据后能开机,恢复数据的时候还是会无限重启.1.3 结论1.无限重启的原因: 由于每次开机AccessibilityManagerService都会去解析每个有辅助功能的app,system_server每次解析到千牛时就会crash,然后陷入无限循环.2.恢复出厂设置后能开机,恢复数据时又无限重启: 恢复出厂设置后千...原创 2018-03-31 19:07:54 · 3062 阅读 · 2 评论 -
bugreport查看问题关键字
重启:Exit zygote;boot_progress_start;FATAL EXCEPTION IN SYSTEM PROCESS;WATCHDOG KILLING SYSTEM PROCESS;traces_SystemServer_WDT;am_watchdog;system_server_watchdog;>>> system_server <<<;...原创 2018-03-03 16:53:45 · 2608 阅读 · 0 评论 -
低存储弹窗黑屏问题分析
原创 2018-03-03 16:45:48 · 220 阅读 · 0 评论 -
没有state设备节点导致fscanf crash
pid: 2065, tid: 3206, name: InputReader >>> system_server <<<signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x58 x0 0000000000000000 x1 0000007f9f87275b x2 0000007...原创 2018-03-03 16:42:31 · 358 阅读 · 0 评论 -
nikel-rcu死锁问题分析
一. 问题描述1.1 问题JIRA XXX1.2 现象 手机卡死1.3 结论 XXX 我们能看到在lowswap_fn方法中先调用了rcu_read_lock方法,然后调用了get_swap_unshared方法,并且在get_swap_unshared方法里边又调用了wait_rcu_gp,由于这时候还没有调用rcu_read_unlock,所以在wait_rcu_gp这里必定会卡死.卡死之...原创 2018-03-03 16:31:17 · 2956 阅读 · 1 评论 -
kernel空指针引起的system_server watchdog问题分析
一. 问题描述1.1 现象 手机kernel启动时狂点屏幕会导致手机卡死重启.1.3 结论 因为surfaceflinger主线程在等中断处理函数执行执行结束,而中断处理函数一直没有执行完,所以导致surfaceflinger的主线程卡住.这时候system_server通过binder跨进程去调用 surfaceflinger中的方法时,由于surfaceflinger卡住了,所以syste...原创 2018-03-03 16:30:24 · 4599 阅读 · 0 评论 -
kernel ramdump分析
一.怎么抓取kernel ramdump1.手机准备到代码的根目录执行python vendor/xiaomi/securebootsigner/Qualcomm/tools/debugpolicy.py然后会自动重启第二步重启之后需要有rootadb rootadb shell "echo 1 > /sys/module/msm_poweroff/parameters...原创 2018-01-07 16:04:04 · 6759 阅读 · 4 评论 -
android-O RescueParty 介绍
一. 概述Android系统在很多情况下都会进入到一种无法自主恢复的状态下:例如无法开机,常驻系统进程无限crash等等,往往在这些情况下手机已经无法正常使用了,像这些情况小白用户往往都不知道怎么修复手机,只能送回售后了。在O上加了一个救援的机制就是来解决这些问题的,这个机制叫:RescueParty。RescueParty的原理大致为:同一个uid的应用发生多次异常,RescueParty会根据...原创 2017-12-10 18:05:07 · 4878 阅读 · 0 评论 -
kill -3dumpStackTraces
最近在看一个watchdog问题,是由于线程D状态引起的,但是没有打印出native/kernel的调用栈,不知道这个线程导致block在哪里了,不太好分析问题,调用栈如下:"Binder:1176_17" prio=5 tid=120 Native | group="main" sCount=1 dsCount=0 obj=0x140c3100 self=0x7f74a52a00 |原创 2017-12-17 18:46:46 · 760 阅读 · 0 评论 -
android关机充电呼吸灯不亮
android关机充电原创 2017-03-11 15:24:35 · 2823 阅读 · 1 评论 -
alarm
自己的alarm学习笔记alarm的主要工作流程分为以下三步:1.APP获取服务2.AlarmService和AlarmManger交互3.Alarm通过广播,或activity,service通知APP1.应用分析:接下来可以写一个安卓测试demo来测试: AlarmManager alarmmanager = (AlarmManager)getSyste原创 2016-10-16 18:45:55 · 305 阅读 · 0 评论 -
由于外勤365执行shell命令,导致binder被占满,最终触发watchdog
后续更新原创 2018-03-31 19:15:31 · 761 阅读 · 0 评论