Tuesday, September 27, 2011

Android開發者應有的認知

Android開發之氣死人之路I開發氣死人之路II後,
在這裡跟許多後輩提及一個很重要的觀念。

許多開發者都喜歡拿Android跟iPhone比。
的確,在iPhone上開發APP,
因為手機規格就那麼一隻,
所以在程式開發上,
會遇到的問題不會如Android多。
甚至在畫面的佈局上,
即使用訂死(如︰絕對座標,譬如規定要將按鈕放在x=20,y=30)的方式,
使用滑鼠拖曳,輕鬆就能搞定版面佈局這件事。

但這件事在Android上可就大不相同了。
Android是多種規格、多種解析度、多種cpu運算、
多種記憶體結合起來的產物。
這都歸功於Android平臺的開放性。

Android光是在解析度上,
就分成手機型的
854*480/800*480/480*320/320*240
而平板就更不用説了
又是另一套規格。
詳細規格可以參照官方sdk的規格表
(但有許多規格還沒有列進來)

像最近開發的一個遊戲︰
挑戰劉子千

在這款遊戲裡,
女主角的眼睛會眨、按了上方的水晶燈蠟蠋會變亮、桌子要在螢幕的正下方。
再回到我剛才提到Android多解析度的問題。
這時候你看一下原本的遊戲畫面,會變成什麼樣子
看出來了嗎?
原本規劃好的位置,
因為各家解析度不同,
通通亂掉了。
也就是説,
遊戲廠商如果要替每一隻不同規格的Android手機做出可以玩的畫面,
那麼他們要替這款遊戲調校非常多的遊戲畫面版本。

剛才我們提到的是解析度的問題,
再來,我們來提硬體問題。
這款挑戰劉子千有一個「比對玩家音準」的功能,
當中使用了Android的錄音功能。
而聲音取漾率和CPU運算效能有關。
也就是説,
如果是機王Samsung SII,
10秒鐘能取漾到30筆玩家的音頻,
那麼在cpu運算效能較慢的機種裡,
可能10秒只能取到15筆音頻。

這樣的硬體差距,
也讓我在攢寫判斷玩家音準這個功能上,
遇到了許多的頻頸。
因為越多取漾率,
在判斷玩家音準這件事,
就會越準。

以上這款遊戲是我自己的案子,
所以能在這邊跟大家解釋Android發生了什麼事。
如果還要提我在公司上班裡開發的案子,
那硬體問題的例子將會不枚盛舉。

有些iPhone開發者當初就體認了這一點詬病,
所以打死不碰Android開發。
但是對Android開發者而言,
為了要能夠開發出多款手機都能正常運行的程式碼,
我學到了要對記憶體的使用更注意,
也學到了如何讓程式開發起來更有「彈性」。
我想這些經驗,
應該是直接去碰iPhone的開發者,
不會遇到的事情。

結論︰

1.如果你現在的身份是使用者,
請珍惜這些開發Android的人,
如果有廣告也請多多幫忙點擊,
因為Android使用者願意付費的比例比iPhone使用者低很多,
有你們的點擊,
我們開發者真的才有進步的動力,
也才會有經費開發出新版本讓你們繼續使用。

2.如果你現在的身份是開發者,
那我想告訴你,
雖然Android初期的開發門檻很低,
但到後來你為了要能讓所有硬體可以順利跑你的程式,
你還是會花上一些錢買不同的手機。
(當然也可以借用社會力量)
而且你會遇到比我文章裡提到的還要更多的問題。

,準備好當一名倍受挑戰的Android開發人員了嗎?



Monday, September 26, 2011

換個版面,換個心情(更換Eclipse版面)

你是底下這種人嗎?

1.Android開發的那麼久,
許許多多的問題也一天一天的累積了起來。
覺得很「阿雜(臺語)」?

2.長時間工作白底黑字的Eclipse環境讓你的眼睛吃不消?

這時候,
換個版面,
也許更能增加你的工作情趣哦!

Eclipse Color Themes裡,
提供了許多種的版面主題,
只要你喜歡,
通通可以下載來使用。

首先,
點選你要的主題


然後,
將EPF檔下載下來︰


最後,
在Eclipse中匯入該檔
[File]-->[Import]-->[Gerneral]-->[Preferences]




這時候畫面主題就會是你匯入的樣子了。

嗯,
感覺又換了另一種開發心情。
(自我安慰中⋯)

附上一個我習慣用的主題Sunburst - by Viorel Craescu - Website


Wednesday, September 21, 2011

如何安裝Tomcat至Amazon EC2

上一篇教了如何安裝Java JDK6至Amazon EC2後,
這篇繼續説明如何安裝Tomcat至EC2裡。

一、下載Tomcat
1.先到Tomcat官網找最新的版本,目前是7.0版
2.找出目前的下載連結網址並複製至剪貼簿

3.在Terminal打上$wget + 滑鼠右鍵貼上剛剛找到的最新網址
所以這行指令可能就變成︰
wget http://ftp.asia.edu.tw/ftp/Apache/tomcat/tomcat-7/v7.0.21/bin/apache-tomcat-7.0.21.tar.gz


按下Enter,等著下載吧!


這是下載完成後的畫面




二、安裝Tomcat
下載完後,
你可以選擇要安裝的位置,
假設我要將這個tomcat安裝檔移至
/usr/local/tomcat/目錄下,
那麼我就下這行指令︰
$mkdir /usr/local/tomcat/
這樣子就建立了tomcat目錄了

然後,下搬移指令
$mv apache-tomcat-7.0.21.tar.gz /usr/local/tomcat/
將檔案移去那裡,


最後,我們在這個位置安裝tomcat
ubuntu@ip-10-172-155-204:/usr/local/tomcat$ tar xvzf apache-tomcat-7.0.21.tar.gz

這時候就會開始安裝Tomcat了。


記得要將EC2的secutiry group多設一個8080埠出來(目的是將8080排除於防火牆外),
到時候才能連到Tomcat哦!


三、啟動Tomcat

ubuntu@ip-10-172-155-204:/usr/local/tomcat/apache-tomcat-7.0.21/bin$
底下,
打上
./startup.sh
這時候Tomcat就啟動了!



ip位址會顯示在這裡︰


只要在瀏覽器上,
打上http://50.18.0.217:8080
Tomcat連上囉!

透過Terminal安裝JDK6至Amazon EC2

上一篇説明了如何透過Terminal連線至Amazon website(AWS)後,
接下來便要説明如何開始安裝JDK了。

指令相當簡單︰
$sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$sudo apt-get update
$apt-get install sun-java6-jdk
 
然後,就可以下
$java -version
看看安裝是否成功了。
 
如上圖,這樣子就代表成功了。
 
下一篇︰如何安裝Tomcat至Amazon EC2

用Terminal連線到亞馬遜伺服器EC2

以目前的Android應用軟體來説,
已經越來越多的服務使用到後端伺服器來提供更良好的應用程式服務,
但是,小本經營的我們,
一方面又要節省成本,
這時候你會怎麼做呢?
亞馬遜website(AWS)是最近很火紅的網路伺服器,
很多企業為了省成本,
都會在將伺服器掛在上面,
加上AWS很高的資料移動性,
AWS簡直就是中小企業的最佳選擇。

這篇文章即將教你︰
如何連線到Amazon的伺服器,
如果你想要對AWS有一些基本的認識,
可以先參考阿正老師教你免費玩Amazon EC2雲端主機(下篇):主機實戰篇


文章開始︰

今天研究了一下要怎麼使用AWS,
我建立了一個Instances,系統選用Ubuntu 10.4。
然後,


這時候會出現一個新的視窗︰


只要在終端機terminal輸入這一行,
就能連到亞馬遜雲端了。

註︰可能輸入過程中,
會發生pem這個ssh私鑰還處於公開的訊息。
請照著這個視窗的第3點教學,
將私鑰權限改成private。

連線成功後,會出現這個畫面︰
恭喜你,連線成功啦!

下一篇︰如何安裝JDK6至EC2

Monday, September 19, 2011

Admob的另一個選擇︰Vpon

相信很多開發者都知道Admob是做什麼的,
這幾天我一直在研究另一家廣告公司︰Vpon


Vpon如同Admob,
只不過他們的獲利方式,
不只Admob的點擊賺回饋金。
就算是顯示出廣告,
都還是有一定的分潤機制,
只是比點擊的分潤還低。

Vpon目前做地域性的廣告市場,
也就是説,如果你的客戶在台灣或大陸,
那麼Vpon可能是一個不錯的選擇,
如果你的市場在外國,
那你⋯還是乖乖用Admob吧⋯

Vpon除了做自家的廣告(Vpon_TW、Vpon_CN)外,
他們還引用了Google的Adwhirl工具,
此工具能將各家的廣告,
通通串連起來。
以後不管要播放Vpon、Admob、iAd⋯
等等之類的廣告,
你只要透過Adwhirl後端,
便可以對這些廣告做投放率的控管。

註︰
這個Adwhirl是Vpon的Adwhirl
而不是Google原本的Adwhirl,
如果你是註冊Google的Adwhirl,
你就會跟我一樣卡在這裡一天,
收到廣告回傳的Log的Jason是空的狀況。

以下是Vpon提供Adwhirl對各大廣告商的關係圖

在這裡我直接以eclipse來説明如何將這些東西做串接。
1.你必須將各家的廣告jar檔放入你的eclipse中。
這樣看下來,如果你要用Admob、Vpon_TW、Vpon_CN、Adsense,
你至少要引入三家廣告商的jar檔
(Adsense因為可以直接在Admob後臺做設定,
所以不用再引入Adsense相關的jar檔了)

2.在你專案的src目錄裡,要加入相對應的Adapter去迎接第3方的廣告。
這些第3方廣告的Adapter在Vpon with Adwhirl sdk檔案裡都能找的到,
他們都已經寫好了︰
Vpon_tw和Vpon_cn的Adapter,他們寫在jar裡了,
但Admob的廣告,要另外將Adapter丟出來做串接(如下圖),
否則從Admob傳來的廣告,Vpon_Adwhirl會不知道如何回應。
註︰這個地方因為不知道要再銜接一個Adapter出來接Admob,
Log因而回傳Invalid Adapter, 
又讓我卡一天。

3.在Androidmenifest.xml裡,你要宣告︰

 
 
 
 
然後再宣告2個Activity進來︰

 

 
註︰AdActivity因為沒有宣告在AndroidMenifest.xml裡,
在這邊我卡了2天。

4.在你的畫面裡留出一個位置準備放廣告,
根據Vpon官方的説法,
這個廣告只適用在320x240(註2)/480x320/800x480/854x480
Android2.2以上版本

註︰
2011-09-19
1.官方説明Vpon能用在Android1.6、2.1、2.2,
但當我在用Proguard編譯時,
卻告訴我需要一個Android2.2的元件才能export成功。
Warning: com.vpon.adon.android.WebInAppWebChromeClient: can't find referenced class android.webkit.ConsoleMessage
這裡我又卡上半天。
也同時告訴我們編譯環境最好設在Android2.2以上。

2011-09-22
如上,雖然要2.2的環境才能export出apk檔,
但如果AndroidMenifest.xml裡的min SDK version設成7(2.1),
然後export,
Vpon廣告仍然是可以顯示出來的。

2.經測試320x240也能顯示Vpon廣告 

5.程式碼中加上︰
/**
  * 添加Vpon with Adwhirl廣告
  */
 private void callAdvertisement() {
  FrameLayout prepareAdvertisement_layout = (FrameLayout)findViewById(R.id.adLayout);//adLayout是你事先預留的廣告位置
  
  AdWhirlLayout adWhirlLayout = new AdWhirlLayout(this, "你跟Adwhirl要到的sdk key");
  
  AdWhirlManager.setConfigExpireTimeout(1000 * 60); 
  AdWhirlTargeting.setAge(23);
         AdWhirlTargeting.setGender(AdWhirlTargeting.Gender.MALE);
         AdWhirlTargeting.setKeywords("online games gaming");
         AdWhirlTargeting.setPostalCode("94123");
         AdWhirlTargeting.setTestMode(false); 
         
     adWhirlLayout.setAdWhirlInterface(new AdWhirlInterface(){

   @Override
   public void adWhirlGeneric() {
    Log.e(AdWhirlUtil.ADWHIRL, "In adWhirlGeneric()");
   } 
     });
      
     prepareAdvertisement_layout.addView(adWhirlLayout);   
    
 }

6.各家的廣告License key,像是Admob、Vpon_TW、Vpon_CN⋯
通通在Vpon的Adwhirl後臺裡去輸入和統一管理

Vpon分出了TW和CN兩個平臺,
如果你同一隻應用程式要做地域性的廣告
(涵蓋臺灣和大陸市場),
那麼在兩個平臺內,
你必須各申請1組Vpon key,
登錄在Vpon Adwhirl後臺裡。
(見上圖)

剩下的廣告如何顯示這件事,通通交給Vpon_Adwhirl吧!

相關文章︰使用Proguard和Vpon時廣告出不來