[Android6.0]App中调用init.rc中的服务,从而运行shell脚本

Author: Younix
Platform: RK3399
OS: Android 6.0
Kernel: 4.4
Version: v2017.07

需求:希望在 Android App 中添加 SPDIF 测试功能。对 Android App 开发不熟悉,为节省开发时间走 Android Audio Manager 太麻烦了。所以希望直接通过 shell 脚本,调用 tinyplay 命令来进行。

    • Initrc 中添加 spdiftest 服务
    • Devicemk 拷贝脚本和测试音频
    • 测试脚本 spdif-tset
    • App 调用

Init.rc 中添加 spdiftest 服务

对于我这个项目,是在 init.tablet.rc 中添加

service spdiftest /system/bin/spdif-test 
    class main 
    disabled 
    oneshot 

Device.mk 拷贝脚本和测试音频

工程 Device.mk 文件(rk3399_mid.mk)中添加

PRODUCT_COPY_FILES += \ 
   device/rockchip/rk3399/rk3399_mid/test/spdif-test:system/bin/spdif-test \ 
   device/rockchip/rk3399/rk3399_mid/test/test-music.wav:system/media/audio/test-music.wav 

Spdif-test 实际为测试脚本
Test-music.wav 实际为测试音频

测试脚本 spdif-tset

如下

#!/system/bin/sh 

tinymix -D 0 "Stereo DAC MIXL DAC L1 Switch" 1 
tinymix -D 0 "Stereo DAC MIXR DAC R1 Switch" 1 
tinymix -D 0 "OUT MIXL DAC L1 Switch" 1 
tinymix -D 0 "OUT MIXR DAC R1 Switch" 1 
tinymix -D 0 "HPOVOL L Switch" 1 
tinymix -D 0 "HPOVOL R Switch" 1 
tinymix -D 0 "HPO MIX HPVOL Switch" 1 
tinymix -D 0 "HPO L Playback Switch" 1 
tinymix -D 0 "HPO R Playback Switch" 1 

tinyplay /system/media/audio/test-music.wav -D 1 -d 0 

App 调用

在 App 中通过 SystemProperties.set(“ctl.start”,”spdiftest”);
调用 spdiftest 服务(实际是 spdif-test 脚本)

    private void setSpdifOn() throws IOException {
        SystemProperties.set("ctl.start","spdiftest");
        Log.v(TAG, "Call System Service 'spdiftest' in init.rc to test SPDIF.");
    }

你可能感兴趣的:(Android)