Android系统中的locksettings命令

 分类:Android, Android, Java, Operating System 阅读 (26)  Android系统中的locksettings命令已关闭评论
3月 202020
 

本文基于Android8.1系统

进入Android系统的命令行控制台,可以通过locksettings命令来设置锁屏的一些选项,比如开启或者禁止锁屏,设置密码等

命令行的帮助如下:

命令举例如下:

允许锁屏

locksettings set-disabled DISABLED

默认不锁屏

locksettings set-disabled true

这个命令对应的系统源码在下面这个文件中:

 

 Posted by on 2020-03-20

adb shell dumpsys可以dump的服务

 分类:Android, Android, Java, Operating System 阅读 (36)  adb shell dumpsys可以dump的服务已关闭评论
3月 122020
 

   adb shell dumpsys显示的结果比较长,有的时候我们只想看某一个服务的dump信息,在后面加上那个服务的名字就可以了。我们执行完adb shell dumpsys后,最顶部显示的是当前运行的服务列表,这个列表就是可以细项输出的每个服务名称的列表。

  比如:adb shell dumpsys alarm输出的就只有SurfaceFlinger服务的输出信息。

  对于某些服务,还能指定更小的分类,比如adb shell dumpsys activity还有更细的输出adb shell dumpsys activity broadcasts,这个我们通过adb shell dumpsys activity -h打印帮助信息就能看到子分类的参数说明了。

  adb shell dumpsys生成的列表

 

Android8.1系统服务整理

 分类:Android, Android, Java, Operating System 阅读 (51)  Android8.1系统服务整理已关闭评论
3月 092020
 

本文基于Android8.1系统整理

本文根据SystemServer.java中的代码进行整理

一、系统服务startBootstrapServices

1、Installer服务 – 应该是和底层的installd打交道的服务,用于管理安装删除app的服务,需要在启动其他服务之前完成

2、 DeviceIdentifiersPolicyService – 直译过来是设备标识符策略服务,注释上说有些app需要访问设备标识,因此要在activity manager 之前启动这个服务。

3、ActivityManagerService – 

4、PowerManagerService – 电源管理服务

5、RecoverySystemService – 在一些情况下可能会使用此服务重启系统

6、LightsService – 管理led灯或者背光服务

7、DisplayManagerService – 

8、PackageManagerService

9、UserManagerService – 多用户管理

10、OverlayManagerService – 

11、SensorService – 管理各种传感器的服务,是一个c层的服务,通过jni调用

二、核心服务startCoreServices – 其他必要的服务,但是没和启动服务纠缠在一起

1、DropBoxManagerService – 记录错误和日志

2、BatteryService – 电池管理服务,跟踪电池电量,需要LightService运行

3、UsageStatsService – 跟踪应用使用情况

4、WebViewUpdateService – Webview更新服务

三、其他服务

1、KeyChainSystemService – 好像是com.android.keychain的一个扩展,在android O以后用于处理应用删除时的清理动作。

2、SchedulingPolicyService – 调度策略管理,不知道是干啥用的

3、TelecomLoaderService – 用于启动通讯服务的?

4、TelephonyRegistry

5、VibratorService – 振动器服务

6、AlarmManagerService – 系统定时运行服务

7、ConsumerIrService – 红外遥控管理服务

8、AccountManagerService

9、ContentService

10、Watchdog

11、InputManagerService

12、VrManagerService – vr管理服务

13、BluetoothService – 蓝牙服务

14、IpConnectivityMetrics – 不知道是干啥的

15、PinnerService

16、InputMethodManagerService – 接收屏幕开关、系统关闭对话框事件,启动、关闭输入法service,弹出选择输入法的对话框等等

17、AccessibilityManagerService

18、StorageManagerService – 存储管理服务

19、StorageStatsService – 磁盘统计服务

20、UiModeManagerService – 管理UI模式,汽车模式、电视模式、手表模式、黑夜模式等,adb shell dumpsys uimode

21、LockSettingsService – 管理多个用户的锁屏图案、锁屏密码等的服务

22、PersistentDataBlockService – 连续数据块服务,好像是工厂模式用的?

23、OemLockService

24、DeviceIdleController – 设备空闲状态控制,低功耗模式的运行就是基于这个服务

25、DevicePolicyManagerService – 设备策略服务

26、StatusBarManagerService – 状态栏服务

27、ClipboardService – 剪贴板服务

28、NetworkManagementService

29、TextServicesManagerService – 文本服务,主要是提供拼写检查服务

30、NetworkScoreService

31、NetworkStatsService – 网络统计服务,给其他系统服务使用,也可以使用adb shell dumpsys netstats查看

32、NetworkPolicyManagerService – 网络策略管理

33、WifiService – wifi服务

34、WifiScanningService – wifi扫描服务

35、com.android.server.wifi.RttService

36、WifiAwareService

37、WifiP2pService

38、LowpanService

39、EthernetService

40、ConnectivityService

41、NsdService

42、UpdateLockService

43、NotificationManagerService

44、DeviceStorageMonitorService

45、LocationManagerService – 位置管理服务

46、CountryDetectorService – 国家检测服务,类ComprehensiveCountryDetector.java,检测顺序:移动网络、位置、sim卡的国家、手机的位置

47、SearchManagerService

48、WallpaperManagerService – 壁纸管理服务

49、BroadcastRadioService – 收音机服务

50、DockObserver – ???

51、ThermalObserver – 用于监测温度变化,需要FEATURE_WATCH,监测体温的?

52、WiredAccessoryManager

53、MidiService – midi服务

54、UsbService – usb设备服务,管理所有USB相关的状态,包括host(UsbHostManager)和device(UsbDeviceManager)模式

55、SerialService – 串口服务

56、HardwarePropertiesManagerService

57、TwilightService – 根据用户的位置判断当前时间是否是夜间时间

58、NightDisplayService – 夜晚显示服务,黑夜模式

59、JobSchedulerService

60、SoundTriggerService

61、TrustManagerService

62、BackupManagerService

63、AppWidgetService

64、VoiceInteractionManagerService

65、GestureLauncherService

66、SensorNotificationService

67、ContextHubSystemService – 主要是为了启动ContextHubService

68、DiskStatsService – 磁盘统计服务,只是在使用adb shell dumpsys diskstats时被调用

69、timezone.RulesManagerService

70、NetworkTimeUpdateService

71、CommonTimeManagementService

72、EmergencyAffordanceService – 紧急呼叫服务,从 2017 年 1 月 1 日开始,在印度地区销售的所有移动设备都必须应印度电信部门 (DoT) 的要求提供紧急呼叫按钮。为响应这些监管要求,Android 包含了“提供紧急呼叫”功能的参考实现,以启用 Android 设备上的紧急呼叫按钮。此功能在 Android 8.0 和更高版本中默认启用,但较早版本中必须安装相应的补丁程序。目前,该功能专门针对在印度市场销售的设备;不过,鉴于该功能在印度境外无效,因此也可以在全球范围销售的所有设备上提供。

73、DreamManagerService – 屏保服务?

74、GraphicsStatsService – 用来汇总屏幕卡顿数据的,通过adb shell dumpsys graphicsstats调用查看汇总结果

75、CoverageService – JaCoCo相关服务,和coverage命令相对应,用于导出JaCoCo的输出文件

76、PrintManagerService – 打印管理服务

77、CompanionDeviceManagerService – 伙伴设备管理服务?

78、RestrictionsManagerService – 限制管理服务,好像是app可以通过manifest定义一些限制规则?

79、MediaSessionService – 多媒体会话服务,在多个进程中共享多媒体播放状态,https://developer.android.google.cn/reference/androidx/media2/session/MediaSessionService

80、HdmiControlService – hdmi服务,控制hdmi设备的显示?

81、TvInputManagerService – 电视输入服务

82、MediaResourceMonitorService – 不清楚有啥用

83、TvRemoteService – 电视摇控服务

84、MediaRouterService – 媒体路由服务,用于给实现了Google Cast的设备提供远程播放、远程控制音乐和视频服务,https://developer.android.google.cn/guide/topics/media/mediarouter

85、FingerprintService – 指纹服务

86、BackgroundDexOptService – dex后台优化服务,在packmanager中有调用

87、PruneInstantAppsJobService

88、ShortcutService – 快捷方式服务

89、LauncherAppsService – Launcher应用相关的服务

90、MediaProjectionManagerService – 媒体投影服务,可用于录屏或者屏幕投射

91、WearConnectivityService – 穿戴设备连接服务

92、WearDisplayService – 穿戴设备显示服务

93、WearLeftyService – 穿戴设备左撇子服务

94、WearTimeService – 穿戴设备时间服务

95、CameraServiceProxy

96、MmsServiceBroker – 彩信服务

97、AutofillManagerService – 自动填充服务,比如自动填充密码,看说明https://developer.android.google.cn/guide/topics/text/autofill

98、CarServiceHelperService

99、SystemUIService – SystemUi状态栏等

四、其他说明

1、线程是同步执行还是异步执行的?

根据代码看,大部分服务的启动是同步执行的,即启动完成一个服务才会启动后面的服务,因为后面的一些服务会引用到前面的服务,如下图:

但是也有一些服务是在子线程中处理的,可能是异步执行的

还要注意有个startBootPhase函数(还未查看此函数)

2、如何查看服务是否在进程中

这些服务通常是子线程中运行的,度娘说可以通过下面的指令查看子线程

ps -T -p 进程id

进程id是指system_server的进程id。

但是我用这个看不到子进程,使用下面的命令可以看到

ps -T -A|grep 进程id

 Posted by on 2020-03-09

Android8.1系统中启用bootchart

 分类:Android, Android, Java, Operating System 阅读 (39)  Android8.1系统中启用bootchart已关闭评论
3月 072020
 

bootchart是用于记录开机时进程启动时间的工具

默认情况下是没有启用的,在init.rc中是有启动的,看如下代码:

但是,查看了一下bootchart的源码(在system/core/init/bootchart.cpp中),它启动要判断另外一个条件,代码如下:

也就是说检查/data/bootchart/enabled文件是否存在(不管文件是不是有内容),如果存在就启用bootchart,这样就好办了,我们在/data/bootchart中随便新建一个名字enabled的空文件就好了。

修改完后再重新启动安卓系统发现/data/bootchart目录下有了下面几个文件:

header

proc_diskstats.log

proc_ps.log

proc_stat.log

接下来就可以用其他工具根据这些log生成图片了,我使用的是linux下的pybootchartgui工具

 

 Posted by on 2020-03-07

pybootchartgui使用说明

 分类:Android, Linux, Operating System 阅读 (36)  pybootchartgui使用说明已关闭评论
3月 072020
 

pybootchartgui是用于生成linux或者android系统bootchart开机时间图表的工具

使用方式:

pybootchartgui bootchart_log_path

bootchart_log_path是bootchart生成的log的路径

其他参数说明:

-o 输出文件的路径,必须包含文件名

-n 不精简进程树,显示的更全

–verbose 显示更详细的log,是pybootchartgui的log和生成的图片没有关系

–show-pid 在生成的图标中显示进程id

帮助列表:

 

 Posted by on 2020-03-07

Android模拟器部分参数说明

 分类:Android, Android, Java, Operating System 阅读 (37)  Android模拟器部分参数说明已关闭评论
3月 052020
 

模拟器版本Android emulator version 26.1.3.0 (build_id 4240222) 

本文所述都是基于android8.1系统源码编译后的模拟器程序,不是android studio中的模拟器

部分参数说明:

-screen 触屏模式,可以为如下参数:touch, multi-touch, or no-touch

-accel 加速模式,可以为如下参数:on, off, auto

-writable-system 执行adb remount后system和vender分区可写

-skin 皮肤名称,如果是安卓系统源码,皮肤在development/tools/emulator/skins目录下

-wipe-data 清除用户数据

-shell 看着是可以显示系统的log了,其他区别不清楚

-cores 模拟器的cpu核心数

-gpu 设置硬件OpenGLES模拟模式,可选参数:on, off, auto

-memory 设置模拟器的物理内存大小,单位MB,有的时候设置比较大的值会导致模拟器无法启动

-show-kernel 显示内核消息

-no-boot-anim 禁止开机动画,加速模拟器启动速度,有的时候加上模拟器启动不了

-tcpdump <file> 将网络包抓到某个文件

-bootchart 允许-bootcharting,具体可以百度搜索一下bootchart

-selinux <disabled|permissive> 是否开启selinux

-dpi-device 设置设备的dpi

参数帮助列表:

其他的配置文件

在生成的镜像目录中还有一个config.ini,也可以进行一些配置,具体参考自己机器上的文件进行配置

在我的机器上是out/target/product/generic_x86_64/config.ini这个文件

 Posted by on 2020-03-05

adb捕获系统广播的方法

 分类:Android, Android, Java, Operating System 阅读 (113)  adb捕获系统广播的方法已关闭评论
10月 182019
 

用于监测最近一段时间内发出的全局广播

adb shell dumpsys activity | grep BroadcastRecord |grep -v android.

grep -v android.意思是不显示包含android.字符的广播

dumpsys显示的广播在10秒左右就会被清除,所以在广播发送以后短时间内才有效

 Posted by on 2019-10-18

树莓派gpio编程(一)控制Led灯

 分类:C++, Linux, Operating System, Others, Uncategorized 阅读 (299)  树莓派gpio编程(一)控制Led灯已关闭评论
7月 112019
 
一、编程语言

  个人比较喜欢c语言,所以后面的编程都会使用c语言。

  使用c语言的话可以使用用wiringPi类库。

  1、查看是否安装wiringPi类库,输入下面的命令,如果返回版本信息则表示已安装wiringPi库

  2、如果没有安装,输入下面的命令安装

  3、wiringPi源码

  github上有一个wiringPi的代码库,但那个并不是wiringPi的源码,其源码在下面这个地址中

  https://git.drogon.net/

二、硬件连接

  将Led灯的两个针脚分别连到GND和GPIO0两个接口上,网上有的教程还说要连上一个电阻,但是俺没有,就直接连上了。

三、软件编写

  新建一个ledblink.c文件,然后输入下面的代码

四、软件编译

  输入下面的命令编译

五、执行程序查看效果

  编译完成后,会生成一个ledblink的可执行程序,输入./ledblink运行,看led灯是不是开始闪烁了!

 Posted by on 2019-07-11

Linux下使用dd制作树莓派系统盘

 分类:Linux, Operating System, Others, Others 阅读 (717)  Linux下使用dd制作树莓派系统盘已关闭评论
7月 052019
 
一、文章背景

  本文基于Ubuntu16,pi zero WH,树莓派镜像版本2019-06-20_raspbian_full

  树梅派官方推荐使用Etcher制作镜像,但是下载速度实在是太慢了,使用dd也可以搞定。

二、下载镜像

  官网镜像下载地址:https://www.raspberrypi.org/downloads/raspbian/

  首先下载树梅派系统镜像包,是一个zip文件,如:2019-06-20_raspbian_full_latest.zip

  解决zip包后得到img镜像文件,如:2019-06-20-raspbian-buster-full.img

三、准备sd卡

  将sd卡连接电脑,然后执行df -h

  拔掉sd卡后再执行一次df -h

  有变化的那一项即是sd卡的设备名称,如:/dev/sdc1

  /dev/sdc即是sd卡的主设备名,先执行下面命令卸载它的子分区

  假如还有sdc2、sdc3统统卸载掉

四、烧录系统

  执行下面的命令烧录系统

  if=后面是镜像所在的路径

  of=后面是sd卡设备名称

 Posted by on 2019-07-05