- 博客(43)
- 收藏
- 关注
原创 framework调用getUsers方法权限问题----clearCallingIdentity
通常,我们可以使用Binder.clearCallingIdentity()来清除当前线程的调用标识符,能够让线程在调用过程中失去原有的权限身份,进而绕过一些权限的检查。在调用getUsers()方法前调用Binder.clearCallingIdentity(),之后再调用Binder.restoreCallingIdentity恢复线程身份就可以正常添加账号了。起因是做了一个功能:在启动activity时,需要获取除主用户之外的一个用户,如果是处于主用户之外的模式下,则跳过某些界面的启动。
2025-03-13 10:53:41
362
原创 InputDispatcher调试日志开关
需要注意的是,"adb shell setprop log.tag.InputDispatcherOutboundEvent DEBUG" (requires restart)命令后面的requires restart表示需要重启进程(不是重启设备,重启之后设置的这些值会失效)。我们平时分析logcat日志时几乎没有InputDispatcher相关的日志,如果遇到事件分发相关的问题,就很难定位问题的原因。实际上是通过设置日志等级来打开对应的log的,其他模块,依次类推。
2024-12-25 14:45:46
306
原创 Activity的finish()流程
在Android中,我们可以通过调用finish()方法来结束一个Activity,调用这个方法后,Activity对应的生命周期方法会被调用、所在的Task也会发生变化。本文主要通过分析Activity的finish流程来了解Activity的结束时生命周期及Task变化,代码基于Android 14。
2024-12-12 19:48:37
1318
原创 Android 配置默认输入法
PS:如果无法确认enabled_input_methods 和def_input_method的值的话,可以在设置里手动将内置的输入法apk设置成默认输入法,然后通过adb shell 命令查看当前默认输入法的对应值。设置默认输入法需要配置Settings.Secure.ENABLED_INPUT_METHODS和Settings.Secure.DEFAULT_INPUT_METHOD的值。adb shell ime list -a可以查看已安装的输入法apk的属性。,本文主要记录下如何配置默认输入法。
2024-11-12 15:09:33
858
原创 查看hprof文件
这里就是对包名为com.example.myapplication在/data/local/tmp/目录下生成了一个demo.hprof的文件。hprof可以用来分析某个进程的内存情况,对我们分析内存泄漏问题有很大帮助,本文主要记录如何生成及查看hprof文件。打开Profiler之后,点击+号,选择Load from file...,打开对应的hprof文件。然后在Android Studio中使用Profiler打开demo.hprof文件。(2)直接点击profiler图标打开。
2024-09-05 19:59:49
2682
原创 input系统之InputDispatcher
InputReader和InputDispatcher是Input系统的重要组成部分,InputReader主要负责从设备节点获取原始输入事件,并将封装好的事件交给InputDispatcher;InputDispatcher主要负责将输入事件分发到对应的窗口,本文主要分析InputDispatcher是如何对事件进行分发的,代码基于Android 14。
2024-09-04 17:35:55
884
原创 Android Init Language
Android Init Language 安卓初始化语言,是一种用于配置和管理 Android 系统服务的专用脚本语言。主要用于编写 .rc 文件(比如我们熟知的init.rc文件),这些文件在系统启动时由进程读取和执行,从而设置和启动系统服务、管理权限、定义设备节点等。
2024-08-26 17:36:19
1491
原创 input系统之InputReader
可以看出InputReader处理事件的流程为:(1)调用EventHub的getEvents方法获取输入事件(2)调用processEventsLocked()方法处理获取到的输入事件(3)调用flush()方法将已经封装好的EventEntry事件交给给InputDispatcher分发。
2024-08-14 17:30:11
1039
原创 Input系统之IMS的启动流程
InputManagerService(下面简称IMS)在输入事件的获取和分发中,起着重要的作用。它是Android系统中的一个关键服务,主要有以下几个功能:1、输入事件处理:从各种输入设备(如触摸屏、键盘、鼠标等)接收输入事件。然后对接收到的输入事件进行处理,包括事件的转换、标准化等。2、输入事件分发:将处理后的输入事件分发给适当的应用程序或窗口。确保事件能够传递到当前焦点窗口或应用程序。3、输入设备管理:管理系统中的输入设备,包括设备的初始化、状态监控和驱动接口。
2024-08-14 17:24:38
1284
原创 Android .kl按键布局文件
一个硬件按键的处理流程大致为:当用户按下或释放一个键时,键盘硬件会生成一个扫描码scan code,然后操作系统读取这个scan code,并将scan code扫描码映射到虚拟键码key code,最后操作系统根据映射的keycode生成输入事件,并将这些事件传递给应用程序或系统服务,进而执行相应的操作。scan code和key code通过Key layout file 映射,Key layout file一般用于定义物理键盘上各个键的功能和映射关系。
2024-08-09 16:49:46
1253
原创 Android Studio导入源码
一般情况下,源码里很多目录我们都用不到,可以通过配置iml文件来有选择的导入某些目录。在源码的根目录下会生成android.ipr和android.iml文件。使用AS打开android.ipr文件,就能成功导入源码了。excludeFolder:表示不包含的文件目录。sourceFolder:表示包含的文件目录。1.生成导入AS所需的配置文件。3.打开android.ipr。最后一步执行完后会有。
2024-07-25 11:10:08
905
原创 JNI基础
JNI全称Java Native Interface,是Java和C/C++之间通信的接口,它允许Java应用程序调用和被native代码调用。JNI提供了一种机制,使得Java应用程序可以与使用其他编程语言编写的native库进行交互。通过JNI,Java应用程序可以调用使用C、C++、Objective-C等编程语言编写的native库中的函数。这对于需要访问底层系统资源、使用特定硬件功能或利用其他语言实现的库的Java应用程序非常有用。
2024-07-24 19:47:22
759
原创 cts问题
环境配置主要是adb和aapt,确保这两个正常使用,上面图片中问题原因就是aapt版本不是最新的,需要使用最新的aapt。(1)usb调试需要打开,需要使用user版本测试(部分功能可以使用usedebug版本)。下载对应android版本的测试包,解压后使用。可以使用which aapt查看当前aapt。,可通过浏览器查看测试结果,log放在。(3)语言设置为English。(2)关闭屏保和休眠。5.出现aapt异常。
2024-07-11 14:56:52
222
原创 GSI问题
可以运行run cts-on-gsi -m CtsLibcoreTestCases来测试是否有fail项,也可以通过run cts-on-gsi -m CtsLibcoreTestCases -t libcore.java.text.DateFormatTest#testParse_lenient_en命令来运行某一条case。run cts-on-gsi -m CtsLibcoreTestCases有两条fail项。下载GSI之后,里面会有system.img,需要把这个img刷入设备。
2024-07-11 14:49:53
496
原创 遥控器Tab键切换时按键音流程
2.调用mView.dispatchKeyEvent()方法将event事件传递给mView(Activity的顶层DecordView对象)处理,如果view层级结构中任何一个view处理了该事件,返回FINISH_HANDLED表示该事件已被处理。主要流程:首先计算焦点转换的方向,然后在控件树中找到当前获取焦点的view,根据当前获取焦点的view,在direction方向上找到下一个获取焦点的view,最后移除旧焦点,建立新焦点,并播放按键音。首先看下该方法的调用堆栈。5.Tab键和快捷键的处理。
2024-07-11 14:43:49
420
原创 Android enforce_permissions_exceptions问题
先检查Enforce_permissions是否为true,如果为true,再检查aidl文件是否在ignoredAidlPermissionList列表里,如果不在列表里,那么添加"-Wmissing-permission-annotation -Werror" flag,后续检查的时候,如果不满足权限要求,就会报错。里面添加了很多原生framework的aidl文件豁免白名单,把我们自己的aidl文件添加进去就可以了。
2024-05-11 10:47:51
557
1
原创 ubuntu下使用反编译工具jadx
将下载的zip文件解压, 进入到jadx-1.5.0/bin目录,主要使用的就是jadx和jadx-gui这两个工具(如果是win环境,直接双击jadx.bat和jadx-gui.bat文件)jadx可以反编译出资源文件、原始java文件、AndroidManifest文件等。ubuntu环境下载这两个zip文件都可以,.(2)使用jadx反编译apk文件。(1)获取jadx工具包。
2024-05-09 09:31:43
1740
1
原创 Android STS 问题分析
可以看出,分析STS问题的重中之重就是找到对应的Security Patch,确认对应的Patch是否合入并生效,下面主要分析如何找到对应的Security Patch。这种类型的fail项一般显示为:android.security.sts.CVE_2022_20124#testPocCVE_2022_20124。找到对应的Security Patch之后,确认Patch是否合入并生效,这就是STS一般的处理流程。(1)检查对应的Security Patch是否合入,没有合入则合入对应的Patch。
2024-04-02 11:27:39
717
原创 Android Framework Overlay
product/overlay/framework-res__auto_generated_rro_product.apk(如果是PRODUCT_PACKAGE_OVERLAYS方式引用)vendor/overlay/framework-res__auto_generated_rro_vendor.apk(如果是DEVICE_PACKAGE_OVERLAYS方式引用)在.mk文件中搜索PRODUCT_PACKAGE_OVERLAYS或者DEVICE_PACKAGE_OVERLAYS关键字。
2024-03-26 18:28:22
702
原创 解决Android U上应用无法安装问题
最近在做Android U的升级项目,有一款跑分软件A1 SD Bench在U以前的平台可以安装,但是在U上无法安装,显示:This app isn\'t compatible with your TV.方案一、修改应用的targetSdkVersion>23。
2024-03-25 09:59:56
5080
原创 Android 引用共享库的方式
所有的android软件包(如android.app,android.content,android.view和android.widget)都在默认库中,所有应用程序都会自动链接。但是,某些新增的jar包位于不自动链接的单独库中,应用程序不会自动链接,下面主要分别介绍应用程序和jar包引用共享库的方式。dependency对应的就是共享库Test.jar,这样就成功为jar包链接共享库了。这种就是一个jar包引用另外一个共享库jar。com.xxx.xxx表示共享库的名称。2.jar包链接共享库。
2024-03-22 17:40:32
488
原创 AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of:xxx问题分析(源码环境)
该元素告诉系统将库的代码包含在包的类加载器中。在这个路径下查找java 库中对应的类是否存在,如果不存在,那么说明你需要的类没有编译出来,需要进一步确认类为什么没有编译出来,是路径错误或者是拼写原因,或者时引用时的注释问题。这种会把后面的一起注释掉,所以这种添加多个jar包时尽量不要注释,直接删掉,或者将需要的jar包挪到最上面,避免因注释而导致下面的jar包无法被添加。这种方式引用的java库在编译时可以找到,但并不打包到本模块,在运行时需要从别的地方查找,所以一般会生成一个单独的jar包。
2024-03-22 17:15:42
1585
原创 ProtoLog动态日志
ProtoLog是从Android R开始引入的日志框架,使用此框架,我们可以对指定类别的日志进行动态的开启或暂停。目前,主要是wm相关的动态日志。可以看到当使用命令开始收集日志,操作设备后,停止收集,会在/data/misc/wmtrace/目录下生成一个wm_log.pb文件,使用enable命令启用proto log时,还需要通过start命令将log输出到wm_log.pd文件中。在设备中的/system/etc/目录下有个protolog.conf.json.gz文件。
2023-11-22 15:19:56
953
原创 requestFocus无法获取焦点
调用此方法可以将焦点集中到特定view或其子view之一。可以看到,如果我们只通过调用requestFocus()方法去获取焦点,那么如果当前处于touch mode,并且view没有设置foucusableInTouchMode="true"属性则无法获取焦点。问题描述:插入鼠标后,滑动鼠标,然后调出系统的关机菜单,菜单无法获取焦点,即使使关机菜单的view主动调用requestFocus方法,仍然无法获取到焦点。1.代码中主动调用view.requestFocusFromTouch()方法。
2023-11-17 10:14:46
660
1
原创 Context
我们在实际开发中,当我们需要访问资源或者启动一个Activity都会用到Context。那么这个Context到底是什么呢?它代表当前程序的运行环境。Context是一个抽象类,里面定义了很多有关应用程序环境的全局信息的接口。通过这个类,我们可以访问访问应用程序的资源和类;以及对应用程序级操作的调用,例如启动Activity、广播和接收intent等。
2023-10-31 15:55:36
133
1
原创 窗口类型Window type
我们在实际过程中,经常会遇到不同的窗口,Activity、Dialog、Toast、输入法界面等,窗口可以分为三大类:Application Window、Sub Window、System Window。下面简单介绍下窗口的三大类型。窗口类型定义在WindowManager.java的内部类LayoutParams中,类型如下。
2023-10-23 16:05:10
324
原创 如何在Android.mk文件里添加log
launch product之后,则会打印出PRODUCT_PACKAGES的值。编译时,在lunch product阶段就能打印出日志。想打印PRODUCT_PACKAGES的值,只需要添加。
2023-09-14 16:17:48
1569
1
原创 overlay配置global key不起作用问题
最近在做Android 高版本的TV项目,需要做自定义的global key,主要是在global_keys.xml的overlay文件里配置自定义的按键处理器。原生的这个文件路径在frameworks/base/core/res/res/xml/global_keys.xml,我们自定义的overlay目录在device/product/common/overlay/frameworks/base/core/res/res/xml/global_keys.xml以前低版本项目也做过同样的功能,直
2023-09-13 15:37:31
521
1
原创 linux下go环境搭建
当前最新版本是go1.21.0版本,可以看到linux系统需要下载的是go1.21.0.linux-amd64.tar.gz包。然后通过source $HOME/.profile或者source /etc/profile使配置生效。将以下行配置添加到 $HOME/.profile 或 /etc/profile。如果/usr/local路径存在go文件夹,需要先删除这个文件夹。通过go version查看go语言是否安装成功。输入:go run HelloWorld.go。5.运行go文件例子。
2023-08-29 15:37:59
1881
1
原创 ANR机制----基于Android R流程
5秒内无法响应屏幕触摸事件或键盘输入事件= null?return -1;:在执行前台广播(BroadcastReceiver)的函数时10秒没有处理完成,执行后台广播为60秒没有处理完成。:前台服务20秒内,后台服务在200秒内没有执行完毕。:ContentProvider的publish在10s内没进行完。
2023-08-28 17:05:27
433
1
原创 Android.bp/mk的常见语法对比
Android.mk和Android.bp文件中的一些常见属性的对应关系可以参考:build/soong/androidmk/androidmk/android.go文件。vendor: true或者。
2023-08-24 15:07:39
958
1
原创 golang学习网址
官网:The Go Programming Languagegolang学习中文网:https://studygolang.com/golang标准库文档:Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国
2023-08-09 10:35:23
463
1
原创 Android 11----SystemConfig.java解析
这个方法主要是对目录的权限进行检查,然后遍历目录下的文件,其核心方法还是调用readPermissionsFromXml()方法读取xml类型文件里面的各个节点,例如:premission、features、library等,然后将解析的结果分别放到SystemConfig对应的数据结构里。platform.xml文件放到最后读取。SystemConfig.java是PKMS里一个很重要的类,用来解析一些系统配置信息的,然后将解析的结果赋值给SystemConfig里的各个数据结构,供我们查询。
2023-07-24 11:35:08
1012
原创 FrameworkStatsLog
所以FrameworkStatsLog本质上也是用于将数据传递到statsd上,我们可以通过调用FrameworkStatsLog.java里的write()方法来对事件进行打点。genrule是用来生成文件的,当编译引用它的jar包时,会生成对应的文件,所以FrameworkStatsLog.java这个文件可能是按照某种编译规则生成的。(1)tools:表示可在命令行下运行的jar包,即指定main()入口的jar包,这里是。执行tools指定的jar包的cmd命令,使用这个命令可执行jar包。
2023-07-19 19:52:16
2136
1
原创 android 11 Handler消息机制
我们都知道进程间通信一般是用binder、文件、AIDL等,那么线程间通信一般是如何进行的呢?一般通过Handler消息机制来进行线程间的通信,标准的一个场景就是子线程进行耗时操作(网络、下载等),完成后发送消息去通知主线程更新UI。Handler消息机制中主要有四大成员,它们的主要功能如下:Handler:消息处理器。可以发送消息Handler.sendMessage()和处理消息Handler.handleMessage()。Message:消息对象。线程间通信的数据单元,Message可携带数据。
2023-07-18 16:33:40
1059
1
原创 stop应用无法收到广播问题
原因:Android在3.1以后将新安装并且从未被启动的应用置为“STOPPED”状态,这种状态指那些安装了但从未启动过的apk,或在settings中被force stop的apk,这种状态下的应用是无法接收到广播的(IntentResolver.buildResolveList)。1.excludingStopped:设置了FLAG_EXCLUDE_STOPPED_PACKAGES标识,默认设置,所以一般情况下stopped应用都无法接收到广播。包含stopped状态下的package。
2023-07-13 16:51:39
607
原创 源码里mk文件转换成bp文件
可以使用源码里的out/soong/host/linux-x86/bin/目录下存在androidmk文件进行转换。2.如果out/soong/host/linux-x86/bin/目录下不存在androidmk文件。1.如果out/soong/host/linux-x86/bin/目录下存在androidmk文件。./androidmk android.mk文件路径 > 需要生成的android.bp文件名称。先m -j blueprint_tools生成androidmk文件。继续第一种情况的步骤。
2023-07-13 16:42:51
784
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人