2011-12-06

Tags: 程式語言 , android

如果單純寫java層的Android App,當然是什麼平台都很方便。但是如果要在android上寫JNI這類的C<->Java inteop的程式,可就麻煩了(至少在Windows平台很麻煩)。在Windows平台上只能用Cygwin,再怎樣都比用Linux上的GCC要麻煩,而且天曉得Gygwin會不會跟你噴什麼怪怪的Error。在不影響Widnows的前題下,最省事的方式應該就是用Virtualbox建一個VM,上面裝Linux,然後在這之上去連接Android硬體。儿年前我就有這想法了,但是當時我發現在VM上用ADB經由USB Port要去連Android硬體總是連不上,只好放棄這做法,乖乖的在硬碟上裝一個Linux來用...Orz

這儿天試了一下近期版本的Virtualbox,發現這功能居然能Work了,真讓人開心。看來我可以把NB上的Linux給砍了,直接用VM上建的Linux就好...:P

以下是ADB經由VirtualBox上的USB Port存取Android硬體的步驟

1.Windows上安裝Android USB Driver

2. 在Virtualbox上面把Android硬體對應的USB Port開啟
3.在VM裡的Linux執行lsusb指令,確認抓的到Android裝置
cloudtu@cloudtu-VirtualBox:~$ 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 001 Device 002: ID 0502:3202 Acer, Inc. Liquid
Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet

4.在VM裡的Linux安裝「Android SDK Platform-tools」

5.在VM裡的Linux執行adb指令(第一次執行這個指令時要有root的權限才可以正常執行,所以要下sudo),確認抓的到Android裝置
cloudtu@cloudtu-VirtualBox:~/android-sdk-linux/platform-tools$ sudo ./adb devices
[sudo] password for cloudtu:
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
0000947457723221 device

6.在VM裡的Linux執行logcat,如果看到android硬體裡的一堆訊息,就代表成功連上裝置了。
cloudtu@cloudtu-VirtualBox:~/android-sdk-linux/platform-tools$ ./adb logcat
I/BackupManagerService( 113): + com.android.providers.settings
I/BackupManagerService( 113): Backup enabled => false
I/SystemServer( 113): AppWidget Service
D/TelephonyManager( 113): listen=android.telephony.PhoneStateListener$1@2fd2a4a0 event=1073742305
I/WindowManager( 113): SAFE MODE not enabled
D/SurfaceFlinger( 113): createConnection: cid=0x1
I/ActivityManager( 113): Config changed: { scale=1.0 imsi=0/0 loc=zh_TW touch=3 keys=1/1/2 nav=1/1 orien=1 layout=34}

7.Reference document
http://forum.xda-developers.com/showthread.php?t=570452g
http://www.blogjava.net/brian/articles/316019.html