android property_service add

本文介绍了一个用于Android系统的通话音量调整脚本及其实现方法。通过修改系统属性和使用shell脚本来动态调整3G通话时的音量级别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

for exzample:

in AduioService.java

add code in order to comand for Voice In Call: 

if (streamType == AudioSystem.STREAM_VOICE_CALL)

{

Log.w(TAG,"sendVolumeUpdate STREAM_VOICE_CALL,");

String Callvoice_lev = String.vlaueof(index);

systemProperties.set("3Gvoice_level",Callvoice_lev);   //add property service

SystemProperties.set("ctl.start","shell");

}


add 3Gvoice_volume.sh

#!/system/bin/sh

#6 steps ,max MONO_VAL is 31

FILE="/system/etc/3Gvolume"

MONOVAL=`getprop 3Gvoice_level`

MIN_VAL=15

MONO_VAL=`expr $MONOVAL \* 3`

if[`MONO_VAL -eq 0`];then

MONO_VAL=$MIN_VAL

else

MONO_VAL= `expr $MONO_VAL+$MIN_VAL`

fi

/system/bin/log -t 3Gvoice_down "MONO_VAL IS $MONOVAL"

MAX_VAL=`expr $MONO_VAL \< 31`

if[$MAX_VAL -ne 15];then

   if[-f $FILE];then

            rm $FILE

   fi

   touch $FILE

   echo $MONO_VAL > $FILE

   chmod 777 $FILE

   tinymix 5 $MONO_VAL

  /system/bin/log -t 3Gvoice_down "tinymix set numid=3  $MONO_VAL,$MONO_VAL is down!"

  fi

exit 0


in init.rc add service

add:

chmod 0777 /system/etc/3Gvoice_volume.sh


service 3Gvoice_volume /etc/3Gvoice_volume.sh

class main

user root

group radio cache aduio log

disabled

oneshot


[2025-07-02T06:40:43.152Z] [ 98% 20893/21120] Copy init script: out/target/product/spinel/vendor/etc/init/android.hardware.dumpstate@1.1-service.xiaomi.rc [2025-07-02T06:40:43.152Z] FAILED: out/target/product/spinel/vendor/etc/init/android.hardware.dumpstate@1.1-service.xiaomi.rc [2025-07-02T06:40:43.152Z] /bin/bash -c "(out/host/linux-x86/bin/host_init_verifier -p out/target/product/spinel/obj/ETC/passwd_system_intermediates/passwd_system -p out/target/product/spinel/obj/ETC/passwd_system_ext_intermediates/passwd_system_ext -p out/target/product/spinel/obj/ETC/passwd_vendor_intermediates/passwd_vendor -p out/target/product/spinel/obj/ETC/passwd_odm_intermediates/passwd_odm -p out/target/product/spinel/obj/ETC/passwd_product_intermediates/passwd_product --property-contexts=out/target/product/spinel/obj/ETC/plat_property_contexts_intermediates/plat_property_contexts --property-contexts=out/target/product/spinel/obj/ETC/system_ext_property_contexts_intermediates/system_ext_property_contexts --property-contexts=out/target/product/spinel/obj/ETC/product_property_contexts_intermediates/product_property_contexts --property-contexts=out/target/product/spinel/obj/ETC/vendor_property_contexts_intermediates/vendor_property_contexts --property-contexts=out/target/product/spinel/obj/ETC/odm_property_contexts_intermediates/odm_property_contexts vendor/xiaomi/proprietary/dumpstate/1.1/android.hardware.dumpstate@1.1-service.xiaomi.rc ) && (mkdir -p out/target/product/spinel/vendor/etc/init/ ) && (rm -f out/target/product/spinel/vendor/etc/init/android.hardware.dumpstate@1.1-service.xiaomi.rc ) && (cp \"vendor/xiaomi/proprietary/dumpstate/1.1/android.hardware.dumpstate@1.1-service.xiaomi.rc\" \"out/target/product/spinel/vendor/etc/init/android.hardware.dumpstate@1.1-service.xiaomi.rc\" )" [2025-07-02T06:40:43.152Z] host_init_verifier: Could not read line from 'out/target/product/spinel/obj/ETC/vendor_property_contexts_intermediates/vendor_property_contexts': Match operation 'add' is not valid: must be either 'prefix' or 'exact' [2025-07-02T06:40:43.152Z] [ 98% 20894/21120] Copy init script: out/target/product/spinel/vendor/etc/init/android.hardware.security.keymint-service.mitee.rc
最新发布
07-03
<think>我们正在处理一个Android构建失败的问题,错误信息涉及复制init脚本时出现host_init_verifier错误,具体是“Matchoperation 'add'is notvalid”。根据错误信息,问题出现在一个名为`android.hardware.dumpstate@1.1-service.xiaomi.rc`的init脚本中。根据引用[2]和引用[3],我们知道init.rc文件是Android初始化过程中使用的配置文件,由init进程解析。这些文件有严格的语法规则,任何语法错误都可能导致构建失败或启动失败。错误信息“Match operation'add' isnot valid”表明在.rc文件中使用了无效的操作。在init.rc语法中,操作通常包括`start`,`stop`, `restart`, `class_start`, `class_stop`等。而`add`操作并不是标准的init操作。因此,问题可能是在.rc文件中错误地使用了`add`关键字。我们需要检查`android.hardware.dumpstate@1.1-service.xiaomi.rc`文件的内容,特别是其中是否有使用`add`的行。根据引用[1]中提供的补丁片段,我们可以看到类似以下内容: ```hidl-gen $options \-ohardware/libhardware/include/hardware/sensors-base.h\android.hardware.sensors@1.0#hidl-gen $options \#-ohardware/libhardware/include/hardware/nfc-base.h\ #android.hardware.nfc@1.0hidl-gen $options \-o hardware/libhardware/include/hardware/gnss-base.h\android.hardware.gnss@1.0```但这部分是关于生成头文件的,与我们的.rc文件无关。因此,我们需要关注的是`android.hardware.dumpstate@1.1-service.xiaomi.rc`文件本身。由于我们没有直接看到该文件的内容,我们可以推测:在.rc文件中,我们通常使用`service`关键字来定义一个服务,然后使用`class`、`user`、`group`等选项来配置服务。例如:``` servicemyservice /system/bin/myserviceclassmainuser rootgroup root```错误可能出现在非服务定义部分,比如在一个`on`块中使用了`add`。例如,init脚本中可以有`on`事件块,然后在块内使用命令。但是,`add`并不是一个有效的命令。因此,可能的解决方案是:1.检查`android.hardware.dumpstate@1.1-service.xiaomi.rc`文件,找到包含`add`的行。2.确定这个`add`的意图。如果它是想将服务添加到某个类,那么应该使用`class_start`或者`class`关键字(在服务定义中指定类,然后使用`class_start`来启动整个类)。3.修改该行,使用正确的init语法。例如,如果原来的行是:add myservice main那么这可能是错误的,正确的做法是在服务定义时指定类:classmain然后启动类可以使用`class_startmain`(在某个事件触发时)。另一种可能是,这个`add`可能是想设置某个属性?但是设置属性应该使用`setprop`命令。由于错误信息明确指出是“Match operation'add' isnot valid”,所以很可能是解析器在解析一个操作(即在一个`on`块中的命令)时遇到了`add`,而它不认识这个命令。因此,步骤总结如下:1.定位到`android.hardware.dumpstate@1.1-service.xiaomi.rc`文件。2.搜索文件中的`add`关键字。3.根据上下文判断`add`的意图,并替换为正确的init命令。如果问题仍然无法解决,可以尝试在AOSP的init语法文档中查找,或者检查是否有其他语法错误。另外,引用[3]提到,AndroidP(9.0)之后init的语法有更严格的要求,所以如果是老版本的脚本在新版本中使用,可能需要更新。由于我们没有具体的文件内容,只能给出一般性的建议。如果用户能提供该.rc文件的内容,我们可以更精确地定位问题。但是,根据错误信息,我们已经可以确定问题所在:在.rc文件中有一个无效的操作`add`,需要将其替换为正确的操作。因此,解决方案是修改该.rc文件,移除或替换`add`操作。注意:host_init_verifier是构建时运行的一个工具,用于验证init脚本的语法,因此任何语法错误都会在构建时被捕获。现在,我们生成相关问题:§§相关问题§§1.如何正确编写Android的init.rc脚本?2.除了`add`操作无效,还有哪些常见的init.rc语法错误?3.如何调试Android构建过程中的init脚本验证错误?4.在Android中,dumpstate服务的作用是什么?5.如何为特定设备(如Xiaomi)添加自定义的init服务?</think>### Android构建失败分析:init脚本复制错误 根据错误信息`Copy init script android.hardware.dumpstate@1.1-service.xiaomi.rc host_init_verifier error Match operation 'add' is not valid`,问题核心在于**init脚本语法验证失败**,具体是`add`操作符在`.rc`文件中非法使用。 #### 问题原因分析 1. **语法规则冲突** Android的init.rc文件使用特定语法(类似INI格式),操作符需符合[init语言规范](https://android.googlesource.com/platform/system/core/+/master/init/README.md)。`add`不是合法操作符,常见合法操作符包括: - `start`/`stop`:启停服务 - `class_start`/`class_stop`:启停服务类 - `write`:写文件 - `setprop`:设置属性 - `trigger`:触发事件 2. **设备特定配置问题** Xiaomi的dumpstate服务配置文件(`android.hardware.dumpstate@1.1-service.xiaomi.rc`)可能包含类似以下非法语句: ```ini # 错误示例 on property:persist.debug.enable=1 add service.dumpstate.debug true # "add"操作非法 ``` 3. **构建时验证机制** `host_init_verifier`工具会在构建阶段严格检查`.rc`文件语法[^3],任何非法操作都会中断构建。 #### 解决方案 **步骤1:定位问题文件** 在源码树中查找目标文件: ```bash find . -name "android.hardware.dumpstate@1.1-service.xiaomi.rc" # 通常路径示例:device/xiaomi/{device_name}/init/ ``` **步骤2:修正语法错误** 修改文件中的`add`操作为合法操作: ```diff # 原始错误代码 on boot - add my_property value # 非法操作 # 修正方案(二选一) # 方案1:改用setprop设置属性 + setprop my_property value # 方案2:改用write写入文件 + write /sys/module/module_name/parameters/param value ``` **步骤3:验证语法** 使用`host_init_verifier`手动测试: ```bash # 在AOSP根目录执行 out/host/linux-x86/bin/host_init_verifier device/xiaomi/.../android.hardware.dumpstate@1.1-service.xiaomi.rc ``` 需返回`All checks passed`。 **步骤4:重新构建** ```bash make -j$(nproc) # 或增量构建 m android.hardware.dumpstate@1.1-service ``` #### 预防措施 1. **语法检查工具** 在提交代码前运行: ```bash build/soong/scripts/check-init.sh <your.rc> ``` 2. **设备树审核** 检查`device/xiaomi`目录下其他`.rc`文件是否存在类似问题。 #### 技术背景补充 - **init.rc作用**:定义系统启动时服务的初始化和事件响应规则[^2] - **HIDL服务启动**:`android.hardware.*@version-service.rc`文件由`hidl-gen`工具生成,但设备厂商可覆盖默认配置[^1] - **验证机制**:Android 8.0+引入`host_init_verifier`,防止语法错误导致启动崩溃[^3] --- ### 相关问题 1. **如何正确编写Android设备的init.rc服务配置文件?** 2. **`hidl-gen`工具在HIDL服务开发中的具体作用是什么?[^1]** 3. **Android启动过程中init.rc的解析顺序是怎样的?[^3]** 4. **设备厂商自定义HIDL服务时需要注意哪些兼容性问题?** 5. **如何调试Android系统启动阶段的服务初始化失败问题?** [^1]: HIDL服务配置通过hidl-gen工具生成,厂商可自定义.rc文件覆盖默认行为 [^2]: init.rc文件定义服务启动规则,由init进程在启动阶段解析执行 [^3]: host_init_verifier在构建时验证init脚本语法,防止启动崩溃
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Keep Coding...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值