小编GPS*_*GPS的帖子

使Android使用新的Audio HAL需要什么

我正在编写一个新的Android Audio HAL,让我的应用程序将音频提供给其他应用程序,以允许我的掌上电脑远程麦克风输入到达Google应用程序.基本上,虚拟音频线.

它正在进行中.我可能会重写AUDIO_DEVICE_IN_BACK_MIC,但这是有建议的.

我对如何确保Android使用此HAL进行输入有疑问.

我需要替换audio.primary.default.so还是应该将其保留为audio.vcable.default.so?

更具体地说:如果我不替换主要内容,Android将如何知道使用我的HAL而不是主要?


更新:

我真的可以在这项工作中使用任何帮助.任何指针都有帮助.

我写过一个Audio HAL模块.我在audio_policy.conf中添加了以下(粗体项):

全球:

global_configuration {
  attached_output_devices AUDIO_DEVICE_OUT_SPEAKER|**AUDIO_DEVICE_OUT_LINE**
  default_output_device AUDIO_DEVICE_OUT_SPEAKER
  attached_input_devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC|AUDIO_DEVICE_IN_REMOTE_SUBMIX|**AUDIO_DEVICE_IN_LINE**
}
Run Code Online (Sandbox Code Playgroud)

并在audio_hw_modules下

  vloop {
    inputs {
      vloop {
        sampling_rates 16000
        channel_masks AUDIO_CHANNEL_IN_MONO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_IN_LINE
      }
    }
    outputs {
      vloop {
        sampling_rates 16000
        channel_masks AUDIO_CHANNEL_OUT_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_OUT_LINE
        flags AUDIO_OUTPUT_FLAG_DIRECT
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

我还在AudioFlinger.cpp中添加了以下(粗体)

static const char * const audio_interfaces[] = {
    AUDIO_HARDWARE_MODULE_ID_PRIMARY,
    AUDIO_HARDWARE_MODULE_ID_A2DP,
    AUDIO_HARDWARE_MODULE_ID_USB,
    **AUDIO_HARDWARE_MODULE_ID_VLOOP**
};
Run Code Online (Sandbox Code Playgroud)

我可以看到,在启动过程中,我的HAL被加载,我得到这些日志:

10-06 06:14:40.365 194-194/? I/AudioFlinger: Using default 3000 mSec as standby …
Run Code Online (Sandbox Code Playgroud)

audio android hal

11
推荐指数
1
解决办法
4375
查看次数

Android系统服务的SELinux策略定义:如何设置?

我之前写过一个独立的守护进程来访问自定义设备(/ dev/mydev0).看看AOSP源代码,我认为我需要在以下文件中设置策略才能使其工作:

新文件device.te包含:

type mydev_device, dev_type;
Run Code Online (Sandbox Code Playgroud)

新文件mydevsrvc.te包含

# service flash_recovery in init.rc
type mydevsrvc_type, domain;
type mydevsrvc_type_exec, exec_type, file_type;

init_daemon_domain(mydevsrvc_type)

allow mydevsrvc_type mydev_device:chr_file rw_file_perms;
Run Code Online (Sandbox Code Playgroud)

编辑file_contexts添加:

/dev/mydev[0-9]*    u:object_r:mydev_device:s0
Run Code Online (Sandbox Code Playgroud)

编辑service_contexts添加:

mydevsrvc                  u:object_r:mydevsrvc_type:s0
Run Code Online (Sandbox Code Playgroud)

并通过编辑init.flo.rc来启动守护进程以包含以下行:

service mydevsrvc /system/bin/mydevsrvc
    class main
    user system
    group system
    seclabel u:r:mydevsrvc_type:s0
    oneshot
Run Code Online (Sandbox Code Playgroud)

现在,我需要访问Android应用程序中的设备,所以我必须将守护进程更改为Android系统服务.

我可以使用BOOT_COMPLETED意图启动服务(线程),如前一个问题中所述

我无法弄清楚如何设置SELinux策略,以便此java服务也能够访问dev文件.

[更新]为此,我继续使用特权守护进程.我的java服务通过套接字连接到守护进程.我没有更好的解决方案.

service android selinux android-source

8
推荐指数
1
解决办法
9327
查看次数

构建 Android 内核时出错:“多个目标模式”

我尝试按照 Google 在此页面上的说明为 Nexus 5X 构建新内核

  • 构建系统:Ubuntu 14.04 x86_64
  • 目标系统:MTC19T/bullhead(实际上是 5X 上的任何棉花糖版本)
  • 工具链:android-6.0.1_r25/prebuilts/gcc/linux-x86/aarch64/

我执行的命令的确切顺序是:

$ git clone https://android.googlesource.com/kernel/msm
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-linux-android-
$ cd msm
$ git checkout -b android-msm-bullhead-3.10-marshmallow-mr1 origin/android-msm-bullhead-3.10-marshmallow-mr1
$ make bullhead_defconfig
$ make
Run Code Online (Sandbox Code Playgroud)

在最后一个命令后,我收到以下错误:

Makefile:796: *** multiple target patterns.  Stop.
Run Code Online (Sandbox Code Playgroud)

调查:

现在 makefile 中的第 796 行是:

vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE
Run Code Online (Sandbox Code Playgroud)

和其他相关线路是:

vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN)

export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)
export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y) $(drivers-y) $(net-y)
export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
Run Code Online (Sandbox Code Playgroud)

我发现如果我 …

android kernel build android-source

6
推荐指数
2
解决办法
3599
查看次数

如何在 Android 5.0+ 上运行蓝牙 HID 主机

我有一个蓝牙HID设备,我需要得到工作与在Android 5.0分叉一台Nexus 7平板电脑2013运行自定义生成运行我的应用程序。所以:

  • @hide 不是约束
  • 允许更改 AOSP
  • 任何 Android 版本 5.0* - 5.1* 都可以

现在我的设备有一个键盘,并且发送和接受一些供应商特定的 HID 报告。通过工作,我的意思是发送和接收所有 HID 报告

基于我所做的 AOSP 源代码探索,似乎:

  1. HidService服务广播BluetoothInputDevice.ACTION_REPORT所有输入 HID 报告的意图 [我的应用程序有一个BroadcastReceiver接收ACTION_REPORT意图]

  2. BluetoothInputDevice提供了其他的接口等setReport()sendData()connect()通过等HidService

  3. BluetoothInputDevice用于HidService提供 HID 设备接口。

  4. HidService.java 是一个 JNI 包装器 com_android_bluetooth_hid.cpp

  5. com_android_bluetooth_hid.cpp,在 初始化时HidService,将自己的回调注册到 Bluedroid

我已将日志添加到 AOSP 以跟踪调用,似乎以上所有内容都是正确的。

get_report_callback()com_android_bluetooth_hid.cpp不会被调用,因此,我的应用程序不接收ACTION_REPORT意向。

如果我ACTION_REPORT从我的应用程序发送虚拟意图,那么我BroadcastReceiver …

android bluetooth hid android-source android-intent

5
推荐指数
1
解决办法
2293
查看次数

aapt失踪,但它在那里

由于原因,我不得不重新安装ubuntu-14.04-64.

重新安装之后,当我尝试构建我的android项目时,我在输出中得到了一堆这些行(以及其他行):

java.io.IOException: Cannot run program "/home/gps/Android/Sdk/build-tools/23.0.2/aapt": error=2, No such file or directory
Run Code Online (Sandbox Code Playgroud)

现在,我知道我的设置中存在此文件,因为:

gps@gps-HP-ProBook-4540s:~$ ls -l /home/gps/Android/Sdk/build-tools/23.0.2/aapt
-rwxrwxr-x 1 gps gps 1146608 Jan  4 18:47 /home/gps/Android/Sdk/build-tools/23.0.2/aapt
gps@gps-HP-ProBook-4540s:~$ file  /home/gps/Android/Sdk/build-tools/23.0.2/aapt
/home/gps/Android/Sdk/build-tools/23.0.2/aapt: ELF 32-bit LSB  shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=fc8aded5418584519d59f2133e81184fe3d4bdfd, not stripped
gps@gps-HP-ProBook-4540s:~$ 
Run Code Online (Sandbox Code Playgroud)

我从v19开始安装了所有sdk工具.将项目设置更改为任何一个都显示相同的错误.

此外,尝试直接执行文件会产生同样的错误:

gps@gps-HP-ProBook-4540s:~$ /home/gps/Android/Sdk/build-tools/23.0.2/aapt
bash: /home/gps/Android/Sdk/build-tools/23.0.2/aapt: No such file or directory
Run Code Online (Sandbox Code Playgroud)

有人可以建议解决这个问题吗?

linux ubuntu android-studio

5
推荐指数
2
解决办法
2223
查看次数