- 博客(37)
- 收藏
- 关注
原创 Android Init Language
Android Init Language 安卓初始化语言,是一种用于配置和管理 Android 系统服务的专用脚本语言。主要用于编写 .rc 文件(比如我们熟知的init.rc文件),这些文件在系统启动时由进程读取和执行,从而设置和启动系统服务、管理权限、定义设备节点等。
2024-08-26 17:36:19
371
原创 input系统之InputReader
可以看出InputReader处理事件的流程为:(1)调用EventHub的getEvents方法获取输入事件(2)调用processEventsLocked()方法处理获取到的输入事件(3)调用flush()方法将已经封装好的EventEntry事件交给给InputDispatcher分发。
2024-08-14 17:30:11
770
原创 Input系统之IMS的启动流程
InputManagerService(下面简称IMS)在输入事件的获取和分发中,起着重要的作用。它是Android系统中的一个关键服务,主要有以下几个功能:1、输入事件处理:从各种输入设备(如触摸屏、键盘、鼠标等)接收输入事件。然后对接收到的输入事件进行处理,包括事件的转换、标准化等。2、输入事件分发:将处理后的输入事件分发给适当的应用程序或窗口。确保事件能够传递到当前焦点窗口或应用程序。3、输入设备管理:管理系统中的输入设备,包括设备的初始化、状态监控和驱动接口。
2024-08-14 17:24:38
1131
原创 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
863
原创 Android Studio导入源码
一般情况下,源码里很多目录我们都用不到,可以通过配置iml文件来有选择的导入某些目录。在源码的根目录下会生成android.ipr和android.iml文件。使用AS打开android.ipr文件,就能成功导入源码了。excludeFolder:表示不包含的文件目录。sourceFolder:表示包含的文件目录。1.生成导入AS所需的配置文件。3.打开android.ipr。最后一步执行完后会有。
2024-07-25 11:10:08
558
原创 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
694
原创 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
137
原创 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
299
原创 遥控器Tab键切换时按键音流程
2.调用mView.dispatchKeyEvent()方法将event事件传递给mView(Activity的顶层DecordView对象)处理,如果view层级结构中任何一个view处理了该事件,返回FINISH_HANDLED表示该事件已被处理。主要流程:首先计算焦点转换的方向,然后在控件树中找到当前获取焦点的view,根据当前获取焦点的view,在direction方向上找到下一个获取焦点的view,最后移除旧焦点,建立新焦点,并播放按键音。首先看下该方法的调用堆栈。5.Tab键和快捷键的处理。
2024-07-11 14:43:49
354
原创 Android enforce_permissions_exceptions问题
先检查Enforce_permissions是否为true,如果为true,再检查aidl文件是否在ignoredAidlPermissionList列表里,如果不在列表里,那么添加"-Wmissing-permission-annotation -Werror" flag,后续检查的时候,如果不满足权限要求,就会报错。里面添加了很多原生framework的aidl文件豁免白名单,把我们自己的aidl文件添加进去就可以了。
2024-05-11 10:47:51
373
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
740
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
374
原创 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
412
原创 解决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
2063
原创 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
327
原创 AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of:xxx问题分析(源码环境)
该元素告诉系统将库的代码包含在包的类加载器中。在这个路径下查找java 库中对应的类是否存在,如果不存在,那么说明你需要的类没有编译出来,需要进一步确认类为什么没有编译出来,是路径错误或者是拼写原因,或者时引用时的注释问题。这种会把后面的一起注释掉,所以这种添加多个jar包时尽量不要注释,直接删掉,或者将需要的jar包挪到最上面,避免因注释而导致下面的jar包无法被添加。这种方式引用的java库在编译时可以找到,但并不打包到本模块,在运行时需要从别的地方查找,所以一般会生成一个单独的jar包。
2024-03-22 17:15:42
733
原创 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
499
原创 requestFocus无法获取焦点
调用此方法可以将焦点集中到特定view或其子view之一。可以看到,如果我们只通过调用requestFocus()方法去获取焦点,那么如果当前处于touch mode,并且view没有设置foucusableInTouchMode="true"属性则无法获取焦点。问题描述:插入鼠标后,滑动鼠标,然后调出系统的关机菜单,菜单无法获取焦点,即使使关机菜单的view主动调用requestFocus方法,仍然无法获取到焦点。1.代码中主动调用view.requestFocusFromTouch()方法。
2023-11-17 10:14:46
388
1
原创 Context
我们在实际开发中,当我们需要访问资源或者启动一个Activity都会用到Context。那么这个Context到底是什么呢?它代表当前程序的运行环境。Context是一个抽象类,里面定义了很多有关应用程序环境的全局信息的接口。通过这个类,我们可以访问访问应用程序的资源和类;以及对应用程序级操作的调用,例如启动Activity、广播和接收intent等。
2023-10-31 15:55:36
77
1
原创 窗口类型Window type
我们在实际过程中,经常会遇到不同的窗口,Activity、Dialog、Toast、输入法界面等,窗口可以分为三大类:Application Window、Sub Window、System Window。下面简单介绍下窗口的三大类型。窗口类型定义在WindowManager.java的内部类LayoutParams中,类型如下。
2023-10-23 16:05:10
174
原创 如何在Android.mk文件里添加log
launch product之后,则会打印出PRODUCT_PACKAGES的值。编译时,在lunch product阶段就能打印出日志。想打印PRODUCT_PACKAGES的值,只需要添加。
2023-09-14 16:17:48
1010
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
392
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
1278
1
原创 ANR机制----基于Android R流程
5秒内无法响应屏幕触摸事件或键盘输入事件= null?return -1;:在执行前台广播(BroadcastReceiver)的函数时10秒没有处理完成,执行后台广播为60秒没有处理完成。:前台服务20秒内,后台服务在200秒内没有执行完毕。:ContentProvider的publish在10s内没进行完。
2023-08-28 17:05:27
263
1
原创 Android.bp/mk的常见语法对比
Android.mk和Android.bp文件中的一些常见属性的对应关系可以参考:build/soong/androidmk/androidmk/android.go文件。vendor: true或者。
2023-08-24 15:07:39
660
1
原创 golang学习网址
官网:The Go Programming Languagegolang学习中文网:https://studygolang.com/golang标准库文档:Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国
2023-08-09 10:35:23
234
1
原创 Android 11----SystemConfig.java解析
这个方法主要是对目录的权限进行检查,然后遍历目录下的文件,其核心方法还是调用readPermissionsFromXml()方法读取xml类型文件里面的各个节点,例如:premission、features、library等,然后将解析的结果分别放到SystemConfig对应的数据结构里。platform.xml文件放到最后读取。SystemConfig.java是PKMS里一个很重要的类,用来解析一些系统配置信息的,然后将解析的结果赋值给SystemConfig里的各个数据结构,供我们查询。
2023-07-24 11:35:08
828
原创 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
1499
1
原创 android 11 Handler消息机制
我们都知道进程间通信一般是用binder、文件、AIDL等,那么线程间通信一般是如何进行的呢?一般通过Handler消息机制来进行线程间的通信,标准的一个场景就是子线程进行耗时操作(网络、下载等),完成后发送消息去通知主线程更新UI。Handler消息机制中主要有四大成员,它们的主要功能如下:Handler:消息处理器。可以发送消息Handler.sendMessage()和处理消息Handler.handleMessage()。Message:消息对象。线程间通信的数据单元,Message可携带数据。
2023-07-18 16:33:40
878
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
434
原创 源码里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
663
原创 四大组件对OOM_ADJ的影响
(1)若进程A查询进程B的provider得到Cursor,在进程A关闭Cursor之前,ActivityManager会保持provider connection,此时B的OOM_ADJ将提升至与A相同。(1)若进程A bind 住进程B 的service,ActivityManager会将B的重要性提升至与A 相同。如果A使用完服务后,忘了调用unbindService(),B的重要性就降不下来,极端情况是,若A是常驻的,会导致B也变成常驻了,引发系统性内存问题.执行onReceive() 时。
2023-07-13 16:14:13
254
原创 force-stop流程
(1).onForceStopPackage():强制停止该package,主要是没有绑定进程的activities,绑定进程的activity会随着进程消亡而消亡,第一步执行这个方法主要是为了防止这个package中中没有绑定进程的activity重新启动该package。一般地force-stop会指定包名,该方法会遍历当前所有运行中的进程mProcessNames,以下条件同时都不满足的进程,则会成为被杀的目标进程:(也就是说满足以下任一条件都可以免死)可以通过adb命令和设置中的入口来使用。
2023-07-13 16:07:48
2584
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人