android安装ubuntu
‘壹’ ubuntu下如何给android虚拟机安装apk软件
ubuntu下给android
虚拟机
安装apk软件
前段时间在window下做
android开发
,可以用adb命令给android虚拟机安装apk软件,
这段时间转到了linux下来,我用的是ubuntu,搭建好android开发环境的之后,我开始给
android虚拟机安装一些常用的软件,比如
文件浏览器
什么的。
首先打开终端,cd到android
SDK所在的目录下,然后进入platform-tools文件夹,ls显示
文件后,你会发现有个名为adb的可执行文件,就是用这个adb命令来为android虚拟机安装
apk软件的。
特别说明,我看见网上说的关于在linux下给android虚拟机安装apk软件的做法都不怎么适合我,
adb可执行文件根本不在android
SDK/tools/
目录下,而是在android
SDK/platform-tools/目录下。
‘贰’ 怎样在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,proctID,即产品编号
使用设备端的名称/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{idProct}=="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{proct}=="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{idProct}=="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{proct}=="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{idProct}=="6860",
ATTR{proct}=="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
‘叁’ 如何在 Android 手机上安装 Ubuntu 1
首先您的手机需要获取root权限,root是前提。没人获取root权限以下都不能完成。
下载Ubuntu 的启动脚本bootscript.sh访问sourceforge.net网站在网站上找到一个叫 Linux-on-Android 的项目的Home目录下可以下载到
下载Ubuntu 的映像文件,在Linux-on-Android 的项目在其中找到Ubuntu / 12.04这里我们选择12.04 full下载最新的版本ubuntu1204-v4-full.zip.下载的文件是1.4G解压后有3G多。
在这里简单介绍一下其他版本:
full 映像包含了完整的 Ubuntu 系统,其中包括 Unity 桌面,还有很多如GIMP等常用软件,非常齐全。需要 3.5G 以上空间。
small 映像包含了的基本的 Ubuntu 系统,其中包括 LXDE 桌面,需要 2G 以上空间。
core 映像包含了基础的 Ubuntu 系统,不过这个没有GUI的,也就是没有桌面只有命令行。
在手机上安装Android Terminal Emulator 终端模拟器软件,可以在Google Play上搜索安装。通过终端我们可以用来执行很多命令和脚本。
在手机上安装BusyBox,BusyBox它可以使得你可以在 Terminal 中运行很多命令,比如 cp、mv、cut 等,如果不能运行这些命令而执行脚本的话,会提示 **: not found 这样的提示。所以安装 BusyBox 可以使得这些命令都能够在终端里面执行。可以在Google Play上搜索安装BusyBox。安装好后,打开BusyBox点击 Install 开始安装,如果弹出需要ROOT权限,点下一步允许就行.
安装BusyBox以及后面我们在Terminal中都需要 root 权限
安装 ubuntu
首先把之前下载好的bootscript.sh和ubuntu解压复制到内存卡新建ubuntu目录下,打开 终端模拟器(Terminal) ,在光标处输入 cd /sdcard/ubuntu然后回车进入到ubuntu目录了。
然后我们可以输入命令 “ls” 然后回车,就可以看到文件了。
bootscript.sh脚本需要root权限来运行,在终端中使用命令 “su” 来切换至 root 用户权限,如果弹出授权信息点击下一步允许就行了,成功后如图之前的“$”变成了“#”,这就说明已经获得Root权限了.
然后运行启动脚本sh bootscript.sh
然后脚本为你建立了一个名字为“ubuntu”的帐号,这里提示你需要为你的帐号设置一个密码,这个密码会在以后你操作 Ubuntu 的时候一些授权应用到,比如我在这里设置密码为:“ubuntu”,这里注意的是在终端里面输入密码是不会显示出来的,你看见光标没有动静,但实际上你已经输入进去了。回车后提示再次输入密码以保证你两次密码一样,如图:
密码设置完成后,提示是否启动VNC服务和SSH服务,我们只要输入“y”然后回车,开启了这两个服务后我们才能通过远程连接来连上系统,如图:
然后提示我们输入设备屏幕的尺寸,我的屏幕是854×480的,所以我输入“852×480”。注意:这里两个数字之间的不是乘号,而是字母“xyz”的“x”,输错了不能远程连接的,如图:
如图的提示已经启动了一个新的桌面,提示是否保存你刚才的设置为默认设置,只要输入“y”即可
远程桌面连接
远程连接工具来连接登录桌面就能看到完整的桌面系统了。这时候我们就要用到前面安装的 Android VNC Viewer 了。按手机的 Home 键回到手机桌面,保持终端还在后台运行。找到 Android VNC 并且打开,然后进行一些简单的配置。Nickname,为你的连接去一个名字如“ubuntu”。Password 为 “ubuntu” 。Address是ip地址,这里我们是在同一台手机上连,所以我们填写“localhost”,当然你想在别的设备上连接当前的设备那就要填写启动时提示的地址。Port 是段口号,默认 5900。还有这里比较重要的是 Color Format,这个是连接的色彩设置,建议设置成“24-bit color (4 bpp)”,要不然画质太低的话画面就惨不忍睹了。
全部设置好以后,点击 Connect 就可以连接上我们本地已经在运行的 Ubuntu系统了
另外,友帮拓系统在手机上运行,没什么大用。。
‘肆’ 如何在Ubuntu下配置Android开发环境
一共分为3步走:
1.配置JDK,安装Open jdk
$sudo apt-get install openjdk-7-jdk或从oracle官网下载从官网下载JDK 解压安装,将解压出的文件用最高权限复制到/usr/lib/jvm里。
sudo cp -r ~/jdk1.7/ /usr/lib/jvm
(中间两个“/”没有连起来,有空格),修改环境变量
sudo gedit ~/.profile
在末尾加上
export java_HOME=/usr/lib/jvm/jdk1.7
然后保存关闭,使用source更新一下
$ source ~/.profile
配置默认的JDK版本
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7/bin/java 300
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7/bin/javac 300
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
确认JDK是否安装成功
$ java -version
如果看到java version "1.7.XXXX",那么就表明安装成功了。
2.安装ADT Bundle for Linux
从谷歌官网下载ADT Bundle for Linux,这个包包含了android sdk和eclipse,并且也已经安装好了adt,下载完成后直接解压到安装目录。
前面的也许和32位的ubuntu安装大同小异,但是接下来这是在64位系统上必须做的,否则会出现(...adb": error=2, 没有那个文件或目录)这样的错误。原因是Android sdk只有32bit的程序,需要安装ia32-libs,才能使用。
$ sudo apt-get install ia32-libs
注意:ia32-libs比较大。
‘伍’ 如何在Ubuntu下配置Android开发环境
配置开发环境具体步骤如下:
一、设置root密码。
因为ubuntu下为了安全,一般都是以普通用户进入系统。运行一些命令都需要root权限,如果之前没有设置root密码,只需要在终端运行:sudopasswdroot命令即可,要输入两次密码,密码不会回显出来。
二、安装JDK
1)首先下载JDK,下载页面:http://www.oracle.com/technetwork/java/javase/downloads/index.html(JDK6:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html),下载下来的是bin文件(系统是64位的话,下载linux64位的安装包)。将在/usr/lib目录下新建一个java目录,然后将文件拷贝到该java目录,给予可执行权限,然后再安装。以下是命令:
cd/usr/lib
sudomkdirjava
cdjava
cp~/jdkxxx.bin/usr/lib/java/
sudochmoda+xjdkxxx.bin
sudo./jdkxxx.bin
jdkxxx.bin是下载的文件名,~/jdkxxx.bin是下载文件的保存路径。第一次执行sudo的时候需要输入root密码,输入就是了。
到最后会看到一个Done.表示安装完成了。
2)配置环境变量:打开/etc/profile文件,在文件的最下面加上下面一段内容:
exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
exportPATH=$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
其中/usr/lib/java/jdk1.6.0_29是JDK的安装根目录。命令:
sudogedit/etc/profile
ctrl+s保存关闭,接着:
sudosource/etc/profile
使环境变量配置生效,这样就不用重启。但只在当前终端有效,如果再打开一个终端,则需要再执行一次。
最后输入命令检查一下是否配置成功:
java-version
如果配置成功,会出现JDK的版本号,如下图所示: