採用Android系統做iMX6Q產品時的定製化功能實現

image.png

Android系統在當今已經是無人不知無人不曉,其界面美觀、組件豐富、擴展性強、交互體驗好給我們帶來很多便利,這也讓Android系統的應用從我們熟知的手機、平板、電視盒子等消費產品延伸到了專用產品市場,如醫療設備、美容儀器、考勤機、自助售貨機、點餐收銀系統,甚至工業HMI也可以見到Android的身影。

我們在產品開發時往往要對Android系統做產品化的定製,例如把開機logo換成自己公司的,讓產品的APP開機後能自動啓動,隱藏安卓系統的虛擬按鈕等。今天,我們基於iMX6Q 四核 FETMX6Q-C核心板的Android4.4系統爲例,完成對系統的定製化改造。


一、開機logo的修改

Android系統的logo分三個階段,uboot階段、kernel階段、文件系統階段。uboot和kernel階段的logo爲靜態圖,文件系統階段的可以做動態圖。

FETMX6Q-C 可以設置爲uboot logo一直顯示到kernel,避免中間切換時有間隙,設置的方法可參考飛凌的《OKMX6Q-C Android手冊-3.1.4 設置logo從uboot連續顯示到內核》,那麼我們只需要修改uboot階段的即可完成前兩個階段的logo修改。

1、logo文件的製作

1.1、製作靜態logo,例如用PS設計好開機logo圖片後,將其圖片參數按如下要求保存:

■  文件格式:.bmp

■  分辨率:根據所用顯示屏分辨率設計,例如480*800

■  位深度:8

1.2、製作文件系統階段的動態logo,將一張動態圖的每一幀保存成一張圖片,圖片格式說明:

■  格式:.png

■  分辨:根據所用顯示屏分辨率設計,例如480*800

■  位深:8

a、新建文件夾目錄bootanimation\part0,並將製作好的圖片放在此目錄下,按照順序命名,如:01.png、02.png……15.png。如果有兩組動態圖,可以新建一個part1文件夾,把第二組動態圖放在這個文件夾裏。

b、新建一個txt文件,放在bootanimation文件夾下,命名爲desc.txt

image.png

■ 1280 800 15 --第一位圖片寬,第二位是圖片高,第三位是幀率也就是一秒播放多少幀(多少張圖片)。

■ p 1 0 part0----第二位表示part0部分也就是包含圖片的文件夾播放次數,第三位表示這部分播完後下部分開始的間隔,默認爲0,第四位表示文件夾名稱

■ p 0 0 part1----同上但是第二位的0表示循環播放。

最好一行要換行,保存。 

c、打包文件成 zip 格式,壓縮方式爲 存儲 

首先要在bootanimation文件夾中選中“part0” “part1”文件夾和“desc.txt”文件進行壓縮,而不是選中bootanimation文件夾壓縮。

image.png

image.png

2、logo的替換

2.1、uboot logo的替換不需要修改源碼,燒寫系統時和系統鏡像放在同一個目錄下燒寫進去即可。

如下圖:

image.png


2.2、文件系統階段的動態logo替換:

將剛纔製作好的bootanimation.zip放到Android系統源碼的/system/media/路徑下,編譯系統後可以完成對開機動畫的修改。

二、APP自啓動

方法一:簡單講,過程是接收系統開機廣播,啓動APP

這種方法會在開機後先顯示一下Android桌面再打開用戶的APP,顯得不是那麼完美。這個方法就不推薦了,直接採用方法二吧。

方法二:將APP定義爲LAUNCHER

製作Android APP時需要修改AndroidManfest.xml,在其中添加如下紅色內容:

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" /> 

<category android:name="android.intent.category.HOME" />

<category android:name="android.intent.category.DEFAULT" />

</intent-filter>

這樣將自己的APP安裝到Android終端裏,再次啓動板子,系統會讓你選擇LAUNCHER程序,如果你選擇你自己開發的APP並選始終的話,你的APP就會在每次開機後自動啓動了。

三、強制隱藏底部按鈕和狀態欄

方法一:APP強制隱藏的方法

此方法需要獲取system權限,可以採用對APP簽名的方式獲取。

“簽名方法詳見: http://bbs.witech.com.cn/article-130-1.html 

應用實現示例代碼如下:

protected void hideBottomUIMenu() {

  //隱藏虛擬按鍵,並且全屏

  if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api

    View v = this.getWindow().getDecorView();

    v.setSystemUiVisibility(View.GONE);

  } else if (Build.VERSION.SDK_INT >= 19) {

    

    Window _window = getWindow();

    WindowManager.LayoutParams params = _window.getAttributes();

    params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_IMMERSIVE;

    _window.setAttributes(params);

  }

}

方法二:修改Android系統源碼實現

1、去掉頂部狀態欄,修改

android_kk4.4.2_1.0.0/frameworks/base/core/res/res/values$ vim dimens.xml

image.png


將dip數值都改爲0dip

2、去掉底部虛擬按鍵,修改

android_kk4.4.2_1.0.0/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone$ vim NavigationBarView.java

image.png

3、去掉自動鎖屏,修改

android_kk4.4.2_1.0.0/frameworks/base/packages/SettingsProvider/res/values$vim defaults.xml

image.png

將鎖屏使能改爲true

照此做完,重新編譯安卓源碼,重新燒寫鏡像就OK了。

至此,我們完成了對Android系統的產品化定製改造。


以上內容硬件平臺爲 四核  iMX6Q OKMX6Q-C 開發板,其它硬件平臺可參考設計。


文章轉載至:飛凌嵌入式官網

https://www.forlinx.com/article-new-c22/337.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章