自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 3670

原创 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 205

原创 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 3760 1

原创 ServiceManager

ServiceManager是用来管理系统服务的。1.系统启动时向ServiceManager中添加服务系统启动时会启动SystemServer进程,SystemServer进程会开启引导服务,核心服务以及其他服务,这些服务开启成功之后会被添加到ServiceManager中,如:InputManagerService inputManager = new InputManagerService(context);ServiceManager.addService(Context.INP.

2021-08-15 16:38:14 472

原创 音频相关概念

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 856

原创 Engine::getDeviceForStrategyInt()解析

//audio_devices_t是int类型audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy, DeviceVector availableOutputDevices, DeviceVector availableI.

2021-04-24 22:50:02 1316

原创 音频输出设备的选择

场景:使用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 2750

原创 散列表

1.散列函数无论你给它什么数据,它都还你一个数字,也就是"将输入映射到数字"查找时间为O(1);2.散列表它是一种数据结构,结合使用了散列函数和数组;原理是:通过散列函数将输入转化成数组的索引,在数组的该索引下保存数据;数组和链表都是直接被映射到内存,而散列表它是使用散列函数来确定元素的存储位置,使用数组来存储数据;散列表由键和值组成,散列表将键映射到值;3.应用(1)模拟映射关系散列表应用于大海捞针式的查找;①电话本:将姓名映射到电话号码;②访问网站时,将网址转

2021-03-30 09:23:04 91

原创 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 3123

原创 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 738

原创 android 横竖屏切换 源码剖析

以通知栏中下拉菜单里面的"自动旋转"按钮为例子,说下横竖屏切换的原理;点击状态栏中的"自动旋转"按钮,会走下面代码:frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.javaprotected void handleClick() { //"自动旋转"的...

2019-02-28 19:45:16 2791 1

原创 PowerManagerService:电池电量管理

前言:手机电池的电量主要由两种元件消耗:CPU和显示屏,因此设法降低这两种元件的耗电量就是电源管理的关键;       针对CPU和显示屏,分别有两种节约能源的方案:(1)CPU:CPU大多有低频率和高频率两种工作频率,为了省电,大部分时间内cpu都工作在降低频率下,只有进行密集计算时,如视频解码才会切换到高频状态;(2)显示屏:显示屏省电的方法是尽量减少亮屏时间,但是显示屏的开关和应用有很...

2019-02-19 19:58:36 2726

原创 BatteryService:电池电量管理

前言:BatteryService用于获取电池信息、充电状态等,如果想对Android的功耗控制有更深入的了解,有必要分析一下BatteryService。1.来看下BatteryService.java:BatteryService.javapublic BatteryService(Context context) { super(context); mCo...

2019-02-16 11:41:15 5562

原创 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 1528

原创 test命令

前言:Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。test命令和关系运算符有点像。1.数值测试参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真 实例演示:num1=1...

2019-02-13 10:13:20 428

原创 shell运算符

前言:原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。1.算术运算符#!/bin/bashval=`expr 2 + 2`echo "两数之和为 : $val" 注意:(1)完整的表达式要被 ` ` 包含,使用的是反引号 ` 而不是单引号 ';(...

2019-02-13 09:44:25 164

原创 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 147

原创 流程控制

1.if else格式如下:if [ condition1 ]; then command1elif [ condition2 ]; then command2else command3fi以if开始,fi结束;每个if判断语句后面都跟着then; 2.for循环 ...

2019-02-12 15:11:47 108

原创 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 116

原创 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 586

原创 一系列命令的连贯执行

前沿:某些情况下,很多命令想一次性输入,而不要分次执行,这可如何是好?有两种方式可以解决上述问题,一种是写脚本(这个我们暂时不介绍),另外一种就是使用一些特殊符号来控制命令的连贯执行。怎么控制呢?1.顺序执行command1;command2;command3使用分号;将一系列的命令隔开,这样一来,分号前的命令执行完后就会立刻接着执行后面的命令了。 2.选择执行...

2019-02-12 11:05:33 366

原创 输入/输出重定向

前言:通常,我们会在终端输入一些命令,这些命令被系统处理了之后,系统又通过在终端显示的方式将输出结果呈现给我们,输入和输出都是终端;而重定向,就是指定输入/输出到某个文件,而不再是终端;1.command &gt; filecommand是指一个命令,上面这个命令执行command然后将输出的内容存入file。注意:任何file内的已经存在的内容将被新内容替代。举例:tes...

2019-02-11 11:27:46 1036

原创 注释

1.单行注释以 # 开头的行就是注释,会被解释器忽略,通过每一行加一个 # 号设置多行注释,如:#打印echo "我是ren" 2.多行注释使用 :&lt;&lt;字符串 进行多行注释,如::&lt;&lt;!WOSHIHAODE!echo "我是ren"也可以用::&lt;&lt;?WOSHIHAODE?echo "我是ren"讲解: ..

2019-02-11 09:35:29 168

原创 类加载全过程

前言:在很长的一段时间里,我对类加载机制一直弃之不顾,直到碰到下面的两段代码时,促使我去学习类加载的机制。疑惑1:public class Test { class A{ public void print(){ } } //代码1 private void methodA(){ ...

2019-02-03 23:51:35 640

原创 Notification的音效,振动,指示灯

前言:在创建一个通知的时候,我们除了指定通知的信息外,还可以指定通知的震动,响铃以及指示灯,今天就从源码的角度来分析下通知的震动,响铃以及指示灯是如何实现的;1.首先,要想在通知来临时开启指示灯,需要使用调用下面函数:Settings.System.putInt(mContext.getContentResolver(),NOTIFICATION_LIGHT_PULSE, val ? 1...

2019-02-02 20:48:24 2158 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 4483

原创 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 1471

原创 Activity启动模式源码剖析

前言:之前我们分析过Activity在AMS中的启动流程,当时也简单的说了下Activity的启动模式,现在我们更详细,更全面的解析一下它;启动Activity的时候,Activity.startActivity()方法会将启动流程交给AMS,AMS又将启动交给ActivityStarter处理,关于Activity的启动模式,就在ActivityStarter.startActivity...

2019-01-30 20:08:36 836

原创 状态模式的简单模板

前言:在分析通话过程中声音输出设备切换的时候,我们发现每一种设备,它内部都封装了一套自己的逻辑处理,当我们切换到某一个设备时,就会走相应的流程,这就是典型的状态模式;状态模式简化了if,else的逻辑判断,可维护性大大加强,后期添加功能时也是十分的方便;我们今天就来写个最简单的状态模式的模板,后续再在这个简单的模板上面添加更加复杂的逻辑;还是以CallAudioManager管理所...

2019-01-27 22:27:37 286

原创 adb常用命令以及log抓取

1. 查看设备adb devices //显示连接的设备如果输入adb devices时,显示Mew0115700061AFA no permissions;需要将手机的USB调试设置到传输照片即可;2.查看当前的Activityadb shell dumpsys activity activities此时会显示TaskRecord的消息,在这里面可以...

2019-01-25 19:41:57 3892

原创 UserManager的使用

前沿:在手机的Settings当中,有一项菜单栏是用来管理手机的当前用户的,点开这个菜单栏,会发现系统将手机用户分成了3类,分别是管理员,访客和自定义用户;管理员,访客是系统为我们预设的,自定义用户可由我们自由添加或者删除;并且这些用户是相互可以切换的,每个用户都有与之对应的系统属性;这3类用户用UserManager进行管理,今天我们并不是来分析UserManager,而是看下系统是...

2019-01-25 16:46:19 9040

原创 android音频系统(7):通话过程中的音频输出设备切换

前言:由于通话比较特殊,Android对于通话过程中音频输出设备的切换做了特殊处理,它在上层也是通过切换音频播放状态来完成切换操作的,android用CallAudioState来封装通话过程中的音频播放状态;1.CallAudioState解析CallAudioState的属性CallAudioState.javapublic static final int ROUTE_EA...

2019-01-24 21:26:31 7792

原创 android音频系统(6):AudioService之音频输出通道切换

前言:音频输出的方式有很多种,外放即扬声器(Speaker)、听筒(Telephone Receiver)、有线耳机(WiredHeadset)、蓝牙音箱(Bluetooth A2DP)等,电话免提、插拔耳机、连接断开蓝牙设备等操作系统都会自动切换Audio音频到相应的输出设备上。我们知道,音频输出通道切换有些是系统自动切换的,但是有些自动切换并不是我们想要的,如:音乐App在听歌时,需要...

2019-01-23 11:57:04 20248 6

原创 Activity常用知识总结

前言:从根Activity的启动流程出发,总结下应用层Activity在开发过程中常用到的知识; 还是以"Launcher中启动Settings"为例:1.Launcher暂停也就是ActivityThread.handlePauseActivity():(1)是否由用户主动退出而导致暂停onUserInteraction();onUserLeaveHint();(...

2019-01-17 13:46:55 275

原创 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 1548

原创 开发工具积累

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 268

原创 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 111

原创 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 1732

原创 控件属性

前言:在开发过程中我们会经常遇到修改控件属性以及窗口属性的问题,现在就来分析下这些属性;1.先从一个xml布局开始:&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:la...

2019-01-04 20:23:20 798

原创 AMS数据结构(1)

1.ActivityStackSupervisor它是一个计算类,所有关于ActivityRecord,TaskRecord,ActivityStack的操作都是在这里面进行;①来看这句代码:ActivityRecord sourceRecord = mSupervisor.isInAnyStackLocked(resultTo);其中,resultTo是IBinder类型,mS...

2019-01-03 20:29:36 577

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除