自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 Android 2038问题

这其实才是2038年问题最重要的影响,因为Android系统是一个很庞大的系统,虽然现如今64位的机器从内核层面上已经没有2038问题,但系统中所使用的一些关键的底层库还是有上古一脉相承下来的代码,很多地方会有一些限制,比如这里的mediaserver。然后还碰到另一个的问题,在使用date命令调整时间到2038年之后重启,机器正常开机进入桌面,但是没有显示状态栏和导航栏,状态栏也没有办法下滑,应用可以点击使用,初步分析是SystemUI挂了,通过logcat发现SystemUI一直在ANR报错。

2024-12-05 10:55:13 989

原创 关于ADB连接在AS打开时频繁中断的问题

路径: Setting->Build->Debugger 勾选Use existing manually managed server。Android Studio和本身的Adb起冲突了,关闭AS的控制选项就可以了。

2024-11-26 16:38:28 179

原创 记一次文件极客安装应用报错问题的分析

很明显是一个空指针异常,报错的com.google.android.packageinstaller是Google GMS包中的一个应用,一般我们遇到这类问题都是找Google负责解决的。OK,此时我们需要弄清楚PackageInstallerActivity中的代码逻辑是咋样的,这个GMS中的应用,我们是没有源代码的,但是可以反编译啊!OK,对比了上面我们反编译完之后的代码,就立马发现问题所在了,出问题的应用源码里竟然缺少了判空代码!反编译可以看看这篇文章,讲的非常好,这里我不多赘述了。

2024-04-22 10:13:48 783

原创 JNI技术简单介绍

JNI是Java Native Interface的缩写,中文译为“Java本地接口”。Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。Native程序中的函数可以调用Java层的函数,也就是说在C/C++程序中可以调用Java的函数。也就是Java与C/C++代码互相调用在平台无关的Java中,为什么要创建一个与Native相关的JNI技术呢?这岂不是破坏了Java的平台无关特性吗?

2024-04-22 10:02:33 1632 3

原创 Android Overlay 机制解析

android Overlay

2024-04-09 19:29:37 5188 3

原创 Android 移除弹窗方案

此时客户又追加需求,在他的用户协议页面长按文字时会弹出一个拷贝分享的弹窗,他也不想要这个功能,而他的用户协议使用chromium-WebView界面显示的,然后客户应用包名又必须加白名单里,上面的setForceShow这个他们又嫌麻烦,系统这边很难进行修改,咱又没有客户源码,有咱也不敢改啊。Dialog 都是弹出性提示,弹一个窗口,像长按电源键关机重启选项,音量大小调节弹窗啊,低电电量提示都是用的这个控件,其中客户要求有些系统的提示还是需要保留的。Toast 系统和应用基本都会用到的,没什么好介绍的。

2023-04-28 20:12:34 7153

原创 Input中ANR的触发逻辑

事件分发后,将事件从connection->outboundQueue移除,添加到connection->waitQueue中,调用mAnrTracker.insert把对应timeout和记录app信息的token添加进去,这个timeout一般为5000ms,也就是输入事件无响应的超时。我们回到分发开始的函数dispatchOnce,通过注释我们知道processAnrsLocked方法是进行ANR相关处理的,我们接着往下看。不去关心无关代码,只看事件发送之后的处理。

2023-04-17 20:46:46 279

原创 Android 导航栏虚拟按键

当我们addToDispatchers一个HOME View的时候,通过v.getId正好匹配到R.id.home,获取这个new ButtonDispatcher(R.id.home)),并调用它的addView方法,在方法中KeyButtonView正好 extends ImageView implements ButtonInterface,setImageDrawable其实就是调用的ImageView的setImageDrawable方法设置图片。是如何实现与物理按键相同的功能的呢?

2023-04-17 20:45:57 2222 1

原创 Input机制之-Debug调试方法

通过这个可以确定InputReader是否正常的读取事件,若这边没有相关数据,就需要查看InputReader的逻辑了,若只是某一个特定功能按键有问题,可能是EventHub对特定/dev/input/的读取有问题或者驱动键值表文件配置问题导致事件无法正常转换,前者可以通过DEBUG_RAW_EVENTS配置宏打印LOG,后者可以导出手机中相应的/system/usr/keylayout/xxxx.kl和/system/usr/keychars/xxxx.kcm键值配置文件分析是否是转换错误。

2023-04-16 21:08:10 363

原创 Input机制之-APP侧内部分发

InputStage将输入事件的处理分成若干个阶段(Stage), 如果当前有输入法窗口,则事件处理从 NativePreIme 开始,否则从EarlyPostIme 开始,事件依次经过每个Stage,如果该事件没有被标识为 “Finished”, 该Stage就会处理它,然后返回处理结果Forward 或 Finish,Forward 运行下一个Stage继续处理,而Finished事件将会简单的Forward到下一级,直到最后一级 SyntheticInputStage。Activity的UI结构。

2023-04-16 21:06:53 166

原创 Input机制之-InputChannel建立连接

这里将InputChanel封装成Connection对象,然后socket fd作为key,Connection作为Value,保存在mConnectionsByFd中,同时把fd加入到mLooper的监听中,并指定当该fd有内容可读时,Looper就会调用handleReceiveCallback函数。主要就是调用WMS的addView,调用WindowState的openInputChannel,这里的outInputChannel就是上面新建的空InputChannel对象。

2023-04-16 21:04:10 699

原创 InputDispatcher分发事件

InputDispatcher是运行在system_process上,而APP是运行在各自APP的进程上的,通信的桥梁就是InputChannel,内部保存两个socket,server_socket和client_socket,这里通过send函数往socket的server端写入InputMessage对象,应用程序正睡眠在client端的fd上,此时client端就会收到该InputMessage,client被唤醒后会进行按键事件的分发。但大致逻辑是一样的,这里我们看Key的处理流程。

2023-04-16 21:00:02 244

原创 input命令逻辑分析

input命令代码实现在frameworks/base/cmds/input/src/com/android/commands/input/Input.java。根据不同的命令参数分发给不同的InputCmd处理,实际是调用到InputManager单例对象中。后续和一般按键事件一样走正常的Input逻辑,待dispatchOnce调起分发流程。adb shell input 命令可以模拟用户点击,比如Power键,如何实现的。如此就能将相应生成的事件传递到native层中,继续分发处理。

2023-04-16 20:58:46 168

原创 InputDispatcher拦截逻辑

这里经过一系列的调用,wmAction的返回值其实就是PhoneWindowManager.interceptKeyBeforeQueueing的返回值,interceptKeyBeforeQueueing方法就是系统对一些按键事件进行处理的逻辑实现,而此方法逻辑中对Pweor按键是有特殊处理的,会返回一个~ACTION_PASS_TO_USER的Flag,系统中大部分需要系统进行处理的按键事件都在这里进行处理。这个方法中,会根据返回值给entry->interceptKeyResult变量赋值。

2023-04-16 20:57:50 581

原创 InputReader

InputDevice对象是和底层的节点相对应的,用于描述底层输入设备的相关信息,每个Device对象在生成时,内部都会保存一些InputMapper对象用于处理各自设备节点的输入事件,不同的InputMapper都有各自处理事件的逻辑,比如处理键盘事件的KeyboardInputMapper,处理触摸事件的MultiTouchInputMapper。对于一般输入事件,调用processEventsForDeviceLocked方法处理,就是调用这些InputDevice去处理原始事件数据的。

2023-04-16 20:56:05 219

原创 input中的inotify & epoll机制

这是因为Android 系统是建立在Linux内核基础上的,但如果Linux内核中 输入事件的定义值发生了变化,android系统也要跟着改,而这样就很被动,因此android系统采用了配置文件*.kl 和*.kcm,这样如果Linux有变动,Android侧只要修改对应配置文件就可以了。然后根据扫描情况对节点添加监听,之后调用,他会进入while,等待read读取节点返回的原始输入事件,保存到RawEvent中,而新增设备和移除设备的动作也是通过RawEvent上报给InputReader的。

2023-04-16 20:54:30 428

原创 dumpsys input 命令

dumpsys input

2023-04-16 20:52:16 1218

原创 Input初始化

input初始化

2023-04-16 20:50:23 209

原创 Android 呼吸灯控制逻辑

呼吸灯控制逻辑

2023-04-09 19:21:09 1673

原创 Android 存储空间不足检测逻辑

Android存储空间不足的检测逻辑

2023-04-09 19:20:00 2672 4

原创 Android SWT机制

watchdog 机制解析

2023-04-09 19:19:55 682

原创 Android RescueParty 机制

android 系统进程或内置应用频繁崩溃,无法开机进入recovery模式

2023-04-09 19:17:31 2015

原创 lmkd源码解析

lmkd

2023-04-09 19:15:01 998

原创 使用keytool-importkeypair生成签名

使用keytool -list -v -keystore debug.keystore可以查看签名信息。使用如下指令生成对应的。

2023-04-09 19:07:40 526

原创 使用aapt和keytool获取apk信息

aapt keytool

2023-04-09 19:05:38 301

原创 Android vold mount sdcard导致的冻屏问题

解决受损sdcard导致的冻屏问题

2023-04-09 18:56:24 1418

原创 Android hibernation 导致的冻屏问题分析

虽然问题解决了,但是客户非常好奇为什么同样的机器,不同的运营商复现概率差别如此大,其他两家运营商基本没有上报这个问题,这还需进一步调查。

2023-04-08 22:48:39 1297 1

原创 2020-08-20

Android Overlay 机制研究因工作需求,稍微研究了一下Overlay的一些机制,记录一下Android的Overlay主要作用是在不改变系统源码的前提下为不同的客户做定制化需求主要方式有两种静态Overlay也叫编译时Overlay,在编译aapt打包的时候直接用定制化配置文件替换原有文件即可,因为是替换,原有的配置文件是不会打包的,所以原先文件中有的配置项,新文件中也必须有,值可以不一样,最后会打成一个应用包一般在系统源码中使用这种方式PRODUCT_PACKAGE_OVERLAY

2020-08-20 21:05:19 277

原创 2020-08-20

aapt dump命令aapt (Android Asset Packaging Tool),Android资源打包工具,也可以用来查看apk中的一些字段信息主要使用aapt dump命令,这里记录一下aapt d[ump] [–values] [–include-meta-data] WHAT file.{apk} [asset [asset …]]commandusestringsPrint the contents of the resource table string

2020-08-20 20:11:07 231

原创 内存泄漏的一些基本概念

垃圾回收:和java一样,android也是基于垃圾回收(GC)机制实现内存的自动回收的,目前最基本的垃圾回收算法有四种:标记–清除算法、标记–压缩算法、复制算法以及引用计数算法。现在流行的垃圾回收算法都是基于这其中的几个算法组合而成的,在android虚拟机中,无论是Dalvik还是Art,都是基于标记–清除算法进行垃圾回收的内存泄漏:在android中,内存泄漏是指不再使用的对象依然...

2020-04-09 16:11:37 183

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除