采用Android系统做产品时的定制化功能实现

采用Android系统做产品时的定制化功能实现

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


采用Android系统做产品时的定制化功能实现

■ 1280 800 15 --第一位图片宽,第二位是图片高,第三位是帧率也就是一秒播放多少帧(多少张图片)。

■ p 1 0 part0----第二位表示part0部分也就是包含图片的文件夹播放次数,第三位表示这部分播完后下部分开始的间隔,默认为0,第四位表示文件夹名称

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

最好一行要换行,保存。 

c、打包文件成 zip格式,压缩方式为 存储

首先要在bootanimation文件夹中选中“part0” “part1”文件夹和“desc.txt”文件进行压缩,而不是选中bootanimation文件夹压缩。

image.png采用Android系统做产品时的定制化功能实现

采用Android系统做产品时的定制化功能实现

2、logo的替换

2.1、uboot logo的替换不需要修改源码,烧写系统时和系统镜像放在同一个目录下烧写进去即可。

如下图:

采用Android系统做产品时的定制化功能实现


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

采用Android系统做产品时的定制化功能实现


将dip数值都改为0dip

2、去掉底部虚拟按键,修改

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

采用Android系统做产品时的定制化功能实现

3、去掉自动锁屏,修改

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

采用Android系统做产品时的定制化功能实现

将锁屏使能改为true

照此做完,重新编译安卓源码,重新烧写镜像就OK了。

至此,我们完成了对Android系统的产品化定制改造。


以上内容硬件平台为 四核  iMX6Q OKMX6Q-C 开发板,其它硬件平台可参考设计。