机器型号 HTC Tattoo
固件版本 android1.6
开发宿主系统 MagicLinux2.5(同样适用于其他Linux发行版本)
本文为Linux下搭建android开发环境快速指南,并解决了Linux下android手机usb调试设备不能正确识别的问题。
首先要配置android SDK开发环境
1、下载android1.6 SDK
因为我的固件版本为android1.6因此下载sdk1.6
http://dl.google.com/android/android-sdk-windows-1.6_r1.zip
http://kugou.me/android-sdk-linux_x86-1.6_r1.tgz
将SDK解压到
~/android/android-sdk-linux_x86-1.6_r1
2、安装eclipse
因为android官方推荐使用eclipse,而且官方也推出了eclipse插件ADT辅助开发。
去eclipse官方网站下载eclipEclipse IDE for Java EE Developers (For Linux 32/64 bit)
eclipse不用安装,直接解压到目录中运行eclipse就可以了。
3、安装ADT
打开eclipse
Help--> Install New SoftWare..
Add...
添加Location:http://dl-ssl.google.com/android/eclipse
点击下一步 接受 下载 安装。
4、配置ADT
安装ADT后会重启eclipse
首先需要指定SDK目录:
Window--> Preferences--> android -->SDK Location:
指定路径为~/android/android-sdk-linux_x86-1.6_r1
OK。现在可以新建虚拟机创建android工程进行开发调试了。
关于如何使用eclipse+ADT开发android应用程序在网上有大量的教程,请自己google :)
下面是用USB调试方式连接手机的方法
这里比较麻烦的是Linux不会自动配置好android手机设备文件的权限。
因此我们需要手动配置,以下操作步骤涉及到udev的配置和设备信息的查看技巧:
1、首先我们需要使用以下命令实时监视系统信息
sudo tail -f /var/log/messages
2、此时在usb接口上连接手(手机需要切换到usb调试模式 设置-->应用程序-->开发-->usb调试)
messages会出现
un 13 18:12:08 MagicLinux kernel: usb 2-1: new high speed USB device using ehci_hcd and address 57
Jun 13 18:12:09 MagicLinux kernel: usb 2-1: New USB device found, idVendor=0bb4, idProduct=0c02
Jun 13 18:12:09 MagicLinux kernel: usb 2-1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
Jun 13 18:12:09 MagicLinux kernel: usb 2-1: Product: Android Phone
Jun 13 18:12:09 MagicLinux kernel: usb 2-1: Manufacturer: HTC
Jun 13 18:12:09 MagicLinux kernel: usb 2-1: SerialNumber: HT9A4LG04864
Jun 13 18:12:09 MagicLinux kernel: usb 2-1: configuration #1 chosen from 1 choice
Jun 13 18:12:09 MagicLinux kernel: scsi50 : SCSI emulation for USB Mass Storage devices
Jun 13 18:12:14 MagicLinux kernel: scsi 50:0:0:0: Direct-Access HTC Android Phone 0100 PQ: 0 ANSI: 2
Jun 13 18:12:14 MagicLinux kernel: sd 50:0:0:0: Attached scsi generic sg2 type 0
Jun 13 18:12:14 MagicLinux kernel: sd 50:0:0:0: [sdb] Attached SCSI removable disk
Jun 13 18:17:54 MagicLinux kernel: usb 2-1: USB disconnect, address 57
Jun 13 18:17:57 MagicLinux kernel: usb 2-1: new high speed USB device using ehci_hcd and address 58
Jun 13 18:17:57 MagicLinux kernel: usb 2-1: New USB device found, idVendor=0bb4, idProduct=0c02
Jun 13 18:17:57 MagicLinux kernel: usb 2-1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
Jun 13 18:17:57 MagicLinux kernel: usb 2-1: Product: Android Phone
Jun 13 18:17:57 MagicLinux kernel: usb 2-1: Manufacturer: HTC
Jun 13 18:17:57 MagicLinux kernel: usb 2-1: SerialNumber: HT9A4LG04864
Jun 13 18:17:57 MagicLinux kernel: usb 2-1: configuration #1 chosen from 1 choice
Jun 13 18:17:57 MagicLinux kernel: scsi51 : SCSI emulation for USB Mass Storage devices
Jun 13 18:18:02 MagicLinux kernel: scsi 51:0:0:0: Direct-Access HTC Android Phone 0100 PQ: 0 ANSI: 2
Jun 13 18:18:02 MagicLinux kernel: sd 51:0:0:0: Attached scsi generic sg2 type 0
Jun 13 18:18:02 MagicLinux kernel: sd 51:0:0:0: [sdb] Attached SCSI removable disk
看到上面红色字体了吗,那就是udev识别的usb调试设备标识 idVendor=0bb4, idProduct=0c02
大多数G4 android手机应该都一样。
3、配置udev规则文件,调整设备文件权限
接下来我们就可以根据前面获得的usb调试设备标识来调整我们的设备文件的各种属性以帮助android sdk识别usb调试设备。
在/etc/udev/rules.d下创建规则文件50-android.rules
cat 内容如下:
[sunshine@MagicLinux rules.d]$ cat 50-android.rules
SUBSYSTEMS=="usb",ATTRS{idVendor}=="0bb4" ,SYMLINK+="android_adb",OWNER="sunshine"
ATTRS{idVendor} 为上一步获得的 idVendor 参数
SYMLINK 参数使设备目录增加一个连接文件指向原设备文件
OWNER 为你当前的用户,也是你运行adb服务的用户
(这里要特别注意,我们的目的就是使android手机调试设备文件的所有者权限与开启的 adb 服务的所有者权限相一致,这样usb设备才能被adb服务识别)。
运行以下命令使刚更改的配置生效 (此处针对于Fedora及其衍生版本,其他Linux版本请查看udev man)
sudo udevadm control --reload-rules
4、重新插入USB,生成新的设备文件
这时会在/dev/下出现一个连接文件android_adb,它指向的设备就是你的USB调试的手机设备。
5、开启adb服务,搜寻usb调试设备
在~/android/android-sdk-linux_x86-1.6_r1/tools下运行
$./adb kill-server
$./adb start-server
$./adb devices #列出所有已识别设备
List of devices attached
HT9A4LG04864 device #这个就是我的手机usb设备了
安装一个apk试试吧
./adb install *.apk
在eclipse中也可以发现连接的手机设备,进行开发调试,当然前提是adb服务已经识别usb设备。
秀一张eclipse下调试android程序的图片:
注:获取设备的udev标识的方法多样, 上面介绍的方法只是其中一种,也是比较准确的一种 :)
如果你知道usb设备的设备文件,在获得idVendor时也可以使用其他命令,如:
udevinfo -a -p /sys/class/usb_device/...
udevinfo -e
而且在使用 udev 配置规则文件时可以使用任何一个参数来指定设备。
参考文章
http://androidboss.com/using-android-debug-bridge-adb-in-linux/
http://www.2linessoftware.com/2009/01/31/getting-android-sdk-to-work-with-fedora-10/
以及一些udev配置的相关文章