- 博客(52)
- 收藏
- 关注
原创 android-x86 install安装流程注解
## By Chih-Wei Huang <cwhuang@linux.org.tw>## License: GNU Public License# We explicitely grant the right to use the scripts# with Android-x86 project.#tempfile=/tmp/temp-$$menufile=/tmp/menu-$$CPIO=cpioOS_TITLE=${OS_TITLE:-Android-x86}
2021-11-12 18:15:24
3848
原创 shell常用知识
1.变量(1)定义变量变量名=变量值如:num=10(2)引用变量$变量名(3)清除变量值unset 变量名(4)从键盘获取变量值/*在一行上显示和添加提示,使用read -p*/read 变量名1 变量名2(5)导出环境变量作用是:将环境变量设为全局变量,让其他shell脚本识别该变量,如:export DATA=250查看环境变量:env此时可看到环境变量中已经有 DATA;这样,可在终端或者在其他的shell中直接读取:echo "data=$DATA"(5)预设
2021-10-20 17:20:56
247
原创 android 音量调节
音量调节分3个部分,分别是master volume(硬件音量,控制声卡),stream volume(流音量)和track volume(app音量)。app音量大小公式:app_mix = master_volume * stream_volume * track_volume;其中master_volume,stream_volume和track_volume都是百分比,1表示音量调到最大;音量最大分贝是0db,表示没有衰减,也就是音源音量;1.stream volume(使用滑动.
2021-10-15 14:11:02
4132
1
原创 ServiceManager
ServiceManager是用来管理系统服务的。1.系统启动时向ServiceManager中添加服务系统启动时会启动SystemServer进程,SystemServer进程会开启引导服务,核心服务以及其他服务,这些服务开启成功之后会被添加到ServiceManager中,如:InputManagerService inputManager = new InputManagerService(context);ServiceManager.addService(Context.INP.
2021-08-15 16:38:14
540
原创 音频相关概念
1.音频硬件设备也称为module,定义在services/audiopolicy/config/audio_policy_configuration.xml:分别有primary,a2dp,usb,r_submix;配置文件中的每一个module都被描述为HwModule,保存在mHwModules中;2.output可以理解成是输出端设备,常用的输出端设备有:prmary_out,low_latency,deep_buffer,compress_offload,mutil_c
2021-07-05 00:01:21
953
原创 Engine::getDeviceForStrategyInt()解析
//audio_devices_t是int类型audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy, DeviceVector availableOutputDevices, DeviceVector availableI.
2021-04-24 22:50:02
1444
原创 音频输出设备的选择
场景:使用AudioTrack播放一段音频,streamtype是AUDIO_STREAM_MUSIC;跟踪音频输出设备选择的流程,代码会走到这里:1.frameworks\av\media\libaudioclient\AudioTrack.cppstatus_t AudioTrack::createTrack_l(){ ...... //假设此时播放的是音乐,那这里的streamType是Music类型,所以属性attr为NULL audio_attri
2021-04-18 23:18:00
3140
原创 散列表
1.散列函数无论你给它什么数据,它都还你一个数字,也就是"将输入映射到数字"查找时间为O(1);2.散列表它是一种数据结构,结合使用了散列函数和数组;原理是:通过散列函数将输入转化成数组的索引,在数组的该索引下保存数据;数组和链表都是直接被映射到内存,而散列表它是使用散列函数来确定元素的存储位置,使用数组来存储数据;散列表由键和值组成,散列表将键映射到值;3.应用(1)模拟映射关系散列表应用于大海捞针式的查找;①电话本:将姓名映射到电话号码;②访问网站时,将网址转
2021-03-30 09:23:04
112
原创 apk打包apk后发给别人,安装失败
Android studio 打包apk后发给别人,安装失败。失败原因显示:应用是非正式发布版本,当前设备不支持安装。在自己手机上也无法安装,之后连接USB进行调试时可以运行,打包成APK安装就会显示下图错误:2.原因分析:造成该问题的原因是Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly="true"属性。该属性导致在IDE中使用Run生成的apk在大部分手机上只能用adb inst
2021-02-15 12:35:02
3342
原创 SystemServer简介
系统启动过程:由init进程->Zygote进程->SystemServer进程。SystemServer由zygote进程启动。启动后,会调用SystemServer.main()方法:SystemServer.javapublic final class SystemServer { public static void main(String[] args) { //创建SystemServer实例并调用run()方法 new Syste
2021-01-27 14:36:50
769
原创 android 横竖屏切换 源码剖析
以通知栏中下拉菜单里面的"自动旋转"按钮为例子,说下横竖屏切换的原理;点击状态栏中的"自动旋转"按钮,会走下面代码:frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.javaprotected void handleClick() { //"自动旋转"的...
2019-02-28 19:45:16
2920
1
原创 PowerManagerService:电池电量管理
前言:手机电池的电量主要由两种元件消耗:CPU和显示屏,因此设法降低这两种元件的耗电量就是电源管理的关键; 针对CPU和显示屏,分别有两种节约能源的方案:(1)CPU:CPU大多有低频率和高频率两种工作频率,为了省电,大部分时间内cpu都工作在降低频率下,只有进行密集计算时,如视频解码才会切换到高频状态;(2)显示屏:显示屏省电的方法是尽量减少亮屏时间,但是显示屏的开关和应用有很...
2019-02-19 19:58:36
2871
原创 BatteryService:电池电量管理
前言:BatteryService用于获取电池信息、充电状态等,如果想对Android的功耗控制有更深入的了解,有必要分析一下BatteryService。1.来看下BatteryService.java:BatteryService.javapublic BatteryService(Context context) { super(context); mCo...
2019-02-16 11:41:15
5806
原创 LightsService:led灯显示管理
前言:LightsService是用来管理手机led指示灯显示;1.先看有哪些类型的灯:LightsManager.javapublic abstract class LightsManager { public static final int LIGHT_ID_BACKLIGHT = Type.BACKLIGHT;//背光灯 public static fin...
2019-02-15 14:28:16
1693
原创 test命令
前言:Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。test命令和关系运算符有点像。1.数值测试参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真 实例演示:num1=1...
2019-02-13 10:13:20
457
原创 shell运算符
前言:原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。1.算术运算符#!/bin/bashval=`expr 2 + 2`echo "两数之和为 : $val" 注意:(1)完整的表达式要被 ` ` 包含,使用的是反引号 ` 而不是单引号 ';(...
2019-02-13 09:44:25
186
原创 Shell数组
Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:array_name=(value1 ... valuen)1.数组表示(1)括号表示,如:my_array=(A B "C" D)(2)使用下标来定义数组:array_name[0]=value0array_...
2019-02-12 15:18:45
176
原创 流程控制
1.if else格式如下:if [ condition1 ]; then command1elif [ condition2 ]; then command2else command3fi以if开始,fi结束;每个if判断语句后面都跟着then; 2.for循环 ...
2019-02-12 15:11:47
127
原创 shell函数
shell中函数的定义格式如下:[ function ] funname [()]{ action; [return int;]}上面[]的意思是指可要可不要,如:函数1:function a (){ echo "haha"; return 1;}函数2:function b{ echo "haha";}函数3:c...
2019-02-12 15:11:31
143
原创 Shell 传递参数
前言:之前在编译源码的时候,总是使用这条编译指令:./SLB767_meig_userdebug.sh userdebug RS51,./SLB767_meig_userdebug.sh我知道是执行SLB767_meig_userdebug.sh文件,那后面userdebug和RS51的是什么呢?答案:它们是传递进来的参数。在执行 Shell 脚本时,我们可以向脚本传递参数,如:./tes...
2019-02-12 15:11:14
614
原创 一系列命令的连贯执行
前沿:某些情况下,很多命令想一次性输入,而不要分次执行,这可如何是好?有两种方式可以解决上述问题,一种是写脚本(这个我们暂时不介绍),另外一种就是使用一些特殊符号来控制命令的连贯执行。怎么控制呢?1.顺序执行command1;command2;command3使用分号;将一系列的命令隔开,这样一来,分号前的命令执行完后就会立刻接着执行后面的命令了。 2.选择执行...
2019-02-12 11:05:33
400
原创 输入/输出重定向
前言:通常,我们会在终端输入一些命令,这些命令被系统处理了之后,系统又通过在终端显示的方式将输出结果呈现给我们,输入和输出都是终端;而重定向,就是指定输入/输出到某个文件,而不再是终端;1.command > filecommand是指一个命令,上面这个命令执行command然后将输出的内容存入file。注意:任何file内的已经存在的内容将被新内容替代。举例:tes...
2019-02-11 11:27:46
1086
原创 注释
1.单行注释以 # 开头的行就是注释,会被解释器忽略,通过每一行加一个 # 号设置多行注释,如:#打印echo "我是ren" 2.多行注释使用 :<<字符串 进行多行注释,如::<<!WOSHIHAODE!echo "我是ren"也可以用::<<?WOSHIHAODE?echo "我是ren"讲解: ..
2019-02-11 09:35:29
199
原创 类加载全过程
前言:在很长的一段时间里,我对类加载机制一直弃之不顾,直到碰到下面的两段代码时,促使我去学习类加载的机制。疑惑1:public class Test { class A{ public void print(){ } } //代码1 private void methodA(){ ...
2019-02-03 23:51:35
674
原创 Notification的音效,振动,指示灯
前言:在创建一个通知的时候,我们除了指定通知的信息外,还可以指定通知的震动,响铃以及指示灯,今天就从源码的角度来分析下通知的震动,响铃以及指示灯是如何实现的;1.首先,要想在通知来临时开启指示灯,需要使用调用下面函数:Settings.System.putInt(mContext.getContentResolver(),NOTIFICATION_LIGHT_PULSE, val ? 1...
2019-02-02 20:48:24
2216
1
原创 android手机Down版本
1.首先是进入到out目录找到有system.img的地方:cd out/target/product/XXXXXX目录下有system.img 2.开始刷机adb reboot bootloadersudo fastboot flash system system.img注意:如果提示找不到应用,得先安装才能使用:sudo apt-get install ...
2019-01-31 09:16:24
4566
原创 echo命令
Shell的echo 指令用于字符串的输出,如:1.普通字符串echo "I am a student"当然双引号也可以忽略,写成:echo I am a student但是建议加上双引号; 2.转义字符要想\n等转义字符有意义,就必须得在前面加上-e:echo -e "I am a student\n"echo "No"上面的输出结果是:I ...
2019-01-30 22:04:40
1505
原创 Activity启动模式源码剖析
前言:之前我们分析过Activity在AMS中的启动流程,当时也简单的说了下Activity的启动模式,现在我们更详细,更全面的解析一下它;启动Activity的时候,Activity.startActivity()方法会将启动流程交给AMS,AMS又将启动交给ActivityStarter处理,关于Activity的启动模式,就在ActivityStarter.startActivity...
2019-01-30 20:08:36
881
原创 状态模式的简单模板
前言:在分析通话过程中声音输出设备切换的时候,我们发现每一种设备,它内部都封装了一套自己的逻辑处理,当我们切换到某一个设备时,就会走相应的流程,这就是典型的状态模式;状态模式简化了if,else的逻辑判断,可维护性大大加强,后期添加功能时也是十分的方便;我们今天就来写个最简单的状态模式的模板,后续再在这个简单的模板上面添加更加复杂的逻辑;还是以CallAudioManager管理所...
2019-01-27 22:27:37
308
原创 adb常用命令以及log抓取
1. 查看设备adb devices //显示连接的设备如果输入adb devices时,显示Mew0115700061AFA no permissions;需要将手机的USB调试设置到传输照片即可;2.查看当前的Activityadb shell dumpsys activity activities此时会显示TaskRecord的消息,在这里面可以...
2019-01-25 19:41:57
3993
原创 UserManager的使用
前沿:在手机的Settings当中,有一项菜单栏是用来管理手机的当前用户的,点开这个菜单栏,会发现系统将手机用户分成了3类,分别是管理员,访客和自定义用户;管理员,访客是系统为我们预设的,自定义用户可由我们自由添加或者删除;并且这些用户是相互可以切换的,每个用户都有与之对应的系统属性;这3类用户用UserManager进行管理,今天我们并不是来分析UserManager,而是看下系统是...
2019-01-25 16:46:19
9341
原创 android音频系统(7):通话过程中的音频输出设备切换
前言:由于通话比较特殊,Android对于通话过程中音频输出设备的切换做了特殊处理,它在上层也是通过切换音频播放状态来完成切换操作的,android用CallAudioState来封装通话过程中的音频播放状态;1.CallAudioState解析CallAudioState的属性CallAudioState.javapublic static final int ROUTE_EA...
2019-01-24 21:26:31
8289
原创 android音频系统(6):AudioService之音频输出通道切换
前言:音频输出的方式有很多种,外放即扬声器(Speaker)、听筒(Telephone Receiver)、有线耳机(WiredHeadset)、蓝牙音箱(Bluetooth A2DP)等,电话免提、插拔耳机、连接断开蓝牙设备等操作系统都会自动切换Audio音频到相应的输出设备上。我们知道,音频输出通道切换有些是系统自动切换的,但是有些自动切换并不是我们想要的,如:音乐App在听歌时,需要...
2019-01-23 11:57:04
21651
8
原创 Activity常用知识总结
前言:从根Activity的启动流程出发,总结下应用层Activity在开发过程中常用到的知识; 还是以"Launcher中启动Settings"为例:1.Launcher暂停也就是ActivityThread.handlePauseActivity():(1)是否由用户主动退出而导致暂停onUserInteraction();onUserLeaveHint();(...
2019-01-17 13:46:55
295
原创 AS常用指令,常用功能,以及常见问题
1.AS常用指令:(1)查找:①Ctrl+shift+N全局查找一个类或者一个文件;②Crtl+F搜索的时候,有几个设置:In Comments only:仅在注释中搜索;In Literals only:仅在文本中搜索,这是我们经常用的;Ctrl+Alt+shift+J 锁定查找到的结果,使用Alt+J,进行下一个结果的查找;使用Alt+Shift+J,逐个取消选...
2019-01-16 19:54:01
1643
原创 开发工具积累
1.Android Studio(1)简介:比较纯净版的Android Studio,解压后,安装路径在Android Studio\bin\studio64.exe;链接: android studio提取码: vbex(2)要想在AS中导入android源码项目,需要添加两个文件:android.iml和android.ipr;链接: AS文件提取码: xuqp(...
2019-01-16 19:47:58
288
原创 Git
前言:平时工作中的代码管理用到了Git,所以就总结下Git;推荐一篇写的很好的关于Git的教程,简单易懂:Git教程 1.把文件添加到版本库git add readme.txtgit add file2.txt file3.txtgit commit -m "wrote a readme file"git add是将修改从工作区提交到暂存区,git commit是将修...
2019-01-16 11:51:11
135
原创 AMS剖析(3):AMS与ActivityThread的交互
前言:前面追溯了Activity在AMS中的启动流程,接下来分析AMS与ActivityThread的交互,并详细讲解Activity的生命周期;还是以"Launcher中启动Settings"为例;1.Launcher.onPause()AMS与ActivityThread的第一次交互就是Launcher的暂停,发生在ActivityStack.startPausingLocke...
2019-01-14 12:56:52
1809
原创 控件属性
前言:在开发过程中我们会经常遇到修改控件属性以及窗口属性的问题,现在就来分析下这些属性;1.先从一个xml布局开始:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:la...
2019-01-04 20:23:20
826
原创 AMS数据结构(1)
1.ActivityStackSupervisor它是一个计算类,所有关于ActivityRecord,TaskRecord,ActivityStack的操作都是在这里面进行;①来看这句代码:ActivityRecord sourceRecord = mSupervisor.isInAnyStackLocked(resultTo);其中,resultTo是IBinder类型,mS...
2019-01-03 20:29:36
604
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人