Framework
文章平均质量分 76
Invoker123
菜鸟的一点笔记,大神请多多指教
展开
-
Android打印log的方式
Android framework Java层import android.util.Log;Log.d(TAG,“Your Log”);Android C++层1.#include <log/log.h>ALOGV(“Running %s in=%s out=%s\n”, dex2oat_bin, relative_input_file_name, output_file_name);2.#include <android-base/logging.h>LOG(WAR原创 2022-01-10 16:24:20 · 5493 阅读 · 0 评论 -
Android共享库命名空间
简介 Android系统中,system.load,system.loadLibrary和dlopen是三个可以加载共享库的方式。其中,system.load,system.loadLibrary是在Java代码中被使用的,dlopen是在cpp代码中被使用的。system.load system.load接收一个路径参数,该参数libcore/ojluni/src/main/java/java/lang/System.java @CallerSensitive public s原创 2022-01-05 16:55:10 · 5923 阅读 · 0 评论 -
Android权限系统(四):应用操作管理类AppOpsManager(Android 10)
AppOpsManager 介绍 AppOpsManager 是Google在Android4.3里面引进的应用程序操作(权限)的管理类,核心实现类为AppOpsService。Google对AppOpsManager的说明在:AppOpsManager原创 2020-10-29 01:48:09 · 12191 阅读 · 1 评论 -
Android权限系统(三):运行时权限检查和申请,PermissionController
请求应用权限的最佳实践 Google提供的请求应用权限的说明如下:请求应用权限 官方提供的模板使用了三个条件分支来请求应用权限: 1.checkSelfPermission用来检查应用是否有需要请求的权限了,如果有,直接执行需要的动作; 2.shouldShowRequestPermissionRationale在用户曾经点击过拒绝这一权限的选项后为true(非“拒绝不再询问”选项),这时系统发现应用没有响应的权限,开发者可以在这一条件分支加上相关说明的界面,向用户指出申请这个权限的必要性,但原创 2020-10-19 02:21:57 · 9621 阅读 · 2 评论 -
Android O+广播限制
简介 Android O对隐式广播进行了限制, 其限制链接说明:后台执行限制 按照谷歌的说法是:如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播,则会引发问题:触发广播的系统事件会导致所有应用快速地连续消耗资源,从而降低用户体验。 为了缓解这一问题,Android 7.0(API 级别 24)对广播施加了一些限制,如后台优化中所述。 Android 8.0(API 级别 26)让这些限制更为严格。 1.适配 Android 8.0原创 2020-10-13 01:59:14 · 2259 阅读 · 0 评论 -
dumpsys procstats详解
简介 procstats 工具用于分析应用内存在一段时间内的使用情况(而不像 meminfo 一样在特定时间点捕获快照)。其状态转储会显示每个应用的运行时间、比例集合大小 (PSS) 和唯一集合大小 (USS) 的统计信息–引用自官网介绍查看 RAM 使用情况数据 (procstats) Android内部将内存状态划分为四个等级:Norm/Mod/Low/Crit,按内存的使用情况从轻度到重度的顺序排列;将屏幕状态划分为两个等级:SOff/SOn,分别表示息屏和亮屏;将进程状态划分为14个等级:P原创 2020-09-28 04:27:26 · 2549 阅读 · 0 评论 -
Android针对非SDK接口的限制(基于Android 10)
简介 从 Android 9(API 级别 28)开始,此平台对应用能使用的非 SDK 接口实施了限制。只要应用引用非 SDK 接口或尝试使用反射或 JNI 来获取其句柄,这些限制就适用。这些限制旨在帮助提升用户体验和开发者体验,为用户降低应用发生崩溃的风险,同时为开发者降低紧急发布的风险。Google官方文档地址:针对非 SDK 接口的限制全局hiddenapi设置HiddenApiSettings AMS有一个HiddenApiSettings类型的成员,负责记录黑名单是否使能(mBlackl原创 2020-07-20 17:54:01 · 2924 阅读 · 0 评论 -
Android权限系统(二):开机授予运行时权限
Android开机后,除了根据上次开机的记录(runtime-permissions.xml)授予运行时权限外,一些系统重要的组件也需要提前授予运行时权限。例如,系统会为默认的浏览器提前授予位置相关的运行时权限...原创 2020-06-16 02:25:34 · 6961 阅读 · 0 评论 -
Android权限系统(一):开机获取权限信息
一.SystemConfig的整机权限信息 Android在SystemConfig的构造函数中会通过读取相关的文件来加载整机的权限信息。这些文件是{partition}/etc/permissions下面的文件。其中{partition}指代的分区包含了/system,/vendor,/odm,/oem/,/product/,/system_ext等目录。{partition}/etc/permissions目录下的文件以xml的形式存在以方便解析。frameworks/base/core/java原创 2020-06-10 23:51:21 · 8989 阅读 · 0 评论 -
VTS框架分析
CompatibilityConsole初始化 VTS测试套件的执行脚本是通过直接加载com.android.compatibility.common.tradefed.command.CompatibilityConsole来进入交互命令行的:android-vts/tools/vts-tradefedcd ${VTS_ROOT}/android-vts/testcases/; java...原创 2019-05-26 20:13:29 · 5407 阅读 · 0 评论 -
Android O HIDL框架
HIDL简介 Android O开始,Google为了将framework和HAL层分割开来,使得framework可以独立于HAL层更新,设计了HIDL。有了HIDL,HAL模块可以以一个独立的Service启动,framework可以通过Binder来和HAL模块进行通信,厂家实现的HAL模块将会被放到设备的/vendor目录下。 HIDL分为两种模式:Passthrough模式和Bi...原创 2019-07-09 01:35:36 · 5737 阅读 · 0 评论 -
SystemServer的Watchdog
在我们的认知中,Watchdog 是 Linux 系统一个很重要的机制,其目的是监测系统运行的情况,一旦出现锁死,死机的情况,能及时重启机器(取决于设置策略),并收集crash dump。在Android的SystemServer中,也存在一个Watchdog用来监控一些重要的线程,一旦这些线程长时间阻塞,就会杀掉SystemServer进程,导致Android重启。 Watchdog是一...原创 2018-11-26 01:47:05 · 861 阅读 · 0 评论 -
从一个关机时间过长的bug谈起
一般来说,启动activity需要一个过程,为填补从启动activity到呈现activity画面的空白期,Android设置了启动窗口来实现期间的过渡,用户不会感到切换的突兀。 doShow 一般情况下为true,SHOW_APP_STARTING_PREVIEW是一个静态变量,默认为true。mResumedActivity是当前resume了的ActivityRecord,可以作为...原创 2018-10-08 00:22:11 · 2038 阅读 · 0 评论 -
standard、singleTop、singleTask和singleInstance原理分析
我们知道启动一个Activity有四种方式:standard(标准启动模式)、singleTop、singleTask、singleInstance。先简述一个四种启动方式。standard:进入启动task,每次都创建新的实例进入task顶部;singleTop: 进入启动task,如果已有实例并且在task顶部不创建新实例,调用原实例的onNewIntent(),其它情况都创建新的实例进...原创 2018-10-11 18:10:35 · 1066 阅读 · 0 评论 -
SurfaceFlinger原理(一):SurfaceFlinger的初始化
SurfaceFlinger是Android的一个native进程,负责将图层进行合成,图层叠加起来就构成了我们看到的界面。合成的方式分为在线合成和离线合成。在线合成是指现在一块buffer画好所有的内容,然后直接交给linux图像驱动framebuffer显示出来;离线合成是指将一些图层的buffer直接递交HWComposer,HWComposer指的是能够处理图像数据并组合的现实硬件模块...原创 2018-09-09 19:19:06 · 7230 阅读 · 1 评论 -
Android加载按键文件流程
Android加载按键文件的入口在loadConfigurationLocked函数中。 /frameworks/native/services/inputflinger/EventHub.cpp...loadConfigurationLocked(device);.../frameworks/native/services/inputflinger/EventHub.cpp原创 2017-09-07 02:03:30 · 1442 阅读 · 0 评论 -
Android Input流程分析(二):EventHub
Android Input流程分析(二):EventHub 现在,InputReader线程已经开始运行原创 2017-09-05 22:15:53 · 2032 阅读 · 0 评论 -
Android Input流程分析(三):InputReader
回到InputReader的loopOnce函数。 现在getEvents捞上来的RawEvent均保存在mEventBuffer中。/native/services/inputflinger/InputReader.cpp...if (count) { processEventsLocked(mEventBuffer, count);原创 2017-09-15 01:30:18 · 2333 阅读 · 0 评论 -
Android强指针和弱指针
基类RefBase Android中强指针和弱指针都要继承自RefBase类。 值得注意得是,Refbase类中有内部类weakref_type,有一个类型为weakref_impl*的成员变量。weakref_impl类继承自Refbase类的内部类weakref_type。weakref_type内部也有一个RefBase*类型的成员mBase指向了对应的Refbase对象。weakre原创 2017-09-03 04:25:09 · 828 阅读 · 0 评论 -
Android MediaPlayer框架分析
应用层:从setDataSource说起原创 2017-09-03 05:08:59 · 1146 阅读 · 0 评论 -
Android Init进程
Android系统在加载linux内核后,便启动第一个进程————init进程。 init进程的入口为main函数,文件路径位于/system/core/init/init.cpp中。该进程的执行可分为两个阶段。原创 2017-09-03 02:16:09 · 837 阅读 · 0 评论 -
Base sensors and trigger modes基础传感器及其触发模式
原文:http://source.android.com/devices/sensors/base_triggers.htmlBase sensors and trigger modes基础传感器及其触发模式Trigger modes触发模式Sensors can report events in different ways called trigger modes; each sensor转载 2017-10-19 19:56:18 · 997 阅读 · 0 评论 -
process_config解析fstab文件
正如Linux的/etc/fstab文件,Android的开机挂载位置在特定的fstab文件中决定。vold的main函数会调用process_config对其进行解析,本例中的fstab文件为板子根目录下的fstab.rk30board文件。fstab.rk30board# Android fstab file.#<src>原创 2017-09-20 00:56:42 · 3047 阅读 · 0 评论 -
Android Input流程分析(四):InputDispatcher
之前提到,InputReader将Key的信息封装成一个NotifyKeyArgs对象,调用InputDispatcher的notifyKey来处理。再进行一些初步的处理后,将个NotifyKeyArgs对象拆包,得到的信息构成一个KeyEvent,并调用interceptKeyBeforeQueueing进行第一次事件拦截,该函数最终会调到java层PhoneWindowManager的inte原创 2017-12-20 02:06:08 · 3160 阅读 · 0 评论 -
Handler机制
handler是一个Android SDK 提供给开发者方便进行异步消息处理的类,下面从handler类最常用的函数sendMessage讲起。sendMessage接受的参数是Message,调用到sendMessageDelayed,sendMessageDelayed的第二个参数delayMillis是0,表示立刻发送出去。如果需要延迟发送消息,使用参数delayMillis是不为0的函...原创 2018-06-27 03:08:45 · 398 阅读 · 0 评论 -
Android壁纸服务WallpaperManagerService
Android壁纸服务WallpaperManagerService启动在SystemServer中。当NonCoreServices没有被禁止且config_enableWallpaperService的config值为true时,启动WallpaperManagerService。/frameworks/base/services/java/com/android/server/Sys...原创 2018-09-05 11:38:17 · 8184 阅读 · 1 评论 -
Android Input流程分析(一):启动
Java层的InputManagerService由System Server启动。 /frameworks/base/services/java/com/android/server/SystemServer.java Slog.i(TAG, "Input Manager"); inputManager = new InputManagerService(co原创 2017-09-05 00:51:21 · 947 阅读 · 0 评论