Wednesday, October 29, 2014
模組產商洗排的新機會Google Ara Modular
Google 在2014/10/29 發佈了一個傳說中的專案- Ara Modular ,讓用戶可以依照自己的喜好來決定手機的上面硬體,也就是以後買手機就像是自助餐一樣,可以自行挑配菜了。
詳細的資料,需要等到2015年1月的時候Googlw Ara Developer 大會時,會發佈詳細的資料。 參考資料在此
看來這一波機會,會讓很多模組廠商也能依照Ara 的規範,成為Android 的一員。
模組產商洗排的新機會Google Ara Modular
Tuesday, October 28, 2014
Beaglebone Black是Beagleboard系列最新的成員。這片精巧的開放源碼開發板搭載了1GHz時脈的德州儀器 Sitara AM3358 ARM Cortex-A8 processor、512M DDR3記憶體,並內建4G Flash,預載為Beaglebone Black量身打造的Linux Angstrom,
可以在Beaglebone Black上運行熱門的Android、Ubuntu或其他相容的Linux環境。
並且是目前對學習Android移植、Android 底層修改最友善、資料公布程度最好的版子,並且實際產品可以
官方網站:
PDF 這裡
Sunday, October 26, 2014
Thursday, October 16, 2014
Sunday, October 12, 2014
Android NDK的處理方法經驗談
隨著Android NDK 提供許多的新設備和新功能,並且針對了 ARM的設備提供了效能上的改進,在此列出開發的經驗談,希望對您有所幫助。
不要急的轉換為C語言
除非您計劃移植現有的C++應用程序或計畫開發全新的跨平台的APP,否則不要倉促在初期,急的把專案寫成C語言,建議是先在JAVA 把專案完成,並把效能較慢的函數,獨立出來一個測試的APP,再把該功能用C語言來處理,記得!請用數據來代替猜測,請用把執行的時間,用Log 記錄下來,調整再調整,改善執行的效率。
關注目標
一般的設備都是使用ARMv7,這意思是可以使用ARM 的 v7版本和功能。再最新版的NDK 10b增加了ARMv7和NEON程式範例支持,可以實現關鍵程式和多媒體的功能都有對應的組合語言指定集 。並且 NDK也提供跨不同CPU 的處理方法,可以在編輯程式或執行時,可以識別執行的CPU。
調整問題點
請用工具或時間函數來分析程式,一個一個函數處理和優化程式,不要一口氣大改,或者重新開發,只要把有問題的JAVA 程式翻寫為C 語言,就可以讓用戶在沒有感覺的情況下,加強執行效率。
使用Java的異常處理
開發時難免都會有bug, 在開發NDK時,請多多使用Java 的try… catch ,即時在裡面呼叫C語言時,萬一有問題時,頂多退回到Java 層做例外處理,也不會導致APP 被強制退出。
優化架構
事實上Eclipse 的JAVA 除錯環境真的太好了,而NDK 的C語言環境在除錯和測試上,目前還沒有好的工具。所以架構、UI使用者介面等大方向的部分,還請在Java層面優化和處理。
記憶體分配要小心
Java的記憶體盡用Java來分配,而C語言的盡用C來分配,減少互相分享記憶體、和記憶體指向的分配,以免有leak 記憶體洩漏或指針的位置錯誤的情況發生。
謹慎採用多線程
在開發初期,請謹慎採用多線程,以免因為造成除錯和開發的困難度,當然在開發測試的後期,將程式改成多線程,可以在多核心的CPU上會有更棒的執行效果。但切記,多線程會加重系統負載,Android系統自身會創建幾條線程去運行一個應用程序,如果都在等待事件的觸發事件的執行線程,會削弱它們的運行能力,適得其反地降低整體用戶體驗。
Java層的線程
如果將邏輯分為多個線程,應盡可能通過Java執行,而不要採用Pthreads。使用Java VM管理訪問可以降低風險,且有更多的語言層工具。如果您擔心設置成本,採用現有的小型工人池應該不會太困難。切記將長期任務的更新發回到主UI線程,以確保用戶使用反應和用戶體驗。
懂得何時使用彙編程序
C或C++可以立即帶來速度提升,但是卻比Java要難以維護,可以通過將程式中的關鍵部分轉換為翻寫彙程式來實現進一步提升,但卻需要耗費時間、精力與最終受益之間做出決定,最好先發布現在的Java 版本,然後以後發布升級版,而不是永無休止的修改,這樣陷入程式正式發佈版的問題。
懂得如何使用NEON
NEON是一個非常強大的工具,在理想環境中,可給程式8倍的性能提升,但只適合給ARMv7 。
不排次使用ARM 組合語言
ARM 組合語言的指令集眾多,上手不容易,但是如果是APP中會有大量的數學計算,如遊戲模型的顯示、影像處理或多媒體等,這類會在一個迴圈中一直計算的程式的話,就很建議把其中的運算公式,寫成ARM 組合語言,效能會出乎想像中的好。
Android NDK的處理方法經驗談
什麼是Android NDK
什麼是Android NDK:
Android NDK (Native Development Kit)簡化工作與機器底層的程式碼。並且可以與CPU(ARM)和繪圖晶片做溝通。它的目的是幫助您創建的Lib,你可以把它想成是Android C 的函式庫Lib。
大多數的開發者都是使用Android SDK來設計應用程式,它是一個以JAVA 為基礎的程式語言,但是在開發大型專案和較複雜的應用程式時,會因為JAVA的速度或者與系統底層溝通的因素,會遇到很多問題。
比較項目 | Android SDK | Android NDK |
程式語言 | JAVA | C |
執行速度 | 慢 | 快 |
與底層Linux 溝通 如 ls, mkdir 等Linux 指令 | 沒有相對的API | 可 |
直接呼叫linux driver | 沒有直接的API,需要透過HAL 的寫法,較為複雜 | 可 |
Users Interfae 使用者操作介面 | 有 | 需要依賴SDK |
GPS, 撥號, 地圖 | 有 | 需要依賴SDK |
跨平台開發 | 只有在Android 平台上 | 可以跨平台Android, iOS, Windows Phone等 |
開發環境 | Eclipse 開發環境 | 無,需透過指令 Terminal |