androidsdkubuntu下載
1. 如何在Ubuntu下配置Android開發環境
1.安裝Eclipse和Android SDK/PhoneGap所需軟體包:
打開終端,輸入下面命令完成題目所述過程:
sudo apt-get install openjdk-6-jdk eclipse ruby rubygems ruby-dev libnokogiri-ruby git ant libxml2 libxml2-dev libxslt1-dev
若是64位,還需要安裝下面兩個軟體包:
sudo apt-get install lib32stdc++6 ia32-libs
2.安裝Android SDK
打開網路瀏覽器,輸入地址http://developer.android.com/sdk/index.html,下載所需的平台(Win,Mac,linux)的Android SDK版本。我們選擇Linux(i386)即可(32位和64位平台皆適用)。或者,用下面命令下載並解壓文件包:
cd ~ wget http://dl.google.com/android/android-sdk_r11-linux_x86.tgz tar xvfz android-sdk_r11-linux_x86.tgz
由上述命令,我們可得到文件目錄 android-sdk-linux_x86 ,現在我們要將$HOME/android-sdk-linux_x86/tools 目錄 和 $HOME/android-sdk-linux_x86/platform-tools 目錄添加到PATH 路徑變數中去:
打開 ~/.profile文件
gedit ~/.profile
添加下面一行內容到該文件末尾:
[...]
PATH="$HOME/android-sdk-linux_x86/tools:$HOME/android-sdk-linux_x86/platform-tools:$PATH"
然後,運行下面命令將上述改動生效:
export
PATH="$HOME/android-sdk-linux_x86/tools:$HOME/android-sdk-linux_x86/platform-tools:$PATH"
現在,啟動 Android SDK:
android
下圖就是Android SDK所示:
接下來,選擇左側的「 Available packages 」,後選擇右側欄內的「 Android Repository」,選中所有「 Android Repository」組內的軟體包,點擊「安裝所選軟體包」即可。接下來選擇「接受」,繼續安裝完畢即可。
若提示「ADB需要重啟」時,我們選擇「Yes」,重啟ADB。
下載完畢後,點擊「close」,關閉對話框。
3.移植Android SDK到Eclipse
若是你用Eclipse創建Android應用,而非命令行下,則我們需要將移植Android SDK到Eclipse。
首先,從「Applications > Programming > Eclipse」,啟動Eclipse。
這樣,Ubuntu Linux系統的Android開發環境就安裝配置好了,可以開始在Linux下進行Android應用開發了。
2. 怎樣下載Android SDK
Android SDK在developer.android上下載,由於國內網路原因,已經無法正常訪問,android 官網之前發布過ADT版本的Eclipse(已上傳附件),即官方已經集成好ADT CDT SDK Eclipse,裡面就包含了SDK。
谷歌直接下載地址是:developer.android.com/sdk/index.html
如果你用eclipse開發Android的話,可以通過ADT裡面的 Android SDK and AVD Manager直接下載並安裝好。
3. 怎麼在Ubuntu編譯Android2.3源代碼以及製作自己的SDK
網上下一個軟碟通軟通(UitraISO)工具、然後去官網上下載一個64位ubuntu.*.iso系統文件、然後軟碟通工具自己製作一個USB啟動盤(非常簡單)不會用軟碟通的網路一下一大把!、系統最好是10.40以上的版本
使用的是ubuntu官網下載的ubuntu10.04 LTS 64位版本(ubuntu-10.04.2-desktop-amd64.iso)
配置軟體源:
系統安裝完畢以後應該首先換一個速度快的軟體源
一般用的是ubunt
不然下載各種更新和軟體包的時候非常的慢
安裝JDK:
我要編譯的是2.3姜餅的源代碼 所以需要使用jdk6 (還需要是64位的系統)
如果是32為系統藐視jdk要安裝jdk5.0的吧!藐視說有個doc什麼的不行!所以系統一般裝64的、如果是32的小伙們趕快把jdk看看
安裝方法:
打開終端
輸入
sudo add-apt-repository "deb "
sudo add-apt-repository "deb-src "
sudo apt-get update
sudo apt-get install sun-java6-jdk
就安裝好了 (ubuntu10.04 LTS版會自帶那兩個源)
並且不需要配置環境變數
這一步可以參考
安裝各種軟體包:
終端中輸入
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos texinfo libsdl-dev libwxgtk2.6-dev
最後三個是我補充的 其他都是官方文檔提供的
這一步可以參考
下載源代碼:
打開終端並輸入
mkdir ~/bin
PATH=~/bin:$PATH
這兩句是在你的個人文件夾下創建了一個名字叫bin的文件夾 並且把其加入到了環境變數中
再輸入
curl ; ~/bin/repo
chmod a+x ~/bin/repo
這兩句首先在bin目錄下面下載了一個repo文件 repo簡單來說就說用來版本控制的 我們就是用的它來同步代碼
然後建立一個用來存放源代碼的文件夾 我的這個文件夾的名字是android2.3
輸入
mkdir android2.3
cd android2.3
進入android2.3目錄
輸入
repo init -u git://androi/platform/manifest.git -b gingerbread
在此說明一下:
安卓總稱:「機器人」
1.5系統:「紙杯蛋糕」
Android 1.6 Donut甜甜圈
Android 2.0 Eclair松餅
Android 2.1 Eclair松餅
Android 2.2 Froyo凍酸奶
Android 2.3 Gingerbread姜餅(以上系統都是用於手機的)官方消息說2.4准備出來了!至於3.0目前只用於平板電腦
Android 4.0 Ice Cream Sandwich(簡稱ICS,冰淇淋三明治),
表示你需要的代碼是姜餅的 所以最後是gingerbread 如果是2.2代碼 就把gingerbread改成froyo
然後你需要輸入你的名字跟郵箱地址
如果提示找不到repo命令的話 需要重新設置環境變數 就是之前的PATH=~/bin:$PATH
輸入
repo sync
開始同步代碼 這個過程會根據你的網速來決定快慢
這一步需要下載的數據有3g那麼大
可以續傳 一次沒下完也沒關系
如果之前就已經下過一次的話 只需要把源代碼目錄(我的是android2.3)下有一個叫.repo的隱藏文件夾里的projects文件夾備份出來就可以了
以後還需要同步的時候再把projects文件夾拷貝回去
ctrl+h查看隱藏文件
這一步可以參考
編譯整個源代碼:
cd android2.3
進入你的代碼目錄
輸入
. build/envsetup.sh
注意.和build中間有個空格
輸入
lunch full-eng
make -j2
輸入make就是開始編譯代碼了 加一個-j2參數就是開兩個線程去編譯 速度會快些 我花了兩個小時的時間
編譯完畢以後馬上輸入
emulator
就可以運行模擬器了 系統能跑起來就說明編譯成功了
如果提示找不到emulator命令的話
需要添加環境變數
在android2.3目錄下的out/target/proct/generic文件夾下會看到system.img
能看到的話應該算是成功了
這一步可以參考
編譯SDK:
這一步在官方網站上沒有說明
但是在源代碼文件夾裡面有文檔提到了
就是在android2.3/sdk/docs目錄下有一個叫howto_build_SDK.txt的文件介紹了如何編譯SDK
原文
Then once you have all the source, simply build the SDK using: $ cd ~/my-android-git $ . build/envsetup.sh $ lunch sdk-eng $ make sdk
看來不需要先編譯整個系統再編譯SDK 可以直接上來就編譯SDK
按提示輸入
make到時候也可以加上-j參數 比如 make -j2 sdk
但是不推薦 因為容易編譯失敗 而且編譯SDK只需要二十多分鍾到時間 不算很長
當出現
Package SDK: out/host/darwin-x86/sdk/android-sdk_eng.<build-id>_mac-x86.zip
的時候 就表示編譯成功了 其中<build-id>默認是系統的用戶名
howto_build_SDK.txt中還提到了編譯ADT插件
我發現自己編譯到ADT插件竟然認不到platform 自己編譯出來到SDK也一樣
原因不明
只要使用官方的SDK和ADT就沒有問題了
具體就是把自己編譯出來platform拷貝到官方SDK里到platforms文件夾下 搞過Android開發都懂的
最後:
非常簡單的一步
就是直接修改源代碼然後編譯SDK就可以得到自己的SDK了
我就示範一個簡單的例子 拋磚引玉
首先我找到TextView的代碼
在frameworks/base/core/java/android/widget 如圖
我在updateTextColors方法的開頭添加了一句System.out.println
列印了一句話"Source Code Changed"
updateTextColors方法會在TextView的setTextColor方法中被調用
好 保存
編譯
然後使用這個platform
新建一個項目
調用一下TextView的setTextColor方法看看有什麼效果
一個很簡單的例子
看看
Source Code Changed被打出來了
SDK修改成功
4. linux系統下如何安裝android sdk
一、下載android sdk
下載SDK,下載地址:http://developer.android.com/sdk/index.html,選擇Linux(i386)。因為SDK只有32位的,如果裝的是64位系統,則要安裝ia32-libs,運行32位程序。
ubuntu安裝命令:sudo apt-get install ia32-libs(在Ubuntu中的命令)。
centos安裝命令:
yum install glibc.i686
下載完成後解壓,在終端進入到SDK的根目錄,然後執行:tools/android update sdk –no-ui即可開始和windows裡面一樣的更新。
二、配置環境變數
更新完成後配置環境變數。使用命令 vi /etc/profile 編輯文件profile,然後在下面增加下面內容:
export ANDROID_HOME=/opt/softwaretools/android-sdk-linux
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH
/opt/softwaretools/android-sdk-linux為SDK的根目錄。
這個配置之後,以後要執行android裡面的命令,就不是需要進到這個目錄,直接可以在終端裡面輸入。
修改完成後,使用命令 :wq! 保存關閉文件,再執行命令 source /etc/profile 使配置生效一下。
在終端輸入:android,如果Android SDK Manager窗口出來了,就證明環境配置成功。
三、配置AVD
1、進入$SDK_HOME/toos目錄
2、命令窗口運行:./android avd
5. 如何在Ubuntu下搭建Android NDK開發環境
在Ubuntu 系統下搭建Android NDK 開發環境分以下步驟:
到官網下載NDK版本。
解壓到 ~/bin 目錄下。
配置NDK環境變數,打開 ~/.bashrc文件: $sudovim~/.bashrc 在文件最後一行添加一行如下指令:exportPATH=$PATH:~/bin/android-ndk-r7b
保存關閉bashrc 文件,並運行ndk-build-v 查看NDK版本信息。
如果出現NDK版本信息,就表示NDK安裝成功了。
6. 如何快速地安裝Ubuntu SDK
1)安裝Ubuntu SDK
首先,我們可以安裝好我們的Ubuntu桌面系統.我們一般推薦安裝最新的Ubuntu桌面系統,比如目前即將面世的16.04 LTS版本.如果已經有一個Ubuntu桌面系統,我們可以它通過如下的命令來升級我們的桌面系統到最新的系統:
[html] view plain
$ update-manager -d
依照現有的文章"Ubuntu SDK 安裝"中介紹的那樣,安裝最新的Ubuntu SDK.
[html] view plain
$sudo apt-get update
$sudo apt-get upgrade
$sudo apt-get dist-upgrade
$sudo add-apt-repository ppa:ubuntu-sdk-team/ppa
$sudo apt-get install ubuntu-sdk
$sudo apt-get install ubuntu-sdk-dev ubuntu-sdk-ide
$sudo apt update && sudo apt dist-upgrade
在上面的先開始的命令中,我們先把我們的Ubuntu桌面系統更新到最新的狀態,這樣使得我們的最新的SDK依賴的包都被安裝到系統中以使得後面的SDK的安裝能夠順利進行.否側在我們的實際安裝中,如果有的包不在系統中或是最新的,那麼後面SDK的安裝可能失敗.
在這個步驟中,由於我們使用了ppa,所有它可以支持斷點續傳.如果失敗了,它可以在下次安裝時再次從上次中斷的地方繼續下載安裝.一般來說我們並不擔心這一步的失敗.對於有些開發者來說,可以嘗試使用VPN的方法來提高安裝的速度.成功安裝後,我們可以在dash中找到我們所需要的Ubuntu SDK
對於網路情況不是很好的開發者來說,請直接跳到下面的第三節下載已經成功安裝過的chroots來安裝而不需要下面的第二步.
2)安裝chroots
在這個步驟中,由於它不支持斷點續傳,所有它是最容易導致安裝失敗的環節.如果我們的網路情況好的話,我們可以直接在我們的命令行中打入下面的命令來安裝我們的chroots.在這個步驟中,我們可以來安裝我們所需要版本的chroots.我們可以通過如下的方式找到我們手機所有支持的framework:
[html] view plain
liuxg@liuxg:~$ adb shell
phablet@ubuntu-phablet:~$ click framework list
一般來說在我們開發時,會選擇我們所需要的framework(相當於iOS的版本).如果我們所定義的framework在手機中不存在,那麼我的應用在手機中將不能被運行.目前我們建議使用15.04的chroots.
- armhf chroot的安裝
我們可以通過如下的命令來安裝我們的armhf chroot:
[html] view plain
$sudo click chroot -aarmhf -f ubuntu-sdk-15.04 create
如果安裝失敗,我們必須使用如下的命令刪除已經安裝的半成品,然後再用上面的命令來安裝我們的chroot.
[html] view plain
$sudo click chroot -a armhf -f ubuntu-sdk-15.04 destroy
- i386 chroot的安裝
我們可以通過如下的命令來安裝我們的armhf chroot:
[html] view plain
$sudo click chroot -ai386 -f ubuntu-sdk-15.04 create
如果安裝失敗,我們必須使用如下的命令刪除已經安裝的半成品,然後再用上面的命令來安裝我們的chroot.
[html] view plain
$sudo click chroot -a i386 -f ubuntu-sdk-15.04 destroy
3)直接下載已有的chroots進行安裝
在實際的安裝中,我發現有很多的開發者在進行上面的安裝時由於網路的原因而導致上面的安裝不能成功.基於這個原因,我們把我已經成功安裝過的chroots上傳到我們的網路網盤供大家下載.等下載完後,我們再把它們解壓到我們所需要的路徑中.這樣的安裝好處是,我們可以使用各種方法進行斷點下載我們打包過的chroots,並成功拷貝到相應的目錄中.這個方法的缺點是:chroots可能不是最新的.開發者在以後的SDK中可以進行自動更新或手動更新我們的chroots.不過一般來說,這個chroots已經夠用即使在不更新的情況下.
刪除任何已經安裝或安裝不成功的chroots
我們可以通過上一節中介紹的方法來刪除曾經沒有安裝成功的chroots以保證我們有干凈的安裝環境:
[html] view plain
$sudo click chroot -a armhf -f ubuntu-sdk-15.04 destroy
$sudo click chroot -a i386 -f ubuntu-sdk-15.04 destroy
通過上面的方法,我們確保在我們的桌面系統中沒有任何我們曾經安裝失敗後殘存的chroots文件.
下載我們上傳的chroots
開發者可以到我們的網址下載我們已經上傳的chroots.這個chroots是到上傳時間最新的chroot.對於絕大多數的應用開發應該是沒有任何問題的.當然開發者可以在以後的SDK中進行更新.
就如同我們上面顯示的那樣.在我們上次的chroots中,有兩部分文件.
- chroot.d:
這個是需要安裝到/etc/schroot/chroot.d目錄中的文件.安裝後的文件架構是:
[html] view plain
liuxg@liuxg:/etc/schroot/chroot.d$ tree
.
├── click-ubuntu-sdk-15.04-armhf
└── click-ubuntu-sdk-15.04-i386
在實際的拷貝中,我們需要使用sudo來拷貝的方法這兩個文件.這里的liuxg是我自己的電腦liuxg上用戶名.在你們自己安裝時,這個名字應該是你們自己的用戶名.打開這個兩個文件,同樣我們需要使用sudo來編輯這兩個文件,比如click-ubuntu-sdk-15.04-armhf:
[html] view plain
[click-ubuntu-sdk-15.04-armhf]
description=Build chroot for click packages on armhf
users=root,liuxg
root-users=root,liuxg
source-root-users=root,liuxg
type=directory
profile=default
setup.fstab=click/fstab
# Not protocols or services see
# debian bug 557730
setup.nssdatabases=sbuild/nssdatabases
union-type=overlayfs
directory=/var/lib/schroot/chroots/click-ubuntu-sdk-15.04-armhf
我們可以使用vi或gedit來編輯上面的文件.替換上面的"liuxg"為自己電腦上的用戶名.然後存下來.我們使用同樣的方法來對click-ubuntu-sdk-15.04-i386進行同樣的操作.
- chroots.tar.gz
我們把這個文件拷貝到/var/lib/schroot/目錄,然後我們通過如下的方法來解壓縮:
[html] view plain
liuxg@liuxg:/var/lib/schroot/chroots$ sudo tar -xvf chroots.tar.gz
解葯縮後的文件架構為:
[html] view plain
liuxg@liuxg:/var/lib/schroot/chroots$ tree -L 1
.
├── click-ubuntu-sdk-15.04-armhf
└── click-ubuntu-sdk-15.04-i386
同樣上面的"liuxg"是我自己的用戶名.在實際應用中,它應該是你自己電腦上的用戶名.
- 檢查我們已經安裝好的chroots
我們可以通過如下的方法來檢查我們的chroots的安裝是否已經成功:
[html] view plain
liuxg@liuxg:~$ schroot -l
chroot:click-ubuntu-sdk-15.04-armhf
chroot:click-ubuntu-sdk-15.04-i386
source:click-ubuntu-sdk-15.04-armhf
source:click-ubuntu-sdk-15.04-i386
如果我們已經看到上面的顯示,表明我們的安裝已經是成功的.
- 打開我們的Ubuntu SDK來檢查我們的chroots
在SDK中,我們怎麼來檢查我們已經安裝過的chroots是否已經成功呢?我們首先打開我們的SDK,然後點擊菜單:
Tools ==> Options ==> Ubuntu ==>Click
如果我們已經看到我們的chroot已經在上面所示的圖片中,表明我們的chroot是已經安裝成功的.我們可以點擊上面的Update來更新我們的chroots到最新狀態.當然我們也可以點擊Maintain來添加或刪除我們所需要的模塊或庫.
4)最後一招
如果上面的所有方法都已經試過了,還是不可以的話,可以在地址下載debian文件進行安裝.需要安裝的文件在頁面的最下面.目前使用於16.04 LTS的desktop系統.
ubuntu-sdk-api-15.04-armhf_15.04-20160122~0ubuntu1~0xenial1_amd64.deb (573.6 MiB)
ubuntu-sdk-api-15.04-i386_15.04-20160122~0ubuntu1~0xenial1_amd64.deb (448.8 MiB)
ubuntu-sdk-api-tools_15.04-20160122~0ubuntu1~0xenial1_all.deb (10.9 KiB)
如果大家還是有困難下載上面的文件,我們已經把它們放到我們的網路雲上面了.請在網路雲盤里下載.在安裝我們上面的文件時,我們必須按照上面的方法先刪除我們先前安裝過的文件。我們可以使用如下的命令:
[html] view plain
$sudo click chroot -a armhf -f ubuntu-sdk-15.04 destroy
$sudo click chroot -a i386 -f ubuntu-sdk-15.04 destroy
然後通過如下的命令:
[html] view plain
$ sudo dpkg -i ubuntu-sdk-api-15.04-i386_15.04-20160122-0ubuntu1-0xenial1_amd64
$ sudo dpkg -i ubuntu-sdk-api-tools_15.04-20160122-0ubuntu1-0xenial1_all.deb
$ sudo dpkg -i ubuntu-sdk-api-15.04-armhf_15.04-20160122-0ubuntu1-0xenial1_amd64.deb
當然,我們也可以直接通過點擊已經下載的.deb文件,並通過系統的"Ubuntu Software"應用來幫我們進行安裝.等安裝完後,我們也可以通過命令行來查看是否已經安裝好了:
[html] view plain
$ schroot -l
我們也可以在我們的SDK的界面中進行更新的操作.當然這依賴於我們的網路速度:)
7. 怎樣在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