有了android sdk, 為何又來 android NDK(native development kid)呢 ? 許多人會搞混, 不清楚其中含意. 這裡就說說吧 !!!!!!
android SDK 是寫android APP的發展系統, sdk是以java語言為主, 被google封裝成apk的形式.
當程式設計師寫好app後, 執行的時候, 是被Dalvik虛擬機器執行, 而不是直接以機器碼的形式執行. 由dalvik虛擬機器執行最大的好處是, 底層硬體平台被dalvik隔離, app可以在任何android 裝置上執行, 而不用考慮其硬體cpu為何. dalvik 接收app碼, 再將其轉換為底層cpu可執行的模式執行.
簡單的說, 經由dalvik虛擬機器處理的app, 其執行速度, 相較於以c 寫得程式, 會慢許多, 這在作video或audio運算時, 差異更大. 所以以java為程式語言的app, 與以c 為程式語言的驅動程式或其他app在android 系統內室一種trade-off, 都是必要元件. 所以google就提出來NDK, 讓程式設計師
可以在java內呼叫c, 來加快程式執行的速度. 當然這樣一來, 過去用c寫得程式, 也可以繼續使用.
這樣一來, 主程式架構可以用java來寫, 對於速度敏感的部份如驅動程式, 3d繪圖等等, 則用c來寫.
整個 android系統都是這樣運作的. 對內, android內部則用JNI(java native interface)表示java call c 的結構. android 上層用java, 底層用c , 中間用JNI串接. 對外, google提出ND發展系統, 以串接java與 c. 道理原理都一樣
android 與功率消耗
android初看很複雜, 如果依循一定的脈絡, 還是可以縮短學習的時間. 這要要說說android設計考量的重點在哪 ? 只有 4 個字 " 功率消耗". 奇怪, android不是操作系統嗎, 是軟體, 怎又說到硬體的
功率消耗呢 ? 事實是android整個系統之設計, 都是圍繞者如何減少功率消耗的議題打轉.
什麼事功率消耗呢 ? 就是硬體元件運作時, 必須接上電壓, 電流. 隨者時間流轉會產生電流(mA)功率(W=VI)損耗. 而在mobile裝置上, 電流之供給由鋰電池供應, 鋰電池的電流供應是有限制的.
(一般智慧型手機鋰電池容量3000mA~7000mA附近).
為了將鋰電池的容量作最佳的調適, 所以需盡量減少硬體元件運行的時間, 頻率與方式. android應運而生的解決方式為
1. android初始設定為省電模式, suspend一定秒數, 即進入省電模式(suspend), 將各process, lcd, 硬件依序"關掉"
2. 各硬體模組與其驅動程式加上"suspend" 與"wakeup" 休眠與睡醒等模式, 以充分達成省電效果
3. 主要耗功元件, cpu, dram, LCD一定要有suspend/standby省電模式
3. openGL 3d/2d繪圖也盡量精簡, 以節省功耗
4. 精簡Java VM 虛擬機器, 以節省功耗
.
功率消耗呢 ? 事實是android整個系統之設計, 都是圍繞者如何減少功率消耗的議題打轉.
什麼事功率消耗呢 ? 就是硬體元件運作時, 必須接上電壓, 電流. 隨者時間流轉會產生電流(mA)功率(W=VI)損耗. 而在mobile裝置上, 電流之供給由鋰電池供應, 鋰電池的電流供應是有限制的.
(一般智慧型手機鋰電池容量3000mA~7000mA附近).
為了將鋰電池的容量作最佳的調適, 所以需盡量減少硬體元件運行的時間, 頻率與方式. android應運而生的解決方式為
1. android初始設定為省電模式, suspend一定秒數, 即進入省電模式(suspend), 將各process, lcd, 硬件依序"關掉"
2. 各硬體模組與其驅動程式加上"suspend" 與"wakeup" 休眠與睡醒等模式, 以充分達成省電效果
3. 主要耗功元件, cpu, dram, LCD一定要有suspend/standby省電模式
3. openGL 3d/2d繪圖也盡量精簡, 以節省功耗
4. 精簡Java VM 虛擬機器, 以節省功耗
.
訂閱:
意見 (Atom)