<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[renshuguo123723的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/renshuguo123723</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; renshuguo123723]]></copyright><item><title><![CDATA[android-x86 install安装流程注解]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/121293263</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/121293263</guid><author>renshuguo123723</author><pubDate>Fri, 12 Nov 2021 18:15:24 +0800</pubDate><description><![CDATA[#
# By Chih-Wei Huang &lt;cwhuang@linux.org.tw&gt;
#
# License: GNU Public License
# We explicitely grant the right to use the scripts
# with Android-x86 project.
#

tempfile=/tmp/temp-$$
menufile=/tmp/menu-$$

CPIO=cpio
OS_TITLE=${OS_TITLE:-Android-x86}

]]></description><category></category></item><item><title><![CDATA[shell常用知识]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/120870653</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/120870653</guid><author>renshuguo123723</author><pubDate>Wed, 20 Oct 2021 17:20:56 +0800</pubDate><description><![CDATA[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)预设]]></description><category></category></item><item><title><![CDATA[android 音量调节]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/120782096</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/120782096</guid><author>renshuguo123723</author><pubDate>Fri, 15 Oct 2021 14:11:02 +0800</pubDate><description><![CDATA[音量调节分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(使用滑动.]]></description><category></category></item><item><title><![CDATA[ServiceManager]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/119714978</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/119714978</guid><author>renshuguo123723</author><pubDate>Sun, 15 Aug 2021 16:38:14 +0800</pubDate><description><![CDATA[ServiceManager是用来管理系统服务的。


1.系统启动时向ServiceManager中添加服务

系统启动时会启动SystemServer进程，SystemServer进程会开启引导服务，核心服务以及其他服务，这些服务开启成功之后会被添加到ServiceManager中，如：


InputManagerService inputManager = new InputManagerService(context);
ServiceManager.addService(Context.INP.]]></description><category></category></item><item><title><![CDATA[音频相关概念]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/118466462</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/118466462</guid><author>renshuguo123723</author><pubDate>Mon, 05 Jul 2021 00:01:21 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[Engine::getDeviceForStrategyInt()解析]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/116109519</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/116109519</guid><author>renshuguo123723</author><pubDate>Sat, 24 Apr 2021 22:50:02 +0800</pubDate><description><![CDATA[//audio_devices_t是int类型
audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy,
                                                DeviceVector availableOutputDevices,
                                                DeviceVector availableI.]]></description><category></category></item><item><title><![CDATA[音频输出设备的选择]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/115841529</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/115841529</guid><author>renshuguo123723</author><pubDate>Sun, 18 Apr 2021 23:18:00 +0800</pubDate><description><![CDATA[场景：使用AudioTrack播放一段音频，streamtype是AUDIO_STREAM_MUSIC；

跟踪音频输出设备选择的流程，代码会走到这里：


1.frameworks\av\media\libaudioclient\AudioTrack.cpp

status_t AudioTrack::createTrack_l(){

    ......
    
    //假设此时播放的是音乐，那这里的streamType是Music类型，所以属性attr为NULL
    audio_attri]]></description><category></category></item><item><title><![CDATA[散列表]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/115315961</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/115315961</guid><author>renshuguo123723</author><pubDate>Tue, 30 Mar 2021 09:23:04 +0800</pubDate><description><![CDATA[1.散列函数

无论你给它什么数据，它都还你一个数字，也就是"将输入映射到数字"查找时间为O(1)；

2.散列表

它是一种数据结构，结合使用了散列函数和数组；

原理是：通过散列函数将输入转化成数组的索引，在数组的该索引下保存数据；

数组和链表都是直接被映射到内存，而散列表它是使用散列函数来确定元素的存储位置，使用数组来存储数据；

散列表由键和值组成，散列表将键映射到值；

3.应用

(1)模拟映射关系

散列表应用于大海捞针式的查找；

①电话本：将姓名映射到电话号码；

②访问网站时，将网址转]]></description><category></category></item><item><title><![CDATA[apk打包apk后发给别人，安装失败]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/113815131</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/113815131</guid><author>renshuguo123723</author><pubDate>Mon, 15 Feb 2021 12:35:02 +0800</pubDate><description><![CDATA[Android studio 打包apk后发给别人，安装失败。

失败原因显示：应用是非正式发布版本，当前设备不支持安装。

在自己手机上也无法安装，之后连接USB进行调试时可以运行，打包成APK安装就会显示下图错误：



2.原因分析：


造成该问题的原因是Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly="true"属性。该属性导致在IDE中使用Run生成的apk在大部分手机上只能用adb inst]]></description><category></category></item><item><title><![CDATA[SystemServer简介]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/113243766</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/113243766</guid><author>renshuguo123723</author><pubDate>Wed, 27 Jan 2021 14:36:50 +0800</pubDate><description><![CDATA[系统启动过程：由init进程-&gt;Zygote进程-&gt;SystemServer进程。

SystemServer由zygote进程启动。启动后，会调用SystemServer.main()方法：


SystemServer.java
public final class SystemServer {
    public static void main(String[] args) {
        //创建SystemServer实例并调用run()方法
        new Syste]]></description><category></category></item><item><title><![CDATA[android 横竖屏切换 源码剖析]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/88033140</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/88033140</guid><author>renshuguo123723</author><pubDate>Thu, 28 Feb 2019 19:45:16 +0800</pubDate><description><![CDATA[以通知栏中下拉菜单里面的&quot;自动旋转&quot;按钮为例子，说下横竖屏切换的原理;


点击状态栏中的&quot;自动旋转&quot;按钮，会走下面代码：


frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java

protected void handleClick() {
  //&quot;自动旋转&quot;的...]]></description><category></category></item><item><title><![CDATA[PowerManagerService：电池电量管理]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/87603953</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/87603953</guid><author>renshuguo123723</author><pubDate>Tue, 19 Feb 2019 19:58:36 +0800</pubDate><description><![CDATA[
前言：手机电池的电量主要由两种元件消耗：CPU和显示屏，因此设法降低这两种元件的耗电量就是电源管理的关键;       针对CPU和显示屏，分别有两种节约能源的方案：
(1)CPU:CPU大多有低频率和高频率两种工作频率，为了省电，大部分时间内cpu都工作在降低频率下，只有进行密集计算时，如视频解码才会切换到高频状态;
(2)显示屏:显示屏省电的方法是尽量减少亮屏时间，但是显示屏的开关和应用有很...]]></description><category></category></item><item><title><![CDATA[BatteryService：电池电量管理]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/87431240</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/87431240</guid><author>renshuguo123723</author><pubDate>Sat, 16 Feb 2019 11:41:15 +0800</pubDate><description><![CDATA[
前言：BatteryService用于获取电池信息、充电状态等，如果想对Android的功耗控制有更深入的了解，有必要分析一下BatteryService。


1.来看下BatteryService.java:


BatteryService.java

public BatteryService(Context context) {
    super(context);

    mCo...]]></description><category></category></item><item><title><![CDATA[LightsService：led灯显示管理]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/87348160</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/87348160</guid><author>renshuguo123723</author><pubDate>Fri, 15 Feb 2019 14:28:16 +0800</pubDate><description><![CDATA[
前言：LightsService是用来管理手机led指示灯显示;


1.先看有哪些类型的灯：


LightsManager.java

public abstract class LightsManager {
    public static final int LIGHT_ID_BACKLIGHT = Type.BACKLIGHT;//背光灯
    public static fin...]]></description><category></category></item><item><title><![CDATA[test命令]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/87162327</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/87162327</guid><author>renshuguo123723</author><pubDate>Wed, 13 Feb 2019 10:13:20 +0800</pubDate><description><![CDATA[
前言：Shell中的 test 命令用于检查某个条件是否成立，它可以进行数值、字符和文件三个方面的测试。test命令和关系运算符有点像。


1.数值测试

参数
			说明
		-eq
			等于则为真
		-ne
			不等于则为真
		-gt
			大于则为真
		-ge
			大于等于则为真
		-lt
			小于则为真
		-le
			小于等于则为真
		实例演示：


num1=1...]]></description><category></category></item><item><title><![CDATA[shell运算符]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/87160158</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/87160158</guid><author>renshuguo123723</author><pubDate>Wed, 13 Feb 2019 09:44:25 +0800</pubDate><description><![CDATA[
前言：原生bash不支持简单的数学运算，但是可以通过其他命令来实现，例如 awk 和 expr，expr 最常用。

expr 是一款表达式计算工具，使用它能完成表达式的求值操作。


1.算术运算符


#!/bin/bash

val=`expr 2 + 2`
echo &quot;两数之和为 : $val&quot;

 注意：(1)完整的表达式要被 ` ` 包含，使用的是反引号 ` 而不是单引号 ';

(...]]></description><category></category></item><item><title><![CDATA[Shell数组]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/87091323</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/87091323</guid><author>renshuguo123723</author><pubDate>Tue, 12 Feb 2019 15:18:45 +0800</pubDate><description><![CDATA[Bash Shell 只支持一维数组（不支持多维数组），初始化时不需要定义数组大小。

Shell 数组用括号来表示，元素用&quot;空格&quot;符号分割开，语法格式如下：


array_name=(value1 ... valuen)

1.数组表示

(1)括号表示，如：


my_array=(A B &quot;C&quot; D)

(2)使用下标来定义数组:


array_name[0]=value0
array_...]]></description><category></category></item><item><title><![CDATA[流程控制]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/87085340</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/87085340</guid><author>renshuguo123723</author><pubDate>Tue, 12 Feb 2019 15:11:47 +0800</pubDate><description><![CDATA[1.if else

格式如下：


if [ condition1 ]; then
    command1
elif [ condition2 ]; then
    command2
else
    command3
fi

以if开始，fi结束;每个if判断语句后面都跟着then;

 

2.for循环

 ...]]></description><category></category></item><item><title><![CDATA[shell函数]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/87086905</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/87086905</guid><author>renshuguo123723</author><pubDate>Tue, 12 Feb 2019 15:11:31 +0800</pubDate><description><![CDATA[shell中函数的定义格式如下：


[ function ] funname [()]
{
    action;
    [return int;]
}

上面[]的意思是指可要可不要，如：


函数1：
function a ()
{
    echo &quot;haha&quot;;
    return 1;
}

函数2：
function b
{
    echo &quot;haha&quot;;
}

函数3：
c
...]]></description><category></category></item><item><title><![CDATA[Shell 传递参数]]></title><link>https://blog.youkuaiyun.com/renshuguo123723/article/details/87088368</link><guid>https://blog.youkuaiyun.com/renshuguo123723/article/details/87088368</guid><author>renshuguo123723</author><pubDate>Tue, 12 Feb 2019 15:11:14 +0800</pubDate><description><![CDATA[
前言：之前在编译源码的时候，总是使用这条编译指令：./SLB767_meig_userdebug.sh userdebug RS51，./SLB767_meig_userdebug.sh我知道是执行SLB767_meig_userdebug.sh文件，那后面userdebug和RS51的是什么呢？答案：它们是传递进来的参数。


在执行 Shell 脚本时，我们可以向脚本传递参数，如：./tes...]]></description><category></category></item></channel></rss>