24

我正在开发一个必须与 USB 设备通信的 Android 应用程序。我尝试在我的应用程序中使用标准 google API,但设备列表始终为空。

如果我将 USB 设备信息与 google api 一起使用,情况相同。google api搜索到的设备列表为空,

lsusb 给出以下结果:

Bus 001 Device 001: ID 1d6b:0001
Bus 002 Device 001: ID 1d6b:0002
Bus 003 Device 001: ID 1d6b:0001
Bus 002 Device 002: ID 2226:0014

我的设备是 2226:0014

日食日志:

I/USB3G(92): event { 'add', '/devices/platform/sw-ehci.1/usb2/2-1', 'usb', '', 189, 133 }
I/USB3G(92): path : '/sys/devices/platform/sw-ehci.1/usb2/2-1'
I/USB3G(92): VID :size 5,vid_path '/sys/devices/platform/sw-ehci.1/usb2/2-1/idVendor',VID  '2226
I/USB3G(92): '.
I/USB3G(92): PID :size 5,Pid_path '/sys/devices/platform/sw-ehci.1/usb2/2-1/idProduct',PID  '0014
I/USB3G(92): '.
I/USB3G(92): cmd=/system/etc/usb_modeswitch.sh /system/etc/usb_modeswitch.d/2226_0014 &,
I/USB3G(92): excute ret : 0,err:No such file or directory

如果我插入 rs232 适配器、蓝牙加密狗等设备,则没有任何反应,并且 API 和 lsusb 没有任何结果。

设备的协议基于 ezusb 库。Android v.:4.0.3 内核 v.:3.0.8 固件版本:crane_evb-eng 4.0.3 IMLK74k 20120330

有什么方法可以通过 API 访问隐藏的 USB 设备,还是我应该通过编写驱动程序并将其修补到固件中来实现对该设备的支持?

更新:即使我在 *system/etc/usb_modeswitch.d/* 中创建名称为 2226_0014 的信息文件,其中包含

DefaultVendor= 0x2226
DefaultProduct=0x0014
TargetVendor=  0x2226
TargetProductList="0014"
MessageEndpoint="0x00"
NeedResponse=1
CheckSuccess=20

我得到同样的错误:“没有这样的文件或目录”

4

4 回答 4

43

要启用 USB 主机 API 支持,您应该添加一个名为
android.hardware.usb.host.xml 并包含以下行的文件:

<permissions>
 <feature name="android.hardware.usb.host"/>
</permissions>

进入文件夹

/system/etc/permissions

在该文件夹中找到名为

handheld_core_hardware.xml or tablet_core_hardware.xml 

并添加

<feature name="android.hardware.usb.host" />

进入<permissions>部分。

重新启动您的设备。Usb 主机 api 应该可以工作。

在带有 android 4 的 CUBE U30GT 上测试。

于 2012-08-16T17:43:53.247 回答
6

出色的!这适用于我运行 Android 4.0.4 的 Envizen V700NA。

小错字: <feature name="android.hardware.usb.host">

应该: <feature name="android.hardware.usb.host"/>

程序:

  1. adb pull /system/etc/permissions/tablet_core_hardware.xml
  2. 更新该文件并创建 Greg-q 指定的 android.hardware.usb.host.xml。
  3. adb push android.hardware.usb.host.xml /system/etc/permissions
  4. adb push tablet_core_hardware.xml /system/etc/permissions
  5. 重启。
于 2013-06-11T03:19:06.317 回答
2

在 micromax A120 canvas 2 手机 (kitkat 4.4.2) 上工作就像一个魅力。现在我可以控制我的 Arduino 了!我使用busybox 工具来完成所有命令行工作(否则chmod 将不起作用)。我的步骤(也许有些不是必需的):

(0)在我的 Windows 8 计算机上安装 PDAnet 驱动程序 ( http://pdanet.co/a/ )。(1) 在http://www.mgyun.com/m/en使用 Vroot(现在称为 iRoot)对手机进行 root 。很简单,唯一需要注意的是 su grant/deny 页面部分是中文的,没什么大不了的。(2)安装busybox和jackpal的Android-Terminal-Emulator(见github https://github.com/jackpal/Android-Terminal-Emulator or play store https://play.google.com/store/apps/details?id =jackpal.androidterm&hl=en )

(3) 打开一个终端窗口并成为超级用户:

# su

(4) 文件系统可能是只读的,因此您可能需要重新挂载它:

# mount -o rw,remount -t yaffs2 /

或者

# mount -o rw,remount -t rootfs /

或者

# mount -o rw,remount -t rootfs rootfs /system

另请参阅http://www.pocketmagic.net/write-on-the-android-read-only-file-system/ ,请参阅Android 2.3:只读文件系统 也卡住了,https://ckirbach.wordpress.com /2012/11/27/how-to-remount-system-as-read-write-in-android/

(5) 使 default.prop 读/写:

chmod 666 /default.prop

(6)编辑/default.prop,进行如下修改:

ro.secure=0
ro.debuggable=1
persist.service.adb.enable=1

请参阅https://android.stackexchange.com/questions/28653/obtaining-root-by-modifying-default-propro-securehttp://bclary.com/blog/2014/04/14/splitting-and-packing -android-boot-images/

最后,为了完整起见,正如上面的答案所说(https://stackoverflow.com/a/11992683/979369):

(7) 要启用 USB 主机 API 支持,您应该添加一个名为 android.hardware.usb.host.xml 并包含以下行的文件:

<permissions>
 <feature name="android.hardware.usb.host"/>
</permissions>

进入文件夹

/system/etc/permissions

在该文件夹中找到名为

handheld_core_hardware.xml or tablet_core_hardware.xml 

并添加

<feature name="android.hardware.usb.host" />

进入部分。

(8) 重新启动您的设备。Usb 主机 api 应该可以工作。

于 2015-03-25T01:26:04.423 回答
1

我在 MK809、Android 4.1 Jelly Bean 上使用过 adb,命令是:

adb remount /../../file.xml rw adb push...

使用普通命令我没有权限并且文件是只读的

对不起我的英语不好:P

于 2013-11-23T16:31:30.460 回答