顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

8.20.2010

在Framework中加入自己開發的API

大家好久不見,今天要分享的是如何將自有API跟系統一起build並且能將build出來的SDK放在Eclipse裡面用,不過這招不適合要放到android market上的程式,如果是這種情況,你需要的是git並且做好管理(包括把Eclipse的sync選項打開,好像越扯越遠...)

我想很多人應該也跟我一樣,開發程式時會寫出很多共用的API(通常是utility API),或是很多程式都會去bind同一樣一個service,而這些code(包括AIDL檔)通常會有很多份copy在各個Eclipse的project內,造成sync上的問題。這還不是主要的問題,更主要的問題在於,如果你的程式用到了hidden API,那可是連在Eclipse中build都build不過,更別想直接跑在emulator或是透過新版adb install到target上(因為Eclipse有error就無法產生apk檔)。

為了解決這兩個問題,我想最好的方式就是把code放在frameworks中一起build,而build出來的SDK正好可以給Eclipse用。

假設今天com.blogspot.dejob這個package有a.java及b.aidl要放進framework,那麼請試著這麼做:
1. 把這兩個檔案放在frameworks/base/core/dejob/java/com/blogspot/dejob/底下
2. 更改build/core/pathmap.mk,在FRAMEWORKS_BASE_SUBDIRS最後面加上"dejob \"
3. 更改frameworks/base/Android.mk:
  • 在LOCAL_SRC_FILES這一段的最後加入dejob/java/com/blogspot/dejob/b.aidl,這樣就可以讓AIDL檔build到framework中,但是這樣還不夠,你還需要下一步才能將AIDL檔內的javadoc build到SDK的document內。
  • 在aidl_files這一段的最後加入frameworks/base/dejob/java/com/blogspot/dejob/b.aidl
  • 在packages_to_document這一段的最後加入com/blogspot,意思是說com.blogspot底下的所有package都build進document。
4. 照下列順序來build code:
  1. 先確認你不是用root權限來build code!
  2. 裝好所有toolchain及下載android source code(騙一點篇幅,雖然沒稿費...)
  3. 切換到android目錄下打". build/envsetup.sh",請注意最前面那個"點"
  4. lunch sdk-eng
  5. make sdk
5. 接下來就可以先去運動一陣子(除非你的電腦配有12 core CPU+SSD RAID+16GB以上的RAM)

如果你的code沒寫錯,應該就可以看到SDK已經build完並且壓成zip檔了,接下來只要將這個zip檔解開,然後在Eclipse中指定SDK的位置到這個目錄就可以了。另外也建議在Eclipse的project中選clean將project重新build一次才能知道有沒有成功。

講一些題外話,最近一直在想要不要去應徵聯發科的android工程師,不過應該會被打槍吧,不知道還有沒有其他android相關的工作...

6.15.2009

在Eclipse下看framework的source code

參考: View Android Source Code in Eclipse

簡單來說,trace ADT的code會發現ADT會去android.jar同個目錄下的sources這個目錄找source code,
所以我們只要將android的java source code撿一撿,照package放到sources這個目錄就可以了。
所以參考link中的python script就是在幹這件事,不過我有兩點建議:
1. 在沒有make過的source code目錄下執行這個script:因為out這個目錄下有重複的java code
(而且out這個目錄有夠肥)
2. 把zippath = match.group(1).replace('.', '/') + '/' + file改成
zippath = 'sources/' + match.group(1).replace('.', '/') + '/' + file
這樣解出來的檔案和目錄就會放在sources目錄裡面了.

最近還在研究怎麼debug native code,之前make的gdb不能debug multi-thread的程式 = ="
看看android-ndk有沒有進展好了

2.18.2009

癮科技也有Android專屬子頻道了

網址是 http://android.cool3c.com/
這是比較偏向user端的site,開發者也可以藉此觀察使用者的需求。

順便更新一下近況,歷經過年,最近的工作機會“似乎”有那麼多了一些,所以最近忙著更新自傳履歷還有K書,不管未來是做什麼工作,基本功是一直要練的。明天又要去面試了,先這樣。

12.16.2008

[DDMS] Capture screen 擷取畫面

所謂工欲善其事,必先利其debugger,想要在Android上面開發程式,總免不了要跟DDMS親蜜親蜜…(快說不下去了),由於日後免不了要和大家分享使用畫面,或是有撰寫使用說明的需要,所以擷取畫面是必不可少的功能。在Android中當然可以寫個utility把Activity的畫面抓下來,不過,這種小事當然不需要用到牛刀,DDMS就可以做到了。以下的說明是在Eclipse,也就是Google官方所建議的開發環境中,使用其他IDE的話,如果沒有和DDMS結合得很好,可能需要手動把DDMS叫出來。

在Eclipse的右上角有個DDMS的tab,不過我剛裝好ADT的時候,其實並沒有找到DDMS的tab,而是像這樣:


這時候要按一下 會出現下拉式選單,選擇Others會出現這樣的視窗,然候選取DDMS按OK:


接著就會在右上角看到DDMS的圖示(如果找不到請拉一下左邊斜斜的地方,可以調整工具列):


點選DDMS以後就可以看到DDMS的視窗,此時還沒有跑模擬器,當然是空空如也。所以接下來就是要Run要跑的程式囉!Run程式基本上不在本篇的範圍內,所以我假設各位都已經有先玩過了,當程式Run起來後,點選剛剛那個DDMS的圖示切換到DDMS視窗,我們可以在左上的窗格看到這樣的畫面:


這個Window的功能是顯示所有正在模擬器上面跑的process以及相關的功能,還有…我們所要的Screen capture功能(都已經用圖提示這麼明顯了)!在模擬器執行的狀態下,我們可以擷取到任何顯示在Android上的畫面,包括開機畫面。另外,我們也可以在獨立執行的DDMS中使用快速鍵Ctrl + s來抓畫面。以下就是API Demos中的OpenGL ES畫面:


是不是又大又清晰呢?雖然筆者用Mac可以很容易地按下cmd+shift+4來抓螢幕的任何畫面,不過還是沒有DDMS來得方便,在DDMS中還可以隨時Update要抓的畫面,對一些畫面變化很多的程式來說,DDMS提供了蠻方便的工具,希望對各位有幫助。往後如果還有其他有關DDMS的心得也會放上來看各位分享。

參考資料: Using DDMS - Android

12.13.2008

Face detection in Android

以前曾經做過Face detection的研究(雖然指導教授認為這個topic已經被做到爛了),拜數位相機普級所賜,人臉偵測一下變成了人人口袋都有的技術。人臉偵測在相機的應用上之所以普級,在我的觀察中有幾個因素:
1. 自動對焦。一般消費者用DC拍有人臉的照片(自拍或是合照),都是希望能人臉能是對焦的部份,但是過去的DC所設計的對焦點並無法完全反映出人臉所在的位置,於是常常發生脫焦的現象。人臉偵測解決了這項缺失,有些廠商更進一步發展出了微笑快門等等的應用。
2. 自動曝光。除了脫焦的困擾外,另一項困擾DC使用者的還有「臉色太難看」,也就是臉色不是太白就是太黑,這也是因為早期的DC大概只有點測光、中央區域以及全域測光,雖然稍懂攝影觀念的人知道可以用曝光鎖定的方式來得到正確的曝光,但對一般使用者來說太煩複了,另一方面也不是每一台相機都提供曝光鎖定的功能,這時候人臉偵測技術就成瞭解決方案之一。
3. 方便編修。當人臉可以被偵測出來以後,就可以套用很多影像處理在人臉上了,簡單一點的像磨皮、去紅眼(去紅眼不一定要人臉偵測,不過有人臉做參考比較好處理)等,或是套用魚眼效果、少女漫畫效果,進一步還可以直接把臉換掉變成史瑞克。沒有人臉偵測的話,要做這些事就只能把人臉一個一個慢慢框起來…
那人臉偵測跟手機結合在一起有沒有搞頭?當然有!我們先看一段VCR:

手機跟相機最大的差別當然就在手機可以打電話,因此手機比相機多出了通訊錄的功能,結合網路或是手機內建的相機就可以很方便地將聯絡人的照片加入通訊錄中;另外再加上人臉辨識的話還可以讓手機遺失時減少被盜用的危險。

不過前面說了那麼多,除了給外行的看熱鬧以外,對於像正在看這篇文章的Android開發者來說,有哪些門道呢?該不會要porting OpenCV到Android平台上吧?放心, Google早就很貼心地幫各位準備好android.media.FaceDetector這個package了,只要將參數設好,然後將讀到的image (Bitmap格式)丟進去,它就會吐出一堆Face的Array了,而且不但有座標,連角度都有(你不會真的認為每個人都會安份地給你拍照吧),而且是三維的角度都有!有興趣的朋友可以試試這個package,並且試試能不能想出更kuso、更imba的應用(例如加在遊戲當中)!

12.07.2008

Android 3D UI

最近對Android的3D部份有興趣,先請大家看看這段影片:
很炫吧?

Android使用OpenGL ES,在Android平台上可以同時顯示3D與2D跟iPhone相較之下,Android賦予開發者極大的彈性。不喜歡內建的撥號程式? 沒問題,換掉!不喜歡內建的桌面?沒問題,通通換掉!對許多開發者來說,Android平台可以說是別於iPhone的另一種天堂,但是事情就真的這麼美好嗎? Android的3D效能如何? 有什麼樣的極限? 穩定性如何? 3D的耗電量如何?這些都將是我會親自去實作與探討的部份,歡迎有興趣的同好一起來討論喔!