2012年8月17日 星期五

ANDROID 最新版ADT-17:ADT-17.0.0


  • ·   
    ·  Eclipse中開發android應用必備工具。
    Eclipse編譯IDE環境中,需安裝ADT(Android Development Tools)Plug-in,這是AndroidEclipse上的開發工具。
    目前這個是最新版。

  • 2012年8月13日 星期一

    Linux考題

    1.Linux下能夠為網路設備指定ip位址的命令是: B
    A.ipconfig
    B.ifconfig
    C.route
    D.nslookup

    2.
    Linux中,要關閉電腦,應該使用命令:A
    A.shutdown
    B.reboot
    C.kill
    D.ps

    3.
    以下不能生成一個新檔myfile的命令的是:B
    A.touch myfile.txt
    B.mv myfile
    C.cat a.txt >myfile.txt
    D.cp a.txt myfile.txt

    4.
    要刪除檔user/test.txt,可以使用命令:A
    A.rm user/test.txt
    B.mv user/test.txt
    C.umount user/test.txt
    D.del user/test.txt

    5.
    下列目錄哪一個存放開機檔案? D
    A. /var
    B. /root
    C. /sys
    D. /boot

    6.
    Linux中,要確定當前所在的目錄,應該使用命令: C
    A.cd
    B.ls
    C.pwd
    D.ls -a

    7.
    sort命令命令的功能是:      A
    A.對文字檔按行排序輸出
    B.對目前的目錄下所有檔按檔案名排序
    C.在目前的目錄下查找文件
    D.在文字檔中進行檢索

    8.
    執行 mv ./b.txt ./c/d.txt 所完成的操作是:B
    A.將目前的目錄下b.txt文件改名為“/c/d.txt”
    B.將目前的目錄下b.txt文件移動到./c目錄下,並改名為d.txt
    C.將根目錄下b.txt文件移動到./c目錄下,並改名為d.txt
    D.將目前的目錄下b.txt文件移動到./c目錄下

    9.
    以下不是作業系統的是: C
    A.Linux
    B.Unix
    C.X-window
    D.WindowXP

    10.
    要顯示目前的目錄的細節,包括許可權、所有者等資訊,應該使用命令:B
    A. ls -a
    B. ls -l
    C. ls -f
    D. ls -r

    更多.......
    http://class.ruten.com.tw/user/index00.php?s=mikemike168&d=2634460&o=9&m=2

    2012年8月6日 星期一

    針對iPhone開發人員的WP7開發指南(上)(下)

    中文手冊,幫助iPhone開發者快速掌握Windows Phone應用開發技巧。
    免費下載,馬上學習,立即開發!

    上册:  針對iPhone開發人員的WP7開發指南(上).doc

    關於此開發指南



    如果您曾開發過 iPhone 應用程式並對開發 Windows Phone 7 應用程式感興趣,那麼對於您來說,本指南很適合。
    本指南將涵蓋掌握 Windows Phone 7 開發技能並利用已掌握的技能開發 iPhone 應用程式所需瞭解的知識。

    新的開始

    10 11 日,。Microsoft 宣佈在來自全球不同製造商的 10 台設備上發佈 Windows Phone 7Windows Phone 7 軟體商店上已有將近 2000 個應用程式。
    對於 Windows Phone 7Microsoft 重新確定了手機用戶的真正需求,從頭開始構建了一個新的手機平臺。OS、使用者體驗和應用程式開發平臺的工程設計都以用戶為中心。Windows Phone 軟體商店中的收入機會,輔以大量的開發工具,使 WP7 成為了開發人員開發應用程式和遊戲的一個極具吸引力的目標平臺。

    開發人員工具

    在九月初,Microsoft 發佈了一組 Windows Phone 7 工具。這個工具集是免費的,可從此處下載。該工具集包含:
    ·  IDE(供開發人員使用):Visual Studio Express for Windows Phone
    ·  使用者介面設計工具(供設計人員使用):Express Blend for Windows Phone
    ·  框架:Silverlight for Windows Phone XNA Game Studio for Windows Phone
    ·  以及測試和調試應用程式的 Windows Phone 7 模擬器。
    這些工具旨在讓你開發使用者應用程式、業務應用程式或遊戲。




    Windows Phone 7 體系結構

    Windows Phone 7 利用了一個如下所示的分層體系結構。與 iPhone OS 相反,WP7 將在多種手機上運行。為了提供一致的用戶體驗和開發人員可信賴的功能,它定義了所有手機都必須滿足的一個極小的硬體規範集。
    它們包括 ARM7 CPU、支援 DirectX GPU、攝像頭和支持多點觸控的顯示幕。標準感測器包括:A-GPS、加速計、羅盤、接近感測器和光感測器。手機上有 3 個標準的物理按鈕 後退、啟動和搜索。在後續章節中將會看到,這些按鈕為使用者提供了一種輕鬆、自然的導航模型。
    WP7 中,Microsoft 提供了大部分設備驅動程式代碼。設備製造商只需編寫特定於其設備的非常少的代碼。這有望改善各種設備的一致性和品質。WP7 通過封裝層(比如 DirectX XNA)來利用硬體加速。

    2012年8月5日 星期日

    【Android遊戲開發之十】(優化處理)詳細剖析Android Traceview 效率檢視工具


    Android遊戲開發之十】(優化處理)詳細剖析Android Traceview 效率檢視工具
    現在需要使用一些方法對現運營的網遊代碼進行精簡和優化,那麼就要使用到Android sdk中提供的一款很好的檢視工具—Android TraceView、下面先給出對此的解釋:然後講解實現的詳細步驟和需要特別注意的一點!

    什麼是TraceView?先看下百度出來的解釋吧:
    Traceview是android平臺配備一個很好的性能分析的工具。它可以通過圖形化的方式讓我們瞭解我們要跟蹤的程式的性能,並且能具體到method。
    關於Traceview的使用
    首先,必須在程式當中加入代碼,以便生成trace檔,有了這個trace檔才可以將其轉化為圖形。
    要添加的代碼如下:
    Java代碼
    // start tracing to "/sdcard/yourActivityTrace.trace"
    Debug.startMethodTracing("yourActivityTrace");
    // ... // stop tracing Debug.stopMethodTracing();
    // start tracing to "/sdcard/yourActivityTrace.trace" Debug.startMethodTracing("yourActivityTrace");
    // ... // stop tracing Debug.stopMethodTracing();
    Google Dev Guide當中說可以在activity的onCreate()中添加Debug.startMethodTracing(), 而在onDestroy()中添加Debug.stopMethodTracing(),但是在實際的測試時發現這種方式其實並不好用,因為通常情況下我們的activity的onDestroy()是由系統決定何時調用的,因此可能等了很長時間都不會得到這個trace檔。因此決定在onStop()中來調用Debug.stopMethodTracing()。這樣當我們切換到其它activity或者點擊home鍵的時候onStop()就會被調用,我們也就可以得到完整的trace file。
    在運行程式之前,首先要保證我們的AVD是一個帶有SD card的AVD,這樣才能使trace檔保存到/sdcard/...當中。運行後可以任意做一些操作,然後點擊home鍵。這是通過DDMS file explore就可以看到/sdcard/目錄下有一個trace檔,現在把這個檔copy到電腦上指定的目錄,假設是C:/tracefile 目錄下。
    可以通過命令列來執行traceview,進入tools目錄後,執行
    traceview C:/tracefile/yourActivityTrace.trace
    之後就可以看到圖形了,接下來就是按照Google Dev Guide中的解釋去分析圖形就OK了。

    下面來看如何實現以及需要注意的地方:
    實現的步驟分為三步:1.必須先在我們的模擬器中創建sdCard ;2.將我們的調試代碼嵌入工程;3.利用TraceView來觀察和分析代碼情況;
    1.對於創建模擬器的sdCard這裡寫出兩種方式:
    第一種:我們在eclipse中創建avd的時候的時候 在選擇api下面有個 Sd Card 的選項,第一項填入創建sdcard的大小即可。


    第二種:cmd 命令! 打開cmd 並且cd 到android sdk tool 路徑下;(或者在環境變數Path中將sdk tool路徑配置上,然後重新打開cmd)
    使用 mksdcard -l mycard 1024M F:/mysdcard.img 創建了一個1G的sdcard;
    使用 emulator -avd my_android -sdcard F:/mysdcard.img 啟動sdcard!
    最後在eclipse Preferences-->Android-->Launch加入 -sdcard F:/mysdcard.img (此步驟就是在第一種創建方式中添加sdcard的支援)
    備註1:
    如果sdcard分配的空間太小,則程式追蹤檔就一直記錄到sd儲蓄卡容量慢為止,所以調試前,要為程式生成一個適當的SD存儲卡也較為重要,因為程式執行時間越長,這個追蹤文件也就越大。


    備註2;
    (如果第二種創建方式中的第二部啟動出現 emulator: ERROR: the user data image is used by another emulator. aborting,請關閉模擬器,或者進入目錄: /Documents and Settings / 用戶 / .android /的AVD / *設備* / (比如我的目錄是:C:/Documents and Settings/Administrator/.android/avd/android2.0.avd)然後刪去以.lock結尾的資料夾就行(我簡單解釋下為什麼要刪除這些檔呢,其實.lock是加鎖,如果程式崩潰等原因導致無法清除這些以.lock結尾的資料夾,就會出現這個問題,也就是這個avd的鎖沒有被釋放,導致avd manager以為這個avd正在使用當中。))

    2.將我們的調試代碼嵌入工程
    正如我們百度到的說明一樣,在程式運行的開端加上 Debug.startMethodTracing("yourActivityTrace"); 然後在onPause()中調用Debug.stopMethodTracing(); 為什麼要將結束寫在onPause()中而不寫在onStop(),那麼如果你去看api的話,你會看到,Api中介紹onPause()會在你返回和點擊home按鍵後觸發,而onStop()一般是由系統來觸發,當該程式處於後臺的時候,而且當記憶體緊張的時候,可能會調用,但是可能永遠不會調用到!
    備註:要記住當把調試代碼加入專案中以後不要立即運行專案,而是必須在AndroidMainfest.xml中定義一條"寫入SD卡的許可權"那麼添加許可權的代碼如下:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    因為咱們的調試代碼會在SD卡中生成一個追蹤檔,也就是往SD卡中寫入了資料,所以需要聲明一條許可權。這裡必須注意哦!


    1. <?xml version="1.0" encoding="utf-8"?> 
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    3.       package="com.himi" 
    4.       android:versionCode="1" 
    5.       android:versionName="1.0"> 
    6.     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    7.         <activity android:name=".MainActivity" 
    8.                   android:label="@string/app_name"> 
    9.             <intent-filter> 
    10.                 <action android:name="android.intent.action.MAIN" /> 
    11.                 <category android:name="android.intent.category.LAUNCHER" /> 
    12.             </intent-filter> 
    13.         </activity> 
    14.     </application> 
    15.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
    16.     <uses-sdk android:minSdkVersion="4" /> 
    17. </manifest>  

       3.運行項目並且退出項目從而得到的追蹤檔,利用TraceView來進行分析代碼運行狀況:
    打當正常運行了項目並且點擊返回或者home按鍵就會在 sdcard中生成一個.trace的文件。sdcard 目錄 在eclipse下,點擊:
    windows-show view-other-android-File explorer






    右上角的兩個箭頭,第一個表示從模擬器sdcard匯出檔,第二個表示從PC上導入檔到sdcard中、“—”代表刪除 .....
    然後我們通過cmd來運行生成的追蹤檔 traceview C:/name 追蹤檔所在的路徑放在C盤,放在C盤以外別的盤的話我這裡是無法正常打開traceview的不知道什麼原因。 name 表示生成的.trace檔,cmd的時候不需要輸入“.trace”尾碼 ;然後會出現TraceView的分析視窗;
    【cmd 命令! 打開cmd 並且cd 到android sdk tools 路徑下;(或者在環境變數Path中將sdk tool路徑配置上,然後重新打開cmd)】

    注意1:如果出現一下圖片這種記憶體溢出的問題;

    解決方法:到SDK 下的tools 下 找到 traceview.bat 檔,滑鼠右鍵-編輯(或者記事本打開),最後一行替換成這樣:
    call java -Xms128m -Xmx512m -Djava.ext.dirs=%javaextdirs% -jar %jarpath% %*
    注意2:如果出現路徑不對的問題:
    例如:我的 himi.trace 放在了C盤,那麼我的cmd命令是: traceview c:/himi 然後回車!
    但是這裡要小心,因為 /h 這樣可能被認為是轉義字元!!!為了避免可以盡可能不要使用h,n,r,t,等等成為名字的頭字母,當然還有一種就可以完全避免這種問題,例如還是我的C盤 himi.trace 檔,可以寫cmd命令的時候寫成: traceview c://himi 嘿嘿~要注意細節。
    下面是運行起來的TranceView:



    最右上角表示運行程式總共用了多少時間,從traceview畫面中我們看到有各種顏色,每種顏色代表不同的函數和步驟,那麼同一顏色的區域越大,就代表這個步驟執行時間越長,或者看到下面的統計表,明顯可以看出除了序列 0 1 是系統函數外,2. 3.函數 佔用的時間比較長,那麼序列4是個自訂的函數名為 “hot”這個佔用了幾乎與主執行緒 主draw的時間一樣了,那麼肯定有問題。當然其實這個方法是我故意寫的,就是為了來演示traceview。這個hot函數的代碼如下:
    1. /**
    2. * @author Himi
    3. * @param canvas
    4. */
    5. public void hot(Canvas canvas) {
    6. for (int i = 1; i < 100; i++) {
    7. Bitmap bmp = BitmapFactory.decodeResource(getResources(),
    8. R.drawable.icon);
    9. canvas.drawBitmap(bmp, i += 2, i += 2, paint);
    10. }
    11. }
    很明顯我在故意消耗記憶體和時間。
    那麼,在traceview的右半部統計欄位中:
    Exclusive: 同級函數本身運行的時間
    Inclusive 就是說除統計函數本身運行的時間外再加上調用子函數所運行的時間
    Name:列出的是所有的調用項,前面的數位是編號,展開可以看到有的有Parent 和Children子項,就是指被調用和調用。
    Incl: inclusive時間占總時間的白分比
    Excl: 執行占總時間的白分比。
    Calls+Recur Calls/Total: 調用和重複調用的次數

    Time/Call: 總的時間。(ms)


    所以traceview是個非常好的程式監視工具,可以説明找出程式運行緩慢時的函數,讓我們的代碼不斷完善和改進!

    2012年8月4日 星期六

    【Android遊戲開發之九】(細節處理)觸屏事件中的Bug解決方案以及禁止橫屏和豎屏切換!

    我們先講解在觸屏事件處理中我們需要改進的bug!然後再給出如何禁止橫屏和豎屏切換!以及切換的過程在android os 中是怎樣的。
    先看一段代碼:
    1. @Override  
    2.     public boolean onTouchEvent(MotionEvent event) {  
    3.         Log.v("test", "onTouchEvent");  
    4.         bmp_y++;  
    5.         if (event.getAction() == MotionEvent.ACTION_MOVE) {  
    6.             Log.v("Himi", "ACTION_MOVE");  
    7.         } else if (event.getAction() == MotionEvent.ACTION_DOWN) {  
    8.             Log.v("Himi", "ACTION_DOWN");  
    9.         } else if (event.getAction() == MotionEvent.ACTION_UP) {  
    10.             Log.v("Himi", "ACTION_UP");  
    11.         }  
    12.         return true;  
    13.         //return super.onTouchEvent(event);//备注1  
    14.     }  
    15.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
    16.         Log.v("test", "onKeyDown");  
    17.         bmp_x++;  
    18.         return super.onKeyDown(keyCode, event);  
    19.     } 
        代碼很簡單,一個是處理實體按鍵的回應時間,另一個是觸屏的回應事件、那麼這裡要說的有兩點:
    第一點:
    在surfaceview中我們的onKeyDown 雖然是重寫了view的函數,但是仍然需要在初始化的時候去聲明獲取焦點,setFocusable(true); 如果不調用此方法,那麼會造成按鍵無效。原因是因為如果是自己定義一個繼承自View的類,重新實現onKeyDown方法後,只有當該View獲得焦點時才會調用onKeyDown方法,Actvity中的onKeyDown方法是當所有控制項均沒有處理該按鍵事件時,才會調用.

    第二點:
    也是今天主要需要講得的觸屏回應的函數,onTouchEvent()! 重寫此函數的時候預設最後一句是依照基類的返回方式,return super.onTouchEvent(event); 然後我們在其中去判定 MotionEvent.ACTION_MOVE、MotionEvent.ACTION_DOWN、MotionEvent.ACTION_UP 相對應觸屏操作的 拖動、按下、抬起;對此一切都是正確的,但是真正的的運行起項目的時候發現 Log.v("Himi", "ACTION_MOVE"); 這裡log的"ACTION_MOVE",永遠不會執行!!!為此我找到了解決方法,那麼先解釋下為什麼會出現此類情況。
    解釋:
    onTouchEvent(),預設使用Oeverride這個方法,通常情況下去呼叫super.onTouchEvent()並傳回布林值。但是這裡要注意一點,預設如果去呼叫super.onTouchEvent()則很有可能super裡面並沒做任何事,並且回傳false回來,一旦回傳false回來,很可能後面的event (例如:Action_Move、Action_Up) 都會收不到了,所以為了確保保後面event能順利收到,要注意是否要直接呼super.TouchEvent()。

    例如:
    1. @Override  
    2. public boolean onTouchEvent(MotionEvent event) {  
    3. Log.i("ConanLog", "Event"+event.getAction());  
    4. return super.onTouchEvent(event);  
       這個例子是當你Touch Down的時候會送event進來,接著印出Log,然後呼叫super的onTouchEvent()並回傳佈林值。此時會回傳false,並且之後再也收不到Touch Move或Touch Up的event,為了要確保能收到event,必須要回傳true,所以在這裡要注意一下。
    這個問題也是當時用到此函數的時候發現的,找了很多資料才找到其解釋、所以以後使用onTouchEvent()函數的時候最後的
    return super.onTouchEvent(event);
    一定要改
    return true;

    最後還要注意一點:在初始化的時候不要忘記setFocusableInTouchMode(true);觸屏模式獲取焦點,比較類似 setFocusable(true);
    ——setFocusable(true);//此方法是用來回應按鍵!如果是自己定義一個繼承自View的類,重新實現onKeyDown方法後,只有當該View獲得焦點時才會調用onKeyDown方法,Actvity中的onKeyDown方法是當所有控制項均沒有處理該按鍵事件時,才會調用.

    這裡講下如何禁止橫屏和豎屏切換!
    在某些遊戲中我們可能需要禁止橫屏和豎屏切換,其實實現這個要求很簡單,只要在AndroidManifest.xml 裡面加入這一行 android :screenOrientation="landscape "(landscape 是橫向,portrait 是縱向)。
    在android中每次螢幕的切換動會重啟Activity,所以應該在Activity銷毀前保存當前活動的狀態,在Activity再次Create的時候載入配置。在activity加上android:configChanges="keyboardHidden|orientation"屬性,就不會重啟activity.而是去調用onConfigurationChanged(Configuration newConfig). 這樣就可以在這個方法裡調整顯示方式.
     MainActivity中:
    1. public void onConfigurationChanged(Configuration newConfig) {  
    2.         try {  
    3.             super.onConfigurationChanged(newConfig);  
    4.             if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {  
    5.                 Log.v("Himi", "onConfigurationChanged_ORIENTATION_LANDSCAPE");  
    6.             } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {  
    7.                 Log.v("Himi", "onConfigurationChanged_ORIENTATION_PORTRAIT");  
    8.             }  
    9.         } catch (Exception ex) {  
    10.         }  
    11.     } 
    AndroidManifest.xml中:
    1. <?xml version="1.0" encoding="utf-8"?> 
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    3.     package="com.himi" android:versionCode="1" android:versionName="1.0"> 
    4.     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    5.         <activity android:name=".MainActivity" android:label="@string/app_name" 
    6.             android:screenOrientation="landscape" android:configChanges="keyboardHidden|orientation"> 
    7.             <intent-filter> 
    8.                 <action android:name="android.intent.action.MAIN" /> 
    9.                 <category android:name="android.intent.category.LAUNCHER" /> 
    10.             </intent-filter> 
    11.         </activity> 
    12.     </application> 
    13.     <uses-sdk android:minSdkVersion="4" /> 
    14. </manifest>  

    Windows Phone SDK 7.1.1 更新


    微軟發佈了Windows Phone SDK 7.1.1 更新,主要為兩個目的:
    1 開發和調試256M小記憶體上的手機應用
    2 支持Windows 8上的開發(解決了SDK7.1版在Win8相容性上的問題)
    這個更新的SDK主要變化有:
    1 讓Visual Studio IDE可以選擇不同的手機模擬器
    2 添加的新的模擬器,方便256M記憶體下的開發
    3 更新了512M模擬器的版本到8773
    4 更新了Microsoft Advertising SDK,修正之前發現的操作時會出錯的問題
    5 更輕鬆地開發和優化需在 256 MB 設備上運行的應用程式和遊戲
    6 優化多語言支援
    更新的安裝很簡單,只需三部(同意協議,安裝,完成)。由於同時512M和256M兩個手機模擬器,安裝包有些大,好在沒超過300M。
    安裝中會初始化兩個模擬器鏡像,所以會耗費些時間。在兩個虛擬機器分別初始化的時候,每個Windows Phone虛擬裝置都會啟動並且暫停在等待APP安裝的狀態。在開發調試時,就無需再等待模擬器啟動。
    安裝完以後就能選擇不同的模擬器了。但是不支持兩個模擬器同時運行。
    根據測試:
    SDK更新和VS2011試用版在同一台機器上可以並行安裝,分別工作。安裝時對系統記憶體也有要求,3G或更大為最好狀態。另外需要注意程式語言版本,英文7.1 SDK必須安裝英文7.1.1更新包,否則安裝出錯。
    新版SDK更新包添加了對Windows 8下開發的支持,解決了三個問題:XNA GAME Studio相容、模擬器相容以及需要.NET Framework 3.5支持的問題。最主要的問題是在Windows 8下不能正常啟動模擬器,不過此次更新完全解決了這個問題。
    兩個已知問題的提示:
    1 7.1.1的更新包可以用在Windows 8上。因為Windows系統還沒發佈RTM版本,目前這種支援並非完美無缺。
    2 模擬器在開啟Hyper-v的時候效率可能會下降。

    關於256M記憶體的設備的應用開發可以參考下列文章:
    常見問題:
    • 我是否需要升級我的CTP或者重新安裝?
    答案:不需要重新安裝,只要升級即可。
    • 我怎麼知道我是否已經安裝過了?我是否還用重裝/修復升級?
    答案:這是一個升級包而非完整的安裝包,你可以在控制台的安裝程式中查看是否有需要升級的提示。
    • 為什麼這玩意叫7.1.1?
    答案:這只是一次重要的更新,而不是一次包含大量新特性的版本升級。另外命名的時候有兩個選擇:WPSDK 7.1.1 Update和WPSDK 7.1 March 2012 Update,我們最終選擇了前者,以便清晰的與7.1清晰的區分開。
    總而言之,這是一次非常必要的升級,有任何問題請到這裡討論:http://forums.create.msdn.com/forums/99.aspx