adbforlinux
⑴ linux下,如何掛載一塊硬碟
Linux 將一塊硬碟進行掛載到任意目錄下的方法如下:
掛載目錄是任意的,由你自己決定。
1、首先先在虛擬機上添加一塊硬碟,打開虛擬機收輸入fdisk -l 將,系統中所有的分區都列出來;
⑵ 如何在安卓系統上使用arm-linux-gdb調試內核
1,先下載最新版本的gdb源代碼包,我使用的是gdb-7.6.tar.gz,使用tar命令進行解包(tar -xvzf gdb-7.6.tar.gz),cd進gdb-7.6/gdb目錄,使用vi找到remote.c中的如下代碼:
if(buf_len > 2 * rsa->sizeof_g_packet)
error(_("Remote 'g' packet reply is too long: %s"),rs->buf);
將上面兩行注釋掉,添加如下代碼
if(buf_len > 2 * rsa->sizeof_g_packet)
{
rsa->sizeof_g_packet = buf_len;
for(i = 0; i < gdbarch_num_regs(gdbarch); i++)
{
if(rsa->regs[i].pnum == -1)
continue;
if(rsa->regs[i].offset >= rsa->sizeof_g_packet)
rsa->regs[i].in_g_packet = 0;
else
rsa->regs[i].in_g_packet = 1;
}
}
使用如下命令對代碼進行配置、編譯和安裝
./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
make
make install
2,gdbserver使用android4.2模擬器中自帶的版本(v7.1)
3,將NDK編譯好的C/C++可執行程序,上傳到模擬器中/data/test目錄下,假設可執行程序的名稱為testHello。
4,使用命令:gdbserver :7000 /data/test/testHello 啟動模擬器端的調試。
5,啟動arm-linux-gdb之前,使用vi打開~/.bash_profile文件,在其中添加:
export PATH=$PATH:/usr/local/arm-gdb/bin,以便在程序的其他目錄可以直接啟動arm-linux-gdb程序
6,cd至ndk編譯好的testHello文件所在目錄
7,使用如下命令進行埠映射:adb forward tcp:7000 tcp:7000,將模擬器的7000埠和本機的7000埠進行映射
8,使用命令:arm-linux-gdb testHello啟動gdb調試
9,使用target remote :7000 鏈接模擬器中gdbserver啟動的服務。
10,自此,我們就可以使用gdb命令進行代碼調試了。
⑶ 如何將android linux燒到Raspberry Pi及其調試
一.Raspberry Pi入門向導。
可以在以下地址下載Raspberry向導
2.構建android framework
命令如下:
cd <your_android_path>
source build/envsetup.sh
lunch
顯示lunch菜單如下:
You』re building on Linux
Lunch menu… pick a combo:
1. full-eng
2. full_x86-eng
3. simulator
4. full_rpi-eng
5. cyanogen_generic-eng
6. cyanogen_rpi-eng
選擇第6個菜單。
然後進行編譯
make -j8
等待編譯成功,這可能需要幾十分鍾。
編譯成功之後將」system」目錄復制到root目錄下,接下來我們可能會用到。
命令如下:
cd <your_android_path>
cp -r system out/target/proct/rpi/root
ps:編譯時如果jdk版本不對,可將其改成jdk1.6
五.如何在Raspberry Pi上跑android linux內核?
1.准備一張存儲空間2G以上的SD卡及相應讀卡器。
2.下載arch linux鏡像文件
用wget工具下載鏡像文件:
wget http://files.velocix.com/c1410/images/archlinuxarm/archlinux-hf-2012-09-18/archlinux-hf-2012-09-18.zip
解壓:
unzip archlinux-hf-2012-09-18.zip
成功之後,你會在當前目錄下發現一個鏡像文件。
3.燒linux鏡像文件。
sudo dd bs=4M if=archlinux-hf-2012-09-18.img of=/dev/sdb
sudo sync
ps:/dev/sdb是SD卡在主機上的設備文件。不同的電腦可能不同。
4.用android linux內核代替這個內核。
做完上述步驟之後,當你把SD卡插在電腦上,你會發現有兩個分區:一個是引導區,另一個是文件系統區。
用android linux內核代替引導區的kernel.img。
cp -uv <your_android_linux_path>/arch/arm/boot/zImage <your_sdcard_boot_partition>/kernel.img
5.用android linux文件系統代替這個linux文件系統
rm -rf <your_sdcard_file_system_partition>
cp -r <your_android_source_code_path>/out/target/proct/rpi/root/* <your_sdcard_file_system_partition>
6.配置內核命令行cmdline.txt
Edit the <your_sdcard_boot_partition>/cmdling.txt, and replace 「init=/…」 with 「init=/init」
7.做完這些之後就可以在Raspberry Pi上跑這個android linux內核。
六.如何為Android linux做一張可引導的SD卡
1.刪除已有分區,如果沒有就不用刪了。
Command(m for help):p
Disk /dev/sdb: 15.7 GB, 15707668480 bytes
64 heads, 32 sectors/track, 14980 cylinders, total 30668085 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0×00000000
sudo fdisk/dev/sdb
Command(m for help):d
Partition number(1-4):1
Command(m for help):d
Selected partition 2
Command (m for help): p
Disk /dev/sdb: 15.7 GB, 15707668480 bytes
64 heads, 32 sectors/track, 14980 cylinders, total 30679040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0×00000000
Device Boot Start End Blocks Id System
Command(m for help):w
ps:確定刪除之後,卸掉SD卡,然後再裝上。
以bytes問單位記下SD卡的大小。後面的步驟會用到。
然後進入」Expert mode」。
Command(m for help):x
將這個SD卡設置為255個磁面,63個扇區和磁柱數量(不同的SD/mmc卡有著不同的此柱數量)
Expert command (m for help): h
Number of heads (1-256, default 64): 255
Expert command (m for help): s
Number of sectors (1-63, default 32): 63
ps:在下一步開始前,先要計算磁柱數量,計算過程如下:
B:SD卡以bytes為單位的大小(前面已經記住了即:15707668480)
C:磁柱的數量
C=B/255/63/512
例如:我的SD卡大小是16G(15707668480)
C=15707668480/255/63/512=1909.68191721,約等於1909.
Expert command (m for help): c
Number of cylinders (1-1048576, default 14980): 1909
Expert command (m for help): r
2.新建分區
如果你的SD卡已經分區,請按照上述步驟刪除分區。接下來,我們將創建兩個分區,一個是引導區,用來存放內核鏡像等文件;另一個文件系統區存放android linux文件系統。
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-30679039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-30679039, default 30679039): +128M
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))
Command (m for help): a
Partition number (1-4): 1
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (1-4, default 2):
Using default value 2
First sector (264192-30679039, default 264192):
Using default value 264192
Last sector, +sectors or +size{K,M,G} (264192-30679039, default 30679039):
Using default value 30679039
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.
ok,分區成功,現在我們有兩個分區,接下我們對分區進行格式化。
3.格式化分區
對引導區進行格式化:
sudo mkfs.msdos -F 32 /dev/sdb1 -n BOOT
mkfs.msdos 3.0.12 (29 Oct 2011)
對文件系統區進行格式化:
sudo mkfs.ext3 /dev/sdb2 -L ROOTFS
mke2fs 1.42 (29-Nov-2011)
Filesystem label=ROOTFS
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
950976 inodes, 3801856 blocks
190092 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3896508416
117 block groups
32768 blocks per group, 32768 fragments per group
8128 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
4.設置引導區
引導區必須包含以下文件,你可以從官方鏡像里獲取(bootable/fat32 partition)也可以從書面步驟中復制過來:
bootcode.bin:第二階段的引導程序,
loader.bin:第三階段的引導程序,
start.elf:GPU二進制固件映像,
kernel.img操作系統的內核鏡像文件,
cmdline.txt:傳遞給內核的參數.
5.設置root文件系統分區
ROOTFS分區包含android文件系統,是從<your_android_framework_path>/out/target/proct/rpi/root復制過來的。
cp -r <your_android_framework_path>/out/target/proct/rpi/root/* /media/ROOTFS/
6.完成上述步驟之後,將其放在Raspberry Pi上跑。
七.如何在Raspberry Pi使用adb?
1.查看網路
當android linux在Raspberry Pi運行時,切換到控制台,執行以下命令:
ifconfig eth0
記下ip地址。
如果不能找到ip,可以輸入以下命令:/system/xbin/dhcp-eth0,來啟動網路連接程序。
ps:如果屏幕沒有顯示控制台,只要按CTRL+ALT+F2即可切換到控制台。如果你想要切換到Android界面,只要按CTRL+ALT+F7即可。
2.遠程連接adb伺服器
在主機上執行以下命令即可與同一區域網的Raspberry Pi相連
adb connect ip
連接成功後,你就可以用adb工具輸出日誌,執行shell命令等。
3.也可以用數據線連接主機,直接在主機上調試。
進入調試的命令為:
screen /dev/ttyUSB0 115200
名詞解釋:
交叉編譯(cross compile):交叉編譯呢,簡單地說,就是在一個平台上生成另一個平台上的可執行代碼。這里需要注意的是所謂 平台,實際上包含兩個概念:體系結構(Architecture)、操作系統(Operating System)。同一個體系結構可以運行不同的操作系統;同樣,同一個操作系統也可以在不同的體系結構上運行。舉例來說,我們常說的x86 Linux平台實際上是Intel x86體系結構和Linux for x86操作系統的統稱;而x86 WinNT平台實際上是Intel x86體系結構和Windows NT for x86操作系統的簡稱。
⑷ 如何在android程序中執行adb shell命令
android中執行shell命令有兩種方式:
1.直接在代碼中用java提供的Runtime 這個類來執行命令,以下為完整示例代碼。
public void execCommand(String command) throws IOException {
// start the ls command running
//String[] args = new String[]{"sh", "-c", command};
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command); //這句話就是shell與高級語言間的調用
//如果有參數的話可以用另外一個被重載的exec方法
//實際上這樣執行時啟動了一個子進程,它沒有父進程的控制台
//也就看不到輸出,所以需要用輸出流來得到shell執行後的輸出
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
// read the ls output
String line = "";
StringBuilder sb = new StringBuilder(line);
while ((line = bufferedreader.readLine()) != null) {
//System.out.println(line);
sb.append(line);
sb.append(' ');
}
//tv.setText(sb.toString());
//使用exec執行不會等執行成功以後才返回,它會立即返回
//所以在某些情況下是很要命的(比如復制文件的時候)
//使用wairFor()可以等待命令執行完成以後才返回
try {
if (proc.waitFor() != 0) {
System.err.println("exit value = " + proc.exitValue());
}
}
catch (InterruptedException e) {
System.err.println(e);
}
}
}
2.直接安裝shell模擬器,即已經開發好的android應用,啟動後類似windows的dos命令行,可以直接安裝使用,可執行常用的linux命令,應用在附件。
⑸ linux下關於adb命令的一些知識
Android Debug Bridge,一般簡稱為adb,主要存放在sdk安裝目錄下的platform-tools文件夾中,它是一個非常強大的命令行工具,通過這個工具你能夠與你的android設備進行交互。同時這是一個包含了以下三部分的cs模式的程序:
1) adb client
從圖中,我們知道client是運行在PC端的,每當我們發起一個adb命令的時候,就會開啟一個client程序。當然,當我們開啟DDMS或者ADT的時候,也會自動創建client。
當我們開啟一個client的時候,它首先會去檢測後台是否已經有一個server程序在運行著,否則會開啟一個adb-server進程。
所有的client都是通過5037埠與adb-server進行通信的。
2)adb daemon(adbd)
從圖中,我們知道daemon是作為一個後台進程運行在模擬器/真實Android設備中的。
daemon使用埠的范圍是5554-5585,每個模擬器/設備連接到PC端時,總會開啟這么一個後台進程,並且為其分配了兩個連續的埠,比如:
Emulator 1, console: 5554
Emulator 1, adb: 5555
也正因為每個設備都分一組兩個埠,也已adb連接手機的最大數量為16。
說回埠的作用,在這兩個埠中,其中偶數埠是用於server 與設備進行交互的,可以讓server直接從設備中讀取數據,而奇數埠是用來與設備的adbd進行連接通信的。
2) adb server
從圖中,我們同樣可以知道,server也是作為一個後台的程序運行在PC端的,他負責管理client進程以及adb daemon之間的通信。
當一個server開啟的時候,他會自動綁定並且監聽5037埠,接收client通過該埠發送過來的命令。同時server還會對5555-5585間的奇數埠進行掃描,進行對已連接設備的定位。
1.2 常用的adb命令
首先我們先來介紹一下,adb命令的使用格式吧:
adb [-d|-e|-s ]
adb是必須的,接下來方括弧[]裡面的內容不是必須的,最後才是我們需要執行的命令操作,例如 adb -s emulator-5554 install UCBrowser.apk (這是安裝UC瀏覽器的意思)
下面先介紹下,前面幾個參數的含義吧:
-d: 讓唯一連接到該PC端的真實安卓設備執行命令,如果發現USB中連接有多部設備,將會報錯
-e: 讓唯一連接到該PC端的模擬器執行命令,如果發現開啟了多個模擬器,將會報錯
-s:通過設備的序列號進行指定設備執行命令
如果設備只連接有一個設備或者一個模擬器的時候,可以不用聲明這三個參數,adb默認會讓這部唯一連接到的設備進行命令執行。
ok,下面開始講解常用的命令吧:
1) 查看當前PC端連接有多少設備:
adb devices
終端中的執行結果為:
從上圖中,我們看到了設備有的兩種狀態,其實執行該命令,可能返回的狀態有三種:
I. device 設備已經成功連接到了adb-server
II. offline 設備並沒有連接到adb或者沒有響應
III. no device 並沒有設備/模擬器連接
2) 查看adb的版本
adbversion
終端中的執行結果為:
3) 給設備進行軟體的安裝
adb -s install
eg:
adb -s 99eb07a9 install D://Test.apk
終端中的執行結果為:
除了上面這種方法,我們還有另外一個命令:
adb -s shell pm install [options]
其中[options]中最常用的選項是-r,代表著本次安裝是重新安裝,會保留用戶數據。
4) 卸載設備中已經安裝的軟體
adb -s uninstall
eg:
adb -s 99eb07a9 uninstall cn.uc.test
終端中的執行結果為:
除了上面這種方法,我們還有另外一個命令:
adb -s uninstall [options]
這里的options是-k,加上該參數表明卸載軟體後依舊保留用戶數據
5) 將數據從設備復制到PC中
adb -s pull
eg:
adb -s 99eb07a9 pull /sdcard/stericson-ls D://
終端的執行結果:
在D://盤中我們也可以發現stericson-ls文件
6) 講數據從PC端復制到設備中
adb -s push
eg:
adb -s 99eb07a9 push d://stericson-ls /sdcard/
終端的執行結果:
7) 獲取連接到的手機的序列號
adb get-serialno
終端的執行結果:
8)獲取設備的連接狀態
adb -s get-state
eg:
adb -s 99eb07a9 get-stat
終端的執行結果:
9) 等待設備連接成功
adb wait-for-device
該命令將會阻塞一直到默認連接的那部機器狀態變為device,也就是連接成功。
10) adb-server 的開啟與關閉
adb kill-server
adb start-server
終端的執行結果:
有時候我們開啟server會失敗,這是因為我們裝了的手機助手,豌豆莢或者其他軟體自帶有自己的adb,導致埠沖突開啟失敗。主要關掉那些軟體並且殺掉那些軟體自帶的adb進程重來即可。
1.2 手機執行Shell命令
眾所周知,Android的內核本身就是Linux,所以Android本身也支持Linux命令,但是因為是手機系統,所以進行了一定的刪減,部分命令不支持,而不支持的部分,我們可以通過安裝busybox這個軟體進行
填補。
下面我們講解下如何在手機中執行Shell命令:
1) 每次都加上adb shell來進行命令的發送與執行
adb shell
2) 先通過adb shell進入手機Shell執行狀態,然後直接輸入Linux命令,如圖:
1.3 Activity Manager 常用命令與參數說明
一般情況下,我們最常用它來進行app的開啟,並且傳遞一定的參數過去,比如:
adb shell am start -a android.intent.action.VIEW -n cn.uc.test/.MainActivity -d
在這里就不做太過詳細和重復的說明了
1.4 Package Manager 常用命令與參數說明
1) 使一個apk處於禁用狀態,相當於卸載了:
disable
其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
eg:
adb shell su disable com.UCMobile/.main.UCMobile
終端執行結果:
同時我們在手機上發現,UC瀏覽器的圖標不見了
2) 讓一個apk從禁用狀態恢復過來
enable
其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
eg:
adb shell su enable com.UCMobile/.main.UCMobile
終端執行結果:
同時我們從手機上發現,UC瀏覽器的圖標又回來啦。
3) 查看一個apk所在的路徑
pm path
eg:
adb shell pm path com.UCMobile
終端執行結果:
4) 查看手機中裝的所有的包
pm list packages
再次不做過多的說明
1.5其他常用的adb命令
1) 屏幕錄像
例如,屏幕開始錄像並且儲存到/sdcard中,同時名字為demo.mp4
adb shell screenrecord /sdcard/demo.mp4
2) 關閉設備請求,開啟設備
adb shell stop
adb shell start
3)設備關機以及重啟
adb reboot
adb shutdown
⑹ Ubuntu下adb的使用及常見問題處理
Ubuntu下adb的使用及常見問題處理
方案一:使用ubuntu系統自帶的安裝包
sudo apt-get install android-tools-adb
或者
sudo apt-get install adb
方案二:使用Android源碼編譯生成的adb文件
Android源碼編譯完成之後,會在編譯過的項目目錄下./out/host/linux-x86/bin/生成adb文件,需要將其拷貝到系統的/usr/bin目錄下,並更改許可權。
sudo cp /home/apuser/code/out/host/linux-x86/bin/adb /usr/bin
sudo chmod a+x /usr/bin/adb
說明:這個adb文件也可以在android-sdk-linux下的platform-tools目錄下找到。
在終端運行 adb help或者adb查看adb是否安裝成功。
adb help
或者
adb
正常情況下,可看到adb的版本信息,以及adb支持的相關指令和說明。
mkdir~/.android
echo 0x1782 > ~/.android/adb_usb.ini
可以查看/home/apuser/.android/adb_usb.ini是否生成成功,且內容為0x1782
這個0x1782是設備的VID號,可以使用lsusb指令查詢自己設備的VID號是多少,如果是調試多個設備,可依次將設備的VID號添加到adb_usb.ini中
備註:展訊為0x1782,MTK為0x0e8d,高通為0x056c
到:/etc/udev/rules.d/51-android.rules命令:
cd /etc/udev/rules.d
sudo gedit/etc/udev/rules.d/51-android.rules
添加
SUBSYSTEM=="usb",SYSFS{idVendor}=="1782", MODE="0666",GROUP="plugdev"
其中 1782 為展訊設備號,也可以通過lsusb 來查看所有 usb 設備。
說明:
1、展訊的設備號是1782,MTK的設備號是0e8d,高通660的設備號是056c,
其他平台的可查找確認後,填寫到這里。
2、如果沒有/etc/udev/rules.d/51-android.rules 文件,需要自己創建一下。
3、修改/etc/udev/rules.d/51-android.rules不需要重啟Linux機器,重新插拔一下設備就可以了。再次運行adb devices就可以看到你的設備已經連接。
在命令窗口執行adb shell; adb devices
可以shell登錄手機,也可以出 log, logcate 具體命令還需要學習。
使用上文的步驟操作之後,大多數系統里adb都可以使用,但在有些版本的adb或者系統中仍會報如下問題:
apuser@ubuntu2:~/adbtools$ adb devices
List of devices attached
faf80ac1 no permissions (user in plugdev group; areyour udev rules wrong?); see [http://developer.android.com/tools/device.html]
可使用一下解決方案,進行解決
解決方案:
setp 1: lsusb 找到你手機的usb 地址
apuser@ ubuntu2:~/adbtools$ lsusb
Bus 002 Device 002: ID 1f75:0621 Innostor Technology Corporation
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 0bda:58db Realtek Semiconctor Corp.
Bus 001 Device 005: ID 8087:0a2b Intel Corp.
Bus 001 Device 004: ID 138a:0097 Validity Sensors, Inc.
Bus 001 Device 003: ID18f8:0f99
Bus 001 Device 014: ID 19d2:ffb0 ZTE WCDMA Technologies MSM
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
他會列出來所有的usb 設備。如果試下找不到,那麼拔掉設備看下,哪了沒有了就是哪個。
setp2: 配置規則文件
apuser@ ubuntu2:~/adbtools$ sudo gedit /etc/udev/rules.d/51-android.rules
[sudo] password for apuser:
之後把這些文本 到編輯器裡面:
ATTR{idProct}=="ffb0",SYMLINK+="android_adb", MODE="0660",GROUP="plugdev", TAG+="uaccess", SYMLINK+="android"
注意:ffb0 是查找到的手機設備的usb 的地址。
Bus 001 Device 014: ID 19d2:ffb0 ZTE WCDMATechnologies MSM
改成你的地址。
如果沒有/etc/udev/rules.d/51-android.rules 文件,麻煩自己創建一下。
setp3: 之後執行命令:
apuser@ ubuntu2:~/adbtools$ sudo usermod -a -G plugdev $(id -u -n)
apuser@ ubuntu2:~/adbtools$ sudo udevadm control --reload-rules
apuser@ ubuntu2:~/adbtools$ sudo service udev restart
apuser@ ubuntu2:~/adbtools$ sudo udevadm trigger
setp4: 之後重啟adb
apuser@ ubuntu2:~/adbtools$ adb kill-server
apuser@ ubuntu2:~/adbtools$ adb start-server
apuser@ ubuntu2:~/adbtools$ adb devices
List of devices attached
faf80ac1 unauthorized
apuser @ ubuntu2:~$adb devices
List of devices attached
???????????? no permissions
提示很明確,就是adb許可權有問題,而且
???????????? no permissions
這樣的提示,說明使用的adb版本較低,最好使用高版本的adb,安裝Ubuntu系統自帶的adb可能會出現這種現象。如果adb版本比較高,就會出現如下提示:
faf80ac1no permissions……
使用adb shell 也會提示許可權error
apuser@ ubuntu2:~$adb shell
error:insufficient permissions for device
根本原因是: adb server 需要以 root 的許可權啟動
臨時方法 如下:
apuser@ubuntu2:~$sudo -s
[sudo]password for apuser:
root@ ubuntu2:~#adb kill-server; adb start-server
* daemon not running. starting it now *
* daemon started successfully *
apuser@ ubuntu2:~# exit
apuser @ ubuntu2:~$
再次執行adb shell就可以了。
該許可權問題,可使用sudo啟動adb來解決,但不是根本解決之道,因為每次都要sudo來提高許可權,太麻煩,而且如果使用的eclpse,或者idle來調試時還是要面對該該問題。
最好按本文第一部分的方法安裝adb。如果按本文第一部分安裝了adb,但還出現改問題,可使用which adb查看,當前使用的adb那個路徑下的adb.以確保使用正確的adb
3、如果需要調試多個設備,以下的添加方法可能更為合適
這個方案對於不出現user in plugdev group; are your udev rules wrong?問題的系統來說是可行,的,如果出現user in plugdev group; are your udev rules wrong?問題,就不用考慮了。
清空51-android.rules,添加如下一行,一勞永逸(需要測試好幾種設備,每次都添加一個會很麻煩)。
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666", GROUP="plugdev"
我並不是很清楚具體的含義,只是模仿10-vboxdrv.rules來寫的,這個是virtualbox的udev規則文件,因為名字開頭數字大文件中記錄的規則會覆蓋名字開頭數字小的文件中的規則,所以你需要盡可能設置的文件名大一些,51已經夠用了(我原來想寫在10-vboxdrv.rules,讓他們用一個文件,但是失敗了)
adb kill-server
sudo udevadmcontrol --reload-rules
sudo service udevrestart
sudo udevadmtrigger
lsusb
可將這些指令寫入一個sh腳本中,配置完規則,或者要檢查USB設備時,直接執行該腳本,以提高效率。