怎样在Ubuntu下安装Android SDK/ADB

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样在Ubuntu下安装Android SDK/ADB相关的知识,希望对你有一定的参考价值。

  Ubuntu电脑安装android SDK/ADB

  第一步,你要下载Linux版Android SDK的安装或文件包,然后你需要从Android SDK Manager内下载Platform Tools
Package

  请从Google官方获取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
Tools与Android SDK Platform-tools项,点Install
packages安装Platform Tools
Package工具包。包括ADB与Fastboot可执行的文件在内的工具包都会被下载,由于下载的文件较多而需要一定的时间,你能去喝点东西

  你下载的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"
ATTRconfiguration==""

ATTRbNumInterfaces==" 2"
ATTRbConfigurationValue=="1"

ATTRbmAttributes=="80"
ATTRbMaxPower=="500mA"
ATTRurbnum=="29"

ATTRidVendor=="04e8"
ATTRidProduct=="6860"

ATTRbcdDevice=="0216"
ATTRbDeviceClass=="00"

ATTRbDeviceSubClass=="00"
ATTRbDeviceProtocol=="00"

ATTRbNumConfigurations=="1"
ATTRbMaxPacketSize0=="64"

ATTRspeed=="480"
ATTRbusnum=="1"
ATTRdevnum=="63"

ATTRdevpath=="8"
ATTRversion==" 2.00"
ATTRmaxchild=="0"

ATTRquirks=="0x0"
ATTRavoid_reset_quirk=="0"

ATTRauthorized=="1"
ATTRmanufacturer=="samsung"

ATTRproduct=="Galaxy"
ATTRserial=="0146B06501005018"

looking at parent device \'/devices/pci0000:00/0000:00:1d.7/usb1\':

KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"

ATTRSconfiguration==""
ATTRSbNumInterfaces==" 1"

ATTRSbConfigurationValue=="1"
ATTRSbmAttributes=="e0"

ATTRSbMaxPower==" 0mA"
ATTRSurbnum=="1403"

ATTRSidVendor=="1d6b"
ATTRSidProduct=="0002"

ATTRSbcdDevice=="0300"
ATTRSbDeviceClass=="09"

ATTRSbDeviceSubClass=="00"
ATTRSbDeviceProtocol=="00"

ATTRSbNumConfigurations=="1"
ATTRSbMaxPacketSize0=="64"

ATTRSspeed=="480"
ATTRSbusnum=="1"
ATTRSdevnum=="1"

ATTRSdevpath=="0"
ATTRSversion==" 2.00"
ATTRSmaxchild=="8"

ATTRSquirks=="0x0"
ATTRSavoid_reset_quirk=="0"

ATTRSauthorized=="1"
ATTRSmanufacturer=="Linux 3.0.0-14-generic
ehci_hcd"
ATTRSproduct=="EHCI Host Controller"

ATTRSserial=="0000:00:1d.7"
ATTRSauthorized_default=="1"

looking at parent device \'/devices/pci0000:00/0000:00:1d.7\':

KERNELS=="0000:00:1d.7"
SUBSYSTEMS=="pci"
DRIVERS=="ehci_hcd"

ATTRSvendor=="0x8086"
ATTRSdevice=="0x27cc"

ATTRSsubsystem_vendor=="0x103c"
ATTRSsubsystem_device=="0x3010"

ATTRSclass=="0x0c0320"
ATTRSirq=="20"
ATTRSlocal_cpus=="ff"

ATTRSlocal_cpulist=="0-7"
ATTRSdma_mask_bits=="32"

ATTRSconsistent_dma_mask_bits=="32"
ATTRSbroken_parity_status=="0"

ATTRSmsi_bus==""
ATTRScompanion==""
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",
ENVID_VENDOR_ID=="04e8", ENVID_MODEL=="Galaxy", MODE="0666",
SYMLINK+="GalaxyNexus"
SUBSYSTEM=="usb", ENVID_VENDOR_ID=="04e8",
ENVID_MODEL_ID=="6860", MODE="0666", SYMLINK+="GalaxyNexus"

SUBSYSTEM=="usb", ATTRidVendor=="04e8", ATTRidProduct=="6860",
ATTRproduct=="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", ENVID_VENDOR_ID=="04e8",
ENVID_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
参考技术A Ubuntu电脑安装Android SDK/ADB   第一步,你要下载Linux版Android SDK的安装或文件包,然后你需要从Android SDK Manager内下载Platform Tools Package   请从Google官方获取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 Tools与Android SDK Platform-tools项,点Install packages安装Platform Tools Package工具包。

ubuntu下Android开发环境的搭建:eclipse+SDK详细安装教程+常见问题及其解决方案

先讲具体的安装步骤然后再说常见问题及解决方案。

ubuntu下安装eclipse+SDK具体步骤:

1.安装JDK:

在官网(http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html)下载JDK

输入命令将下载下来的包解压:sudo tar -zxvf /jdk-XuXX-linux-XX.tar.gz

然后设置环境变量,输入命令:vim /etc/profile

添加以下内容:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))  
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).  
#set java environment  
export JAVA_HOME=/usr/local/javak1.6.0_30                #JDK所在目录路径
export JRE_HOME=/usr/local/javak1.6.0_30/jre             #JDK下jre所在目录的路径   
export CLASSPATH=.:$JAVA_HOMEb:$JRE_HOMEb:$CLASSPATH   
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH 

注意不能空行,不然可能会出现一些路径无效的错误。

最后保存退出。重启ubuntu或者输入命令:source /etc/profile 

最后输入命令检验当前java环境是否是所安装版本:java -version。

至此,我们的JDK就安装结束了。

2.安装eclipse

控制台输入命令:sudo apt-get install oracle-java7-installer

或者直接登录www.eclipse.org官网下载最新版(for linux)

        下载完成后输入命令解压压缩包:cd /opt/ && sudo tar -zxvf ~/下载/eclipse-*.tar.gz

        解压完成后就可以在/opt目录下看到eclipse目录了。

接下来我们创建eclipse桌面图标,输入命令:vim /usr/share/applications/eclipse.desktop

        接下来粘贴以下内容保存并退出:

[Desktop Entry]
Name=Eclipse 4
Type=Application
Exec=/opt/eclipse/eclipse #这是我的eclipse所在目录,每个人不一样,注意了!
Terminal=false
Icon=/opt/eclipse/icon.xpm #这是我的icon.xpm所在目录,每个人不一样,注意了!
Comment=Integrated Development Environment
NoDisplay=false
Categories=Development;IDE;
Name[en]=Eclipse  

好了,这一步完成后我们的eclipse就配置好了。

(有一小点要注意一下,如果打开的时候出现缺少jre等报错信息,就去JDK目录把/jre目录拷贝到eclipse目录下就可以了)

3.下载并安装SDK

在这之前,如果你没SDK包,那你必须上官网下载SDK之前,你要明白,要科学上网,百度一下各种教程,出于某种原因我在这里就不写了,但是在ubuntu下我个人推荐修改host文件。

 

先配置环境变量。

输入命令:vim /etc/profile

添加以下内容
export PATH=/usr/local/android-sdk-linux/tools:/usr/local/android-sdk-linux/platform-tools:$PATH 

 

安装好Eclipse之后,启动Eclipse,然后选择Help>Install New Software

 

然后点击右上角的Add,将弹出一个对话框,在name一栏中填入“ADT Plugin”,然后在在下面一栏中键入:https://dl-ssl.google.com/android/eclipse/

然后点击OK

接着选中Developer tools,然后点Next,在新出现的窗口中继续点Next,然后点完成。装完之后,会提示重启,选择重启。

接下来就开始下载SDK了。

打开http://developer.android.com/sdk/index.html,下载android-sdk_xxx-linux.tgz

在下载完成之后,找到下载后的文件,然后解压到你想解压到的目录,具体也可以将下载文件复制到指定目录,然后解压到当前目录下:

sudo tar -zxvf android-sdk_XXX-linux.tgz

解压之后,将出现一个名为android-sdk-linux的文件夹,这时可能需要修改文件权限:$sudo chmod 777 android-sdk-linux 。

然后就是启动Eclipse,选择window>preferences,点左侧的android,然后在右侧Browse 选择SDK location(也即选择android-sdk-linux)。

接着Window>Android SDK Manager,选择需要的android平台版本,然后点安装,然后就等待安装完了。

然后就是创建AVD。

 

至此,安装全部完成!

接下来是常见问题:

1.JDK在配置文件后,退出当前终端之后就没有效果了

解决方法:查看当前版本,如果ubuntu是12.04及其以下版本,就在.bashrc文件中配置。配置方法依旧不变。

2.在终端中可以打开eclipse但是点击图标会显示报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse.No java virtual machine was found after searching the following locations:…

解决方法:复制JDK目录下的jre目录到eclipse目录下,或者创造软链接:从终端进入你的eclipse目录,然后输入命令ln -s /opt/jdk1.6.0_45/jre jre

3.Android --- 64bit Ubuntu 系统下 搭建JDK和SDK环境后,出现adb:error =12错误 
Failed to get the adb version: Cannot run program"/home/xxxx/android/android-sdk/platform-tools/adb": error=2,没有那个文件或目录
或者这样的错误提示:android-sdk-linux/platform-tools/adb: 没有那个文件或目录。
解决方案:由于是64bit的系统,而Androidsdk只有32bit的程序,需要安装ia32-libs,才能使用。输入命令sudo apt-get install ia32-libs 继续安装即可。

4.这是一些我在贴吧里搜集到的编译过程遇到的问题,解决方法本人没有亲测过,各位可以试一试:
/bin/bash: bison: 未找到命令  
解决方案:终端中输入命令:sudo apt-get install bison  

/bin/bash: xsltproc: 未找到命令
解决方案:终端中输入命令:sudo apt-get install xsltproc

external/clearsilver/cgi/cgi.c:22:18: fatal error: zlib.h: 没有那个文件或目录  
解决方案:终端中输入命令:sudo apt-get install zlib1g-dev  
  
/bin/bash: flex: 未找到命令  
解决方案:终端中输入命令:sudo apt-get install flex  
  
prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55:22: fatal error: X11/Xlib.h: 没有那个文件或目录  
解决方案:终端中输入命令:sudo apt-get install libx11-dev   
  
/usr/bin/ld: cannot find -lncurses  
解决方案:终端中输入命令:sudo apt-get install libncurses5-dev
sudo apt-get install gperf

gcc: error trying to exec 'cc1plus': execvp: 没有那个文件或目录
解决方案:终端中输入命令:sudo apt-get install build-essential

/bin/bash: xmllint: 未找到命令
解决方案:终端中输入命令:sudo apt-get install xsltproc
终端中输入命令:sudo apt-get  install libxml2-utils

javac: 目标发行版 1.5 与默认的源发行版 1.7 冲突
原因:在ubuntu软件中心安装eclipse导致jdk变成了默认的openjdk
~$ java -version
java version "1.7.0_21"
OpenJDK Runtime Environment (IcedTea 2.3.9) (7u21-2.3.9-1ubuntu1)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)
解决方案:卸载ubutnu软件中心安装的eclipse,重新下载安装eclipse和sun jdk1.6。
sudo apt-get remove openjdk*
此命令会卸载所有依赖openjdk的软件,包括从ubuntu软件中心安装的eclipse。

/usr/include/stdc-predef.h:30:26: fatal error: bits/predefs.h: No such file or directory
compilation terminated.
解决方案:终端中输入命令:sudo apt-get install gcc-multilib

错误:
build/core/java.mk:9: *** bin: Target java module does not define any source or resource files. Stop.
解决方案:
      删除源码根目录下的bin文件夹,这个文件夹是导入eclipse时创建的。

abc@ab-Precision-T1650:~$ sudo update-alternatives --config java
update-alternatives: 错误: no alternatives for java

http://source.android.com/source/initializing.html#configuring-usb-access
Initializing a Build Environment
解决方案:在12.04,12.10,13.04版本上需要安装以下库
$ sudo apt-get install git gnupg flex bison gperf build-essential \\
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \\
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \\
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \\
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

最后,祝各位好运!最后感谢帮我搜集资料的兄弟!

 

以上是关于怎样在Ubuntu下安装Android SDK/ADB的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu 下 android sdk 配置

ubuntu下Android开发环境的搭建:eclipse+SDK详细安装教程+常见问题及其解决方案

[ubuntu]android SDK 与Gradle环境的安装与配置

如何在ubuntu下安装AndroidStudio

怎样在 Ubuntu 上安装 Linux Kernel 4.4

Ubuntu 12.04 32位 eclipse android SDK NDK开发环境搭建