Wednesday, October 29, 2014

討論區


討論區

模組產商洗排的新機會Google Ara Modular

Google 在2014/10/29 發佈了一個傳說中的專案- Ara Modular ,讓用戶可以依照自己的喜好來決定手機的上面硬體,也就是以後買手機就像是自助餐一樣,可以自行挑配菜了。


Screen Shot 2014-10-30 at 9.06.10 AM


詳細的資料,需要等到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 底層修改最友善、資料公布程度最好的版子,並且實際產品可以


Screen Shot 2014-10-29 at 11.15.14 AM

官方網站:

PDF 這裡



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的速度或者與系統底層溝通的因素,會遇到很多問題。


 





























1 Android SDK Android NDK 的比較


 


如果要邁向頂尖的Android 開發者,很多時候是需要使用C語言來開發,尤其是Android系統底層的功能,真的很難用JAVA 寫的出來,所以要對整個Android系統深度了解,還是需要C 語言。



什麼是Android NDK
比較項目Android SDKAndroid NDK
程式語言JAVAC
執行速度
與底層Linux 溝通 如 lsmkdir Linux 指令沒有相對的API
直接呼叫linux driver沒有直接的API,需要透過HAL 的寫法,較為複雜
Users Interfae 使用者操作介面需要依賴SDK
GPS, 撥號, 地圖需要依賴SDK
跨平台開發只有在Android 平台上可以跨平台AndroidiOS
Windows Phone
開發環境Eclipse 開發環境無,需透過指令 Terminal

Wednesday, October 1, 2014



src="javascript:void(0)"

scrolling="no"

frameborder="0"

width="900"

height="700">