安卓系统开发
文章平均质量分 76
ChampionDragon
本人从事安卓开发
展开
-
安卓稳定性技术栈
5.gdb,objdump,addr2line,oatdump 工具使用。3.Class文件格式,dex文件格式,oat,art文件格式。4.压栈, 跳转,执行,返回:从汇编看函数调用。2.Android debuggerd 流程。4.dex2oat字节码转换成机器码流程。1.Android 平台信号机制。10. dlmalloc 机制。9. jemalloc 机制。10.GC机制以及Heap。2.Watchdog机制。5.input 输入机制。1.虚拟机art创建流程。8. elf 文件分析。原创 2023-05-11 14:59:56 · 720 阅读 · 1 评论 -
安卓系统软键盘初步分析
11-05 14:01:24.768 7991 7991 V InputMethodManager: onViewClicked: true11-05 14:01:24.768 7991 7991 D InputMethodManager: showSoftInput() view=androidx.appcompat.widget.AppCompatEditText{bd0acc9 VFED..CL. .F.P..ID 0,0-900,91 #7f0801e3 app:id/etd_placeh原创 2023-04-12 10:57:23 · 844 阅读 · 0 评论 -
SurfaceFlinger详解
SurfaceFlinger的定义那么 Systrace 中,我们关注的重点就是上面这幅图对应的部分这四部分,在 Systrace 中都有可以对应的地方,以时间发生的顺序排序就是 1、2、3、4,下面我们从 Systrace 的这四部分来看整个渲染的流程。负责图像合成的核心模块是 负责图像合成的节奏和合成策略的分配。原创 2023-02-13 15:30:00 · 2351 阅读 · 1 评论 -
Android进程启动流程
系统启动流程中的一个关键的步骤,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建。这层中包含了支持整个系统正常运行的基础库,由于这些库多数都由。系统中非常重要,系统里面的服务都是在这个进程里面开启的,例如。设置的应用程序,如果这两个目录都找不到,就依次去根目录下找。,只要这些应用程序有一个启动了,其他就不需启动了。系统库、虚拟机运行环境、框架层组成,通过系统调用。另一方面也囊括了不少系统级服务进程的实现,是与。进程负责创建系统中最关键的几个子进程,尤其是。协议,意味着其下的所有驱动都应该开源,原创 2022-12-15 16:18:06 · 1405 阅读 · 0 评论 -
Android进程启动流程
但整体架构设计清晰。Android 底层内核空间以 Linux Kernel 作为基石,上层用户空间由 Native系统库、虚拟机运行环境、框架层组成,通过系统调用(Syscall)连通系统的内核空间 与 用户空间。对于用户空间主要采用 C++ 和 Java 代码编写,通过 JNI 技术打通用户空间的 Java层 和 Native层(C++/C),从而连通整个系统。这层中包含了支持整个系统正常运行的基础库,由于这些库多数都由C/C++实现,因此也被一些开发人员成为“C库层”,以区别于应用程序框架层。原创 2022-11-25 16:37:51 · 531 阅读 · 0 评论 -
dumpstate log总结
先从总体上了解dumpstate的结构,以至于不会迷失在log海当中.这个界面的代码在android\vendor\samsung\packages\apps\MSP\FactoryTest\ServiceModeApp\src\com\sec\android\app\servicemodeapp\app\SysDump.java。Log源码在android\frameworks\base\core\java\android\util\Log.java,看Log.i的实现。原创 2022-11-04 15:02:19 · 1761 阅读 · 0 评论 -
Android系统MK文件分析
说明:必须定义, 在app或package的Android.mk中必须给定值。可选定义,在app或package的Android.mk中可以也可以不给定值。不用定义,在app或package的Android.mk中不要给定值,脚本自动指定值。原创 2022-10-26 11:36:46 · 308 阅读 · 0 评论 -
安卓温升thermal介绍
Linux kernel有个通用的思想就是抽象分层,比如把该子系统所有资源和信息综合在一起的一层叫core层,不同的设备的操作叫device层,对设备的操作的屏蔽层叫driver层或者governor。thermal sensor驱动负责读取硬件温度sensor的温度,并传给thermal 子系统,thermal子系统将根据调控对象的温度,决定是否触发对应的冷却措施,如限制CPU最大工作频率,以及CPU打开的核数等,从而实现对系统的冷却。当然附带的也会产生一些使用温度控制设备的策略。原创 2022-10-21 11:01:26 · 2283 阅读 · 0 评论 -
Systrace抓取
Trace的X轴表示时间,Y轴以进程进行分组,进程组内是各个线程,可以收缩和展开。每个应用进程包含每个线程所包含的所有跟踪标记,包括基于启用跟踪类别的高级跟踪事件的层次结构。打开谷歌浏览器, 在Chrome浏览器的地址栏中输入 chrome://tracing,点击Load选择需要的trace文件即可。使用使用android自带的抓取trace的方法,这种方法适用于抓取长trace,最长支持30分钟,但是可能会影响性能。d.下拉状态栏点击“系统跟踪”图块,即可开始抓取,再次点击图块即可停止抓取;原创 2022-09-26 16:47:52 · 2849 阅读 · 0 评论 -
Fastboot刷机
讲到这里,我想说的是,既然recovery是一个小型操作系统并且有手机这样现成的设备,我们可以基于它做些有趣的事,比如移植网络协议及无线网络连接逻辑,然后开发一个命令行版的新浪微博客户端,这样就可以用自己改造的系统发微博了。BootLoader既然要做硬件初始化之类的,必然和硬件相关,所以它的代码并非通用的,不同的硬件需要不同的BootLoader代码,各大厂商可能都有自己的,并且加入开机画面之类的。这里要说的是,内核还没有加载,所以更谈不上多进程任务调度之类的概念,机器只是在顺序执行一条条的指令。....原创 2022-07-25 15:02:13 · 19645 阅读 · 1 评论 -
Vim详解
3.打开文件定位到指定行vimfilename+n比如想到第65行,输入vimfilename+65或者vim+65filename。2.命令模式下(没有输入i进行编辑前),ngg比如想到第86行,输入"86gg"或"86G"(这个不用按回车就直接定位到对应行了)1.命令模式下(没有输入i进行编辑前),n比如想到第65行,输入"65"按回车即可定位到65行。vim快速定位到某一行的几种方法和显示行号,定位匹配字符串,显示当前行信息的命令。......原创 2022-07-16 14:27:38 · 5567 阅读 · 0 评论 -
Ubuntu卸载软件相关命令
dpkg -ldpkg -l | grep xxx # xxx为软件名称,例如 virtualboxdpkg-query -l *package-name* 例如 virtualboxdpkg -s package-name 例如 virtualboxdpkg --get-selections | grep virtualboxdpkg -L package-name ,例如 virtualboxsudo apt-get --purge remove xxx # xxx为软件名称,原创 2022-06-02 16:00:28 · 10662 阅读 · 1 评论 -
grep详解
最常用的就是和管道符结合,例如:ps -ef | grep dockergrep的语法格式:grep -option(参数) ‘word’(关键词) file(文本文件)grep参数:-a 不要忽略二进制数据。-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。-c 计算符合范本样式的列数。-C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该.原创 2022-05-23 17:30:13 · 2465 阅读 · 0 评论 -
通过国家码切换默认输入法
/frameworks/base/packages/SettingsProvider/res/values/defaults.xmlomron输入法:<string name="default_input_method" translatable="false">jp.co.omronsoft.iwnnime.ml/.standardcommon.IWnnLanguageSwitcher</string>搜狗输入法:com.sohu.inputmethod.sogou/.原创 2022-05-20 16:48:44 · 582 阅读 · 0 评论 -
Ubuntu下如何用命令行运行deb安装包
安装sudo dpkg -i xxxx.deb #安装xxxx.deb软件包(其中-i等价于--install)卸载sudo dpkg -r xxxx #卸载xxxx软件包(软件名称可通过dpkg -I命令查看,其中-r等价于--remove)安装TeamViewer为例sudo dpkg -i teamviewer_15.29.4_amd64.deb报错如下:缺少依赖执行如下两步sudo apt --fix-broken install 一般是使用dpkg安装软件出现依赖或..原创 2022-05-17 10:52:14 · 6788 阅读 · 0 评论 -
ANR分析
1.什么是ANRANR即Application Not Responding,顾名思义就是应用程序无响应。在Android中,一般情况下,四大组件均是工作在主线程中的,Android中的Activity Manager和Window Manager会随时监控应用程序的响应情况,如果因为一些耗时操作(网络请求或者IO操作)造成主线程阻塞一定时间,那么系统就会显示ANR对话框提示用户对应的应用处于无响应状态。2.为什么会发生ANR一句话总结:主线程没有在规定的时间内,做完要做的事情,就会发生ANR。原创 2022-05-06 10:36:26 · 2705 阅读 · 0 评论 -
getprop 属性
使用adb shell getprop就可以从系统的各种配置文件中读取信息并把所有的信息都打印出来。而使用setprop命令就可以进行相对应的设置。adb shell getprop 查看机器的全部信息参数getprop net.eth0.dns1或者getprop net.eth0.dns2 查看DNSgetprop ro.serialno 查看机器的SN号getprop ro.carrier 查看机器的CID号getprop ro.hardware 查看机器板子代号...原创 2022-04-21 14:45:37 · 2360 阅读 · 1 评论 -
安卓耗电量测试
1.无线连接手机adb connect 192.168.1.82.清楚已有的耗电量数据adb shell dumpsys batterystats --enable full-wake-history3.设备耗电量数据重置adb shell dumpsys batterystats --reset4.寻找包名的uidadb shell ps |find "com.nuomi"以下是dos下出来的信息,u0_a445就是uid,需要去除下划线_, 即u0a445u0_a4.原创 2022-04-18 11:09:56 · 365 阅读 · 0 评论 -
Hierachy View使用
此文章主要是通过Hierarchy View来了解statusbar的具体结构体系一.如何打开Hierachy View首先在SDK/Tools文件夹下打开Monitor,按照如下操作打开Hierachy View。 StatusBarWindowView:状态栏根布局StatusBarWindowView继承了FrameLayout布局1)重写了onApplyWindowInsets(WindowInsets windowInsets)方法WindowI...原创 2022-04-15 11:35:27 · 601 阅读 · 0 评论 -
WMS白屏问题
找关键字:WindowManager根据log显示,是systemui.ImageWallpaper转态栏没有移除,导致桌面有一层白色图层,当点击桌面的时候,实际是点击systemui.ImageWallpaper,所以无响应.在设备白屏的时候抓取如下log:adb shell dumpsys window > Desktop\window.txtadb shell dumpsys SurfaceFlinger > Desktop\SurfaceFlinger.txt...原创 2022-03-30 17:13:18 · 313 阅读 · 0 评论 -
安卓系统开发笔记(三)
1.去除暗黑反色问题方法:DarkIconDispatcherImpl(applyDarkIntensity)StatusBarIconView(onDarkChanged)类:NotificationIconContainer(通知的管理类)statusbar\phone\StatusBarIconController.java(TintedIconManager/onIconAdded)(1)frameworks/base/services/core/java/com/a原创 2022-03-28 15:29:30 · 3248 阅读 · 0 评论 -
系统强制竖屏
关键方法相关链接:Android4.1 Rotation 小结_tianruxishui的专栏-CSDN博客_android:rotation案例分析在连接特定WIFI的情况下强制竖屏显示WifiNetworkDetailsFragment2.java WifiSettings2.java导包:import com.android.internal.view.RotationPolicy;在两个方法加入以下条件onResume()boolean locked = ...原创 2022-03-14 14:07:03 · 3159 阅读 · 0 评论 -
修改日期时区-区域选项
相关类:TimeZoneSettings需要修改的资源如:icu4c/source/data/region/zh.txtzh-CHS 是单纯的简体中文。zh-CHT 是单纯的繁体中文。zh-Hans和zh-CHS相同相对应。zh-Hant和zh-CHT相同相对应。以上时zh-CHS/zh-Hans 和 zh-CHT/zh-Hant的关系。zh-CN 简体中文,中华人民共和国zh-HK 繁体中文,香港特别行政区zh-MO 繁体中文,澳门特别行政区-zh-S.原创 2022-02-11 16:46:13 · 1322 阅读 · 0 评论 -
状态栏定制化开发
1.状态栏头部framelayout:status_bar_container phoneStatusBarView:status_bar LinearLayout:status_bar_contens AlphaOptimizedLinearLayout:system_icon_area系统icon布局:system_icons下拉QS界面时状态栏界面:com.android.systemui:id/content设置界面:android:id/statusBarBackground...原创 2022-01-29 14:38:43 · 2776 阅读 · 0 评论 -
通知栏定制化开发
关键类:NotificationManger NotificationManagerService EnqueueNotificationRunnable PostNotificationRunnable的处理 NotificationListenersNotificationManger:1)对smallicon的非空检验(Build.VERSION_CODES.LOLLIPOP_MR1以上版本),校验不通过报IllegalArgumentException("Invalid noti...原创 2022-01-22 11:59:25 · 2138 阅读 · 1 评论 -
Launcher Go布局客制化
Launcher是安卓系统中的桌面启动器,安卓系统的桌面UI统称为Launcher。Launcher是安卓系统中的主要程序组件之一,安卓系统中如果没有Launcher就无法启动安卓桌面布局配置布局配置文件路径:Go 版本:Launcher3\go\res\xml\device_profiles.xml非 Go 版本:Launcher3\res\xml\device_profiles.xml配置文件中定义了不同分辨率对应的 grid-option 和 display-option 标签原创 2022-01-18 13:52:52 · 2948 阅读 · 0 评论 -
安卓系统开发笔记(二)
1.查看ClientID的命令adb shell getprop ro.com.google.clientidbaseadb shell getprop |findstr ro.com.google.clientidbase2.查看亮屏问题关键词:sysui_status_bar_state screen_toggled onAuthenticated keyguardGoingAway方法:sysui_status_bar_state(state|1,keyguardShowing|1...原创 2022-01-06 19:28:26 · 3009 阅读 · 0 评论 -
SystemUI自定义电池图标
1.大致浏览了状态栏介绍,明白了大致的结构StatusBarWindowView(根布局)包含三种形式的界面:收缩形式 展开形式 安全锁界面形式2、大概的了解视图3、状态栏功能 显示功能图标,告诉用户基本的信息状态4、状态栏的启动过程收缩形式的界面status_bar1)StatusBarWindowView(根布局)2)BatteryMeterView包含了电量的图标和电量百分比。布局文件是在/m7/vendor/mediatek/propri..原创 2021-12-06 15:24:59 · 1338 阅读 · 0 评论 -
SystemUi状态栏客制化功能和常见问题分析
一.多图标成点当系统图标区域或者通知图标区域图标过多,而区域不够时,就会将多余的图标隐藏,并显示一个点,如下图所示。介绍此功能之前先看一下图标的初始化过程,从中可以看到有个config_statusBarIcons参数,这个参数定义了所有的系统图标由低到高显示优先级顺序。点图标是通过设置图标的状态为STATE_DOT来实现的,在状态更新后会 applyToView,然后在图标类中setVisibleState来刷新图标,大致流程如下图所示。二.图标反色我们可以看到当状态栏背.原创 2021-12-04 15:50:17 · 3274 阅读 · 0 评论 -
SystemUi状态栏主要控件
一.运营商信息控件运营商的控件有两个,一个是锁屏下显示的CarrierText,一个是解锁下显示的OperatorNameView。解锁状态下的OperatorNameView默认显示为空,只有当插入sim卡,并检测到sim卡状态已经准备好后才会显示运营商信息,具体控制是由KeyguardupdateMonitorCallback监听sim状态变化执行updateText方法进行更新信息;锁屏下的运营商信息显示由CarrierTextController控制,通过KeyguardUpdateMonito原创 2021-12-03 14:21:09 · 1281 阅读 · 0 评论 -
SystemUI状态栏形式及流程
一.状态栏形式1.1锁屏状态栏锁屏状态栏是只有用户设置了锁屏方式为滑动或其他安全锁时才会显示,锁屏方式设置为“无”时不会显示,其显示是伴随着锁屏界面的,也就是只有按下power键或者自动息屏后才会显示。其显示逻辑是在NotificationPanelView来控制的案例一:区域1为keyguard_carrier_text 区域2为cutout_space_view区域3为system_icons_container主要布局文件是frameworks\base\packa原创 2021-12-02 14:55:08 · 2376 阅读 · 0 评论 -
SystemUi通知栏
视图通知图标显示分析:如上所述,所有的通知信息保存在了自定义view NotificationStackScrollLayout中,每个通知又被封装进了ExpandableNotificationRow中,其中主要保存信息内容的对象又是NotificationContentView,所以后续分析会涉及到这三个自定义view。在SystemUI进程中对notification的处理流程如下:源码分析关键信息类2. 获取Notificati...原创 2021-12-01 15:18:54 · 2679 阅读 · 0 评论 -
Log日志种类区分
Android系统完整的日志文件目录:/data/log/android_logs/系统或者APP发生ANR时的log日志文件目录:/data/anrC/C++代码发生崩溃时的日志文件目录: /data/tombstones 存各种APP崩溃、ANR、Android系统死机、重启、C/C++模块崩溃等场景的日志文件目录:/data/system/dropbox 存放Watchdog: Android 的 SystemServer 是一个非常复杂的进程,里面运行的服务超过五十种,是最可能出问题原创 2021-11-25 15:13:28 · 2232 阅读 · 0 评论 -
SystemUi概述
一.SystemUI概述在Android系统中SystemUI是以应用的形式运行的。即编译SystemUI会产生APK文件。但它和普通的APK不同,它是开机启动的A并且不可以退出, SystemUI顾名思义是系统用户界面。它为系统提供了基础的显示界面。比如:屏幕顶端 的状态栏、屏幕底部的导航栏、下拉界面的快速设置栏、通知栏、锁屏界面,音量调节对话框、截屏显示界面等功能。1.SystemUI路径与Packages/apps/下许多模块不同的是,SystemUI属于Android ...原创 2021-11-16 11:16:11 · 5283 阅读 · 0 评论 -
把Android源码导入Android Studio进行调试
一.整编代码1.source build/envsetup.sh 在你需要编辑的根目录下输入如下命令初始化环境2.lunch 选择平台编译选项,如:32.lito-userdebug3.make -j16 -jx # x指线程数,一般写8具体看电脑配置二.生成idegen.jar文件1.source build/envsetup.sh 2.lunch3.mmm development/tools/idegen/这行命令的意思是编译idegen这个模块项目,然后生成id...原创 2021-11-01 11:12:51 · 3238 阅读 · 3 评论 -
Selinux详解
一.介绍1.1百度百科SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。SELinux 是 2.6 版本的 Linux内核中提.原创 2021-10-21 11:47:33 · 9725 阅读 · 2 评论 -
dumpsys详解
Adb shell dumpsys –l 查看dumpsys的列表Adb shell dumpsys :默认答应出当前系统所有service信息,在后面可以具体加上服务名Adb shell dumpsys | findstr DUMP :需要列出当前运行的服务,可运行Adb shell dumpsys SurfaceFlinger :获取桌面显示数据Adb shell dumpsys battery :获取设备电池信息Adb shell dumpsys display :获取设备分辨..原创 2021-10-09 15:57:21 · 7636 阅读 · 0 评论 -
Android Studio 导入源码模块并debug
1. 导入需要开发的模块 2. 配置Android Sdk并且加载src,支持android studio里面的java文件跳转这一步可以加载其他模块,比如我把package目录、system目录等模块加载进来,注意,每次加载之后,都要用下面的方式,让模块中的java类重新生成下依赖,否则,不会实现跳转这样做是为了重新加载.java文件,添加索引,这样之后,点击ctrl+鼠标左键 直接跳转过去下面我们还需要给模块配置SDK,这个SDK需要把.jar去除,否则,跳转...原创 2021-08-13 11:11:28 · 846 阅读 · 0 评论 -
使用Android Studio开发/调试Android源码
一.生成导入AS所需配置文件(*.ipr)①编译源码(为了确保生成了.java文件,如R.java;如果编译过,则无需再次编译)②检查out/host/linux-x86/framework/目录下是否有idegen.jar如果idegen.jar不存在,执行:mmm development/tools/idegen/在5.0.1的源码中会生成res.java的文件夹,导致idegen.jar运行时抛FileNotFoundException,这是idegen的代码不够严谨造成的。原创 2021-08-10 17:41:25 · 2634 阅读 · 1 评论 -
Ubuntu添加截图工具
在乌班图的应用商城搜索:Flameshot设置>设备>键盘,设置一个自定义快捷键(拉到最下面)命令填写:flameshot gui(必须填这个,这个是命令的索引)screenshot(自定义,快捷键的名称)...原创 2021-07-13 17:26:09 · 138 阅读 · 0 评论