2014年2月25日 星期二

準備拿授權碼!!!!

取得這門課授權碼的條件很簡單,
助教寫了一個小 app 給我們,也就是那個 NTU Android Homework ,
只要能夠改一下,讓這個 app 可以寫檔案到 SD card 就好了。

首先,用 adb shell 進去看看,
不由分說地先試試看 touch /sdcard/foo ,
果然 touch 不到,摸都摸不著。

不死心,繼續留在 adb shell 裡用 ls 檢查 /sdcard 這個東西,
發現它是一個 symbolic link ,連向 /storage/sdcard ,
它的權限是 drwx------ ,這樣除了 root 以外都沒辦法在裡面寫檔案呀,
於是就打了 chmod 777 /storage/sdcard ,
沒想到居然出現 "Unable to chmod /storage/sdcard: Read-only file system" 。

看了課程網之後,發現原來要先用 mksdcard 造出一塊 SD card 才對,
但這個 mksdcard 還沒 compile 好,只好先到 sdk/emulator/mksdcard 去 mm 一下。
順利 compile 出 mksdcard 之後,就可以造出一塊 sdcard.img 了,
因為我不知道該把它放在哪兒比較好,所以就先放在 project 的根目錄吧。

接著把 emulator 重新開機,只是這次開的時候要加一個 -sdcard sdcard.img 的參數。
用 adb shell 進去之後,果然可以在 /sdcard 裡 touch 了,愛怎麼摸就怎麼摸。

接著到 NTU Android Homework 這個 app 裡加上寫檔案的 function ,
就成功寫進去了!!

讓我有點困惑的是,有些人說還要去增加 "WRITE_EXTERNAL_STORAGE" 的權限,
我記得以前寫 app 時的確也是需要,
但現在怎麼不用了呢?是哪裡出問題了嗎?
不管了,先去拿授權碼再說吧XD

2014年2月22日 星期六

和 VirtualBox 有衝突!!!!

因為我不喜歡 Wine ,但又需要電腦版的 LINE 來聯絡,
所以我一直有用 VirtualBox 裝一個 Windows XP 在電腦裡。

剛剛想要打開這個 Windows XP ,沒想到它壞了,
說要我跑個 /etc/init.d/vboxdrv setup 才行,
這問題好像在更新完 VirtualBox 之後常遇到,沒什麼,就跑一下嘛。

沒想到居然 /etc/init.d/vboxdrv 不見了!!
平常都在呀,今天跑到哪裡去了?
回想一下,在 compile 這個 android 的 project 時,
好像有瞄到它有動到我 VirtualBox 的東西,當時就有種不安全感,
果真出包了。

查了一下,看到有人有類似的問題
但最佳解答看不懂,反而是票數最高的 Jason Zhu 救了我一命:

$ sudo dpkg-reconfigure virtualbox-dkms
$ sudo modprobe vboxdrv

這樣就好了, VirtualBox 打得開,而 emulator 也可以正常運作,
真是可喜可賀。

打不開 emulator 啦!!!

睡完回籠覺之後,再試著打開了 emulator ,
竟然就已經打不開了!!
出現了這樣的錯誤訊息:

emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.

If you are an Android SDK user, please use '@<name>' or '-avd <name>'
to start a given virtual device (see -help-avd for details).

Otherwise, follow the instructions in -help-disk-images to start the emulator

查了半天,大家都說要手動設定 ANDROID_PRODUCT_OUT 這個環境變數,
但我試了之後,發現這樣對我來說還不夠,還需要設定 ANDROID_BUILD_TOP 。
越想越奇怪,我早上明明就沒有打過這兩個變數啊,也可以用,
試了一下,原來只要重新打一次

$ . build/envsetup.sh
$ lunch aosp_arm-eng

就可以同時設定這兩個環境變數,然後跑 emulator 了。

不過話說回來, lunch 是個什麼東西呢?午餐嗎?
當時看了這個說明,感覺只是要選一個 target 來 build ,
所以我以為 lunch 只是一個在 make 前要做的動作,
沒想到後來啟動 emulator 前也要做,
希望以後能知道為什麼。

終於 compile 好了!!!!

睡前把它 compile 下去之後,想說早上醒來應該就好了,
沒想到半夜大地震,被震醒之後就睡不著了。

到了早上七點,很幸運地沒有出任何錯誤就 compile 完了,
很興奮地看看接下來要幹嘛
發現要開 emulator ,順利開起來了一支手機,
然後開 adb 的 logcat ,也順利跑出一堆看不懂的 log ,
最後要開 ddms ,但找不到這個程式,不過就先算了。

比照一下課程網上的截圖,
發現我少了 CMStats 和 NTU Android Homework 這兩個 app ,
其中 NTU Android Homework 感覺是比較重要的XD
看了這裡的教學之後才知道,
原來它的 source 放在 packages/apps/DeviceStatus ,
而 compile 完的 .apk 檔在 out/target/product/generic/system/app 裡,
而且叫做 DeviceInfo.apk ,這樣取名誰知道啊!!!
不過也許這樣取名是有一些原因的吧。

打開 emulator 之後,
用 adb install DeviceInfo.apk 把它安裝起來,
果然有了 NTU Android Homework 了,真感動,
點開來是一些枯燥的系統資訊,真無聊。

有點想去睡個回籠覺了。

2014年2月21日 星期五

要把手伸出去了!!!

今天下午巧遇綠豆,一不小心就受了誘惑,
就決定要修廖世偉老師的 " Android 虛擬機與編譯器" 了。

因為修課的基本要求是寫完部份的作業一,
晚上回家和綠豆要了課程網之後,
就一邊吃水餃,一邊看作業一要幹嘛。

一開始總是要研究怎麼設定環境怎麼下載程式碼之類的,
有些事情有點不是很明白,
先記下來,以後再慢慢查資料:

  1. 為什麼不能用 OpenJDK ,而一定要用 Oracle 的 Java 呢?
  2. 為什麼我會需要用到 USB 呢?
  3. 為什麼 ccache 可以加快 compile 的速度呢?
  4. 為什麼我除了 Git 之外,還要用 Repo 呢?
老實說,有好多工具我都沒有聽說過,
像是 ccache 和 repo ,還有後面要 compile 前的 lunch ,
我最想要知道的事情是,
這些工具是只有 Android 的 project 在用,還是其他 project 也都在用啊?

目前我的問題差不多就這樣,
打到這裡我發現連 source 都還沒下載完…
我的網路還真是慢啊,這樣什麼時候才能開始 compile 呢?