原创 Effective Java讀書筆記(五)

用enum代替int常量 // Enum type with data and behavior public enum Planet { MERCURY (3.302e+23, 2.439e6), VENUS

原创 定製Android系統開發之二——系統服務

何爲系統服務 做Android APP開發的過程中,會經常需要調用類似於下面這樣的函數: WifiManager mWifiManager = (WifiManager)getSystemService(Context.WIFI_

原创 recovery代碼分析(五)

block_image_update 前文提到過,在ota升級中,recovery會新啓一個進程來執行update-binary來做實際的升級。而update-binary會執行update-script腳本。update-scr

原创 Android JNI使用總結(一)

Android JNI使用總結 最近在做的一個項目需要在i.MX6上和MCU通過uart進行通訊。通訊算是一個JNI的典型應用了,在實現的過程中,遇到了不少問題,這裏總結一下。 基本數據類型 對於java中的基本數據類型,在jni

原创 recovery代碼分析(四)

上一篇文章提到了,升級的實際動作是執行了升級包裏的update-script。而這個update-script是由ota_from_target_files這個腳本生成的。ota_from_target_files這個腳本里面的W

原创 定製Android系統開發之五——ServiceFetcher

總覺得在上篇博文裏面對在ContextImpl裏面註冊系統服務的過程講的很亂,這裏再寫一點,說明一下注冊的過程。 註冊的核心是一個類:ServiceFetcher。ServiceFetcher的定義如下: static clas

原创 recovery代碼分析(六)

前面分析了move命令的實現,這裏在簡單的分析一下diff命令: static int PerformCommandDiff(CommandParameters &params) { // <offset> <length

原创 Android JNI使用總結(二)

上一篇裏面主要是JNI中一些函數的介紹,這篇博客就舉個例子來說明這些函數的使用方法。 項目介紹 這個例子來源於我實際的項目。這段代碼的作用是: 通過Uart發送消息; 接受Uart傳送過來的消息; 因爲這裏的主要目的不是說明如

原创 定製Android系統開發之三——跟着我實現系統服務

在這篇博文中,我將一步一步建立一個SystemService。 這個系統服務是用於控制收音機的,名字就叫做RadioManagerService。 新建IRadioManager.aidl; 在framework/base/cor

原创 修改Recovery中的文字提示(二)

上一篇博文提到,如果把轉換格式後的圖片替換掉原來的圖片,你會發現,顯示的竟然是繁體中文。這到底是發生了什麼? 分析 在res_create_localized_alpha_surface()函數中,匹配到本地化信息之後,會打印日誌

原创 recovery代碼分析(三)

前文分析了recovery的主要流程,在recovery的實際安裝階段,會創建一個新的進程,執行ota包裏面的update-binary。recovery進程和update-binary進程通過管道進行通信。 update-bin

原创 recovery代碼分析(二)

really_install_package()函數 really_install_package()函數位於install.cpp。 static int really_install_package(const std::st

原创 recovery代碼分析(一)

以下分析代碼基於mtk 8167a的sdk,android版本是8.0.1。代碼的分析直接看以Timothy開頭的註釋。 main()函數 main()函數的位置是recovery.cpp。 int main(int argc,