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
■ 1280 800 15 --第一位图片宽,第二位是图片高,第三位是帧率也就是一秒播放多少帧(多少张图片)。
■ p 1 0 part0----第二位表示part0部分也就是包含图片的文件夹播放次数,第三位表示这部分播完后下部分开始的间隔,默认为0,第四位表示文件夹名称
■ p 0 0 part1----同上但是第二位的0表示循环播放。
最好一行要换行,保存。
c、打包文件成 zip 格式,压缩方式为 存储 。
首先要在bootanimation文件夹中选中“part0” “part1”文件夹和“desc.txt”文件进行压缩,而不是选中bootanimation文件夹压缩。
2、logo的替换
2.1、uboot logo的替换不需要修改源码,烧写系统时和系统镜像放在同一个目录下烧写进去即可。
如下图:
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
将dip数值都改为0dip
2、去掉底部虚拟按键,修改
android_kk4.4.2_1.0.0/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone$ vim NavigationBarView.java
3、去掉自动锁屏,修改
android_kk4.4.2_1.0.0/frameworks/base/packages/SettingsProvider/res/values$vim defaults.xml
将锁屏使能改为true
照此做完,重新编译安卓源码,重新烧写镜像就OK了。
至此,我们完成了对Android系统的产品化定制改造。
以上内容硬件平台为 四核 iMX6Q OKMX6Q-C 开发板,其它硬件平台可参考设计。
联系客服