怎样在Ubuntu下安装Android SDK/ADB?

一直以来,我们只写过在Windows下安装Android SDK的相关教程, 而Linux与Mac OS X等其它桌面平台我们并没有谈过。究其原因,其实也很简单,因为我们不熟悉Windows以外的平台。然而,最近我们常收到一些热心读者们的反馈,他们希望我们能够为Linux与Mac OS X电脑分别提供一份Android SDK安装的教程。为此,我们Google了很久,而最终,我们发现知名的ubuntu forums论坛有一篇我们认为整理得相当不错的Ubuntu Android SDK指南,我们因此将其译了过来。在这点上,如果你的英文很棒,你可以直接地去本文尾注的源文去查看与学习。而对于Mac OS X平台,我们将会尽可能快地在不久的将来写一篇类似的教程。

需要特别指明的是,我们的作用仅仅只限于翻译,虽然有点小辛苦,但价值显然小得不值得一提,所有的功劳都应当归结于ubuntu forums论坛成员kevdog。另外,我们并非理解其中所有的命令行,我们最大化地力求翻译的准确,但兼如水平的有限,某些地方可能翻译得不准确,如果你觉得有些地方需要更正,请帮忙在评论处留下你的更改,这样好让更多的读者受益。换句话讲,如果你在跟随下面教程时出现什么疑问,我们并不能为你提供什么解答,因为正如上面所提及的,我们不熟悉Linux与Mac OS X的使用,虽然我们现在也正在学习着Linux与Mac OS X,但水平连小白都谈不上,有心帮助,却力所不及,希望大家能谅解。

本指南旨在帮助大家学会在Linux系统分支Ubuntu下为自己的Android设备安装Android SDK或Android ADB。

本指南当时是在Ubuntu 11.10下配合Android SDK r16版编写,虽然Ubuntu与Android SDK会定期地更新,但相信即使是最新的版本,主要的操作流程也不会变化很大。

本指南主要是为喜欢为自己的Android设备进行自定义Rom的写入、软件开发、主题改变或任何其它需要使用ADB或Fastboot修改设备的相关操作的用户们服务。虽然这么讲,但无论如何,只要你想知道在Linux下如何安装Android SDK或者Android ADB,这篇教程都能为你提供点参考。

现在,我们正式地进入kevdog的指南中去。

Ubuntu电脑安装Android SDK/ADB

第一步,你要下载Linux版Android SDK的安装或文件包,然后你需要从Android SDK Manager内下载Platform Tools Package
  • 请从Google官方(http://developer.android.com/sdk/index.html)获取Android SDK安装或文件包,通常情况,你下载的文件名为android-sdk_rxx-linux.tgz的形式,rxx代表版本,比如,r16版,即android-sdk_r16-linux.tgz,r24版,即android-sdk_r24-linux.tgz
  • 请放置Android SDK安装或文件包在你的用户主目录
  • 在你的Ubuntu电脑上打开终端窗口
  • 解压Android SDK文件:
    cd ~
    tar -zxvf android-sdk_r16-linux.tgz
  • ~/android-sdk-linux/tools字目录,有一个叫做android的可执行文件,尽管名字是android,但它实际上是Android SDK Manager
  • 运行Android SDK Manager:
    ./~/android-sdk-linux/tools/android
  • 选择Android SDK ToolsAndroid SDK Platform-tools项,点Install packages安装Platform Tools Package工具包。包括ADB与Fastboot可执行的文件在内的工具包都会被下载,由于下载的文件较多而需要一定的时间,你能去喝点东西Android_SDK_Manager_Ubuntu
  • 你下载的Platform Tools Package工具包文件将位于新创建的~/android-sdk-linux/platform-tools目录
第二步,修改ADB与Fastboot可执行文件的默认PATH路径环境。PATH环境变量可以是在~/.profile(或~/.bash_profile)或者~/.bashrc文件内修改,~/.profile文件是读取所有交互式Shell的登录,~/.bashrc文件读取所有非交互式Shell的登录(如sftp),在大多数默认情况下,~/.profile文件导入所有~/.bashrc文件的设置。PATH命令设定的改变必须包括/android-sdk-linux/tools/android-sdk-linux/platform-tools目录
  • kevdog的PATH命令设定通过Ubuntu系统内初始的默认编辑器Gedit在~/.bashrc文件底部增加了一行:
    export PATH=${PATH}:${HOME}/android-sdk-linux/tools:${HOME}/android-sdk-linux/platform-tools
第三步,我们需要为Ubuntu创建udev设备管理规则,从而让设备在通过USB端口连接到电脑时能被正确地识别
  • 将设备连接到电脑,然后执行命令:
    lsusb
  • 你会看到类似于下面的输出信息:
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 063: ID 04e8:6860 Samsung Electronics Co., Ltd
  • 由于kevdog的设备是Samsung的某款设备,因此你能看到相应的识别信息:
    Bus 001 Device 063: ID 04e8:6860 Samsung Electronics Co., Ltd

我们来解释下上面的识别信息:

  • Bus 001 Device 063,设备端的名称是/dev/bus/usb/001/063,即这个信息可以帮助我们确定设备端的名称
  • 04e8,vendorID,即供货商编号
  • 6860,productID,即产品编号

使用设备端的名称/dev/bus/usb/001/063可以让我们查询设备的属性,查询这些属性有时很有必要,因为udev设备管理匹配设备是基于特定标准的。为此,我们需要一个正确的udev设备匹配规则集,这个过程的第一步就是查询能被连接或插入到我们规则集的准则,这可以通过udevadm程序来实现,并且有两种方式现,它们生成的输出信息为我们的设备构建udev设备管理规则:

  • udevadm查询udev设备管理规则方法1:
    udevadm info -q all -n <name of device node>

    根据原作者的实际情况,设备端名称是/dev/bus/usb/001/063,因此命令是:
    udevadm info -q all -n /dev/bus/usb/001/063

    你会看到类似于下面的输出信息:
    $ udevadm info -q all -n /dev/bus/usb/001/063
    P: /devices/pci0000:00/0000:00:1d.7/usb1/1-8
    N: bus/usb/001/063
    S: libmtp-1-8
    S: GalaxyNexus
    E: UDEV_LOG=3
    E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-8
    E: MAJOR=189
    E: MINOR=62
    E: DEVNAME=/dev/bus/usb/001/063
    E: DEVTYPE=usb_device
    E: DRIVER=usb
    E: PRODUCT=4e8/6860/216
    E: TYPE=0/0/0
    E: BUSNUM=001
    E: DEVNUM=063
    E: SUBSYSTEM=usb
    E: ID_MTP_DEVICE=1
    E: ID_MEDIA_PLAYER=samsung_galaxy-s2
    E: ID_VENDOR=samsung
    E: ID_VENDOR_ENC=samsung
    E: ID_VENDOR_ID=04e8
    E: ID_MODEL=Galaxy
    E: ID_MODEL_ENC=Galaxy
    E: ID_MODEL_ID=6860
    E: ID_REVISION=0216
    E: ID_SERIAL=samsung_Galaxy_0146B06501005018
    E: ID_SERIAL_SHORT=0146B06501005018
    E: ID_BUS=usb
    E: ID_USB_INTERFACES=:ffff00:ff4201:
    E: DEVLINKS=/dev/libmtp-1-8 /dev/GalaxyNexus
    E: TAGS=:udev-acl:

    我们使用的规则从有E:(E=ENV=Device Property设备属性值)的行开始
  • udevadm查询udev设备管理规则方法2:
    udevadm info -a -p $(udevadm info -q path -n <name of device node>)

    根据原作者的实际情况,设备端名称是/dev/bus/usb/001/063,因此命令是:
    udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/001/063)

    你会看到类似于下面的输出信息:
    $ udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/001/063)
    Udevadm info starts with the device specified by the devpath and then
    walks up the chain of parent devices. It prints for every device
    found, all possible attributes in the udev rules key format.
    A rule to match, can be composed by the attributes of the device
    and the attributes from one single parent device.

    looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-8':
    KERNEL=="1-8"
    SUBSYSTEM=="usb"
    DRIVER=="usb"
    ATTR{configuration}==""
    ATTR{bNumInterfaces}==" 2"
    ATTR{bConfigurationValue}=="1"
    ATTR{bmAttributes}=="80"
    ATTR{bMaxPower}=="500mA"
    ATTR{urbnum}=="29"
    ATTR{idVendor}=="04e8"
    ATTR{idProduct}=="6860"
    ATTR{bcdDevice}=="0216"
    ATTR{bDeviceClass}=="00"
    ATTR{bDeviceSubClass}=="00"
    ATTR{bDeviceProtocol}=="00"
    ATTR{bNumConfigurations}=="1"
    ATTR{bMaxPacketSize0}=="64"
    ATTR{speed}=="480"
    ATTR{busnum}=="1"
    ATTR{devnum}=="63"
    ATTR{devpath}=="8"
    ATTR{version}==" 2.00"
    ATTR{maxchild}=="0"
    ATTR{quirks}=="0x0"
    ATTR{avoid_reset_quirk}=="0"
    ATTR{authorized}=="1"
    ATTR{manufacturer}=="samsung"
    ATTR{product}=="Galaxy"
    ATTR{serial}=="0146B06501005018"

    looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}==" 0mA"
    ATTRS{urbnum}=="1403"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0300"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="8"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 3.0.0-14-generic ehci_hcd"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{serial}=="0000:00:1d.7"
    ATTRS{authorized_default}=="1"

    looking at parent device '/devices/pci0000:00/0000:00:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x27cc"
    ATTRS{subsystem_vendor}=="0x103c"
    ATTRS{subsystem_device}=="0x3010"
    ATTRS{class}=="0x0c0320"
    ATTRS{irq}=="20"
    ATTRS{local_cpus}=="ff"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
    ATTRS{companion}==""

    looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

    我们使用的规则从有ATTRS(ATTRS=Device Attributes设备属性)的行开始

不管是ENV,还是ATTRS,我们可以构建一个udev设备管理规则集。规则集的名称可以随意,根据原作者的意图,我们叫做51-android.rules

  • 你能这样建立规则集文件:
    gksu gedit /etc/udev/rules.d/51-android.rules
  • 之后,请在规则集文件中加入相关的规则,以原作者的规则来看,注意是一行一个:
    SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="04e8", ENV{ID_MODEL}=="Galaxy", MODE="0666", SYMLINK+="GalaxyNexus"
    SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="04e8", ENV{ID_MODEL_ID}=="6860", MODE="0666", SYMLINK+="GalaxyNexus"
    SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", ATTR{product}=="Galaxy" MODE="0666", SYMLINK+="GalaxyNexus"

    如上面所加的规则,这些规则匹配准则是SUBSYSTEM, ENV,ATTR,它只会修改设备的模式MODE(0666=rw-rw-rw-)与创建链接于/dev/GalaxyNexus的GalaxyNexus标识。当然,更多的指令可以分配给设备,如插入或移除设备时的执行命令,你能这样指定指令:
    ACTION=="add", RUN+="<name of action>"
    ACTION==”remove”, RUN+="<name of action>"

    例如,我们要设定设备在插入或弹出时播放一个声音或MP3文件,可以如下指令设定:
    ACTION=="add", RUN+="/usr/local/bin/NexusMount.sh"
    ACTION==”remove”, RUN+="/usr/local/bin/NexusUnmount.sh"

    需要注意的是,每个ACTION指令设定必须在它自己的命令行;目录必须正确;指令可以是多重设定
  • 一旦规则构建完成,我们需要保存/etc/udev/rules.d/51-android.rules规则文件

在你执行规则集前,测试一下通常是一个好主意,因为那样你能很容易地找出编写规则集的错误:

  • 你能使用udevadm工具简单地完成规则集的测试:
    udevadm info -q path -n d=<device name>

    根据原作者的设备端名/dev/bus/usb/001/063,测试行为:
    udevadm test --action="SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="04e8", ENV{ID_MODEL}=="Galaxy" MODE="0666", SYMLINK+="GalaxyNexus"" $(udevadm info -q path -n /dev/bus/usb/001/063)

    虽然测试输出行相当长,两行输出信息正确地识别规则集的指令设定:
    udev_rules_apply_to_event: MODE 0666 /etc/udev/rules.d/51-android.rules:1
    udev_rules_apply_to_event: LINK 'GalaxyNexus' /etc/udev/rules.d/51-android.rules:1
  • 一旦你确认了规则集正确,请重启udev设备管理服务:
    sudo service udev restart
第四步,退出电脑的登录,然后重新登录回
  • 在设备插入的情况下,执行ADB命令,如确认设备连接:
    $ adb devices

    你会看到设备识别号信息,根据原作者的设备,它是
    0146B06501005018 device
  • 如果你的设备已启动在Fastboot模式,许多设备不启动可能也行,你能执行Fastboot命令,如标准的Fastboot设备:
    $ fastboot devices

 

 

 

 

via(http://ubuntuforums.org/showthread.php?t=1918512)

给我留言

/ 快捷键:Ctrl+Enter