一、修改化定制Android4.0系统

Android系统启动时,先加载Linux内核,在Linuxframebuffer驱动里可以定制开机界面,Linux内核启动成功后,挂载根文件系统,启动Android系统,这个时候设备屏幕上开始出现滚动的Android动画,等全部的Android服务启动完毕之后,开始启动AndroidHOME界面,也就是桌面。

而在这个过程中,我们可以将开机界面和Android动画全部定制为自己需要的效果。

在整个开机过程中,屏幕上会出现三次内容:

ØLinux启动时画面,通常是个黄嘴的小企鹅

ØAndroid系统本地启动阶段画面,是ANDROID文字字样

ØAndroid系统显示系统启动阶段动画,是滚动的ANDROID动画

我们下面将三个过程中的屏幕内容都进行个性化设置。

1.定制手机开机界面

根据前面文章介绍,我们要在Linuxframebuffer驱动里修改一些代码,让屏幕上出现我们自己的一个开机图片,如下图所示效果。

Linux系统中,LCD显示设备的驱动都是基于framebuffer的,framebuffer我们可以看成是Android的显存,只要我们向该显存里写入数据,这些数据就可以显示在LCD上。

根据不同的LCD所支持的颜色可以分为:16位色,24位色,32位色。

学过初中物理都知道,色彩由三元色:红(R),绿(G),蓝(B)组成。

Ø16位色:一个像素点由16bit表示,占两个字节,RGB组成分为:565555二种

Ø24位色:一个像素点由24bit表示,占三个字节,RGB每个颜色由8位组成。

Ø32位色:一个像素点由32bit表示,占四个字节,除了RGB每个颜色8位外,还有8位的Alpha的透明度,共组成32位。

很明显,位数越高,可显示的色彩越丰富,相同像素的LCD占用的显存越大,现在手机和平板基本上都使用32位色的LCD

Android模拟器里使用16565格式显示驱动。

既然如此,那么出现在framebuffer里的应该是16位的具体颜色值,我们从怎么知道一个图片的RGB的值呢?

还好,我们使用一款叫Image2Lcd的软件,可以将一个指定的bmp位图格式图片转换成指定的RGB格式数据的数组中。

如下图所示:



选择好图片,设置好宽度和高度及颜色位数,保存成一个头文件mylogo.h,打开里面内容如下:

[cpp] view plain copy
  1. constunsignedchargImage_log[261120]={0X00,0X10,0XF0,0X00,0X88,0X00,0X01,0X1B,
  2. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  3. ..................................
  4. };


那么我们可以直接将这个头文件拷贝到内核目录中,包含到驱动里,然后直接通过gImage_log数组名访问图片内容。
Ø 修改fb驱动文件:
drivers/video/samsung/s3cfb.c
在里面添加一个绘制Logo图片函数draw_logo,如下所示:

[cpp] view plain copy
  1. #include"mylogo.h"
  2. staticintdraw_logo(structfb_info*fb)
  3. {
  4. intheight=(fb->var).yres;
  5. intwidth=(fb->var).xres;
  6. printk("--------->h=%d,w=%d\n",height,width);
  7. memcpy(fb->screen_base,gImage_log,height*width*2);
  8. return0;
  9. }

Øs3cfb_probe函数里调用我们刚才添加的draw_logo函数:

[cpp] view plain copy
  1. staticints3cfb_probe(structplatform_device*pdev)
  2. {............................
  3. draw_logo(fbdev->fb[pdata->default_win]);
  4. ............................
  5. }

重新编译下载内核,就可以看到效果了!

2.定制Android启动字样

Linux启动完毕之后,开始挂载根文件系统ramdisk.img,通过命令行指定Linux运行Linux系统里的第一个用户进程init

init程序由system/core/init/目录下的源码编译而成,其入口文件为:init.cconsole_init_action函数就是用来打开console终端,然后在屏幕上打印“ANDROID”字样的,如果想修改这个值,则直接将其内容修改了,重新编译init程序,然后重新生成system.img即可,不过,一般是将其内容注释掉。

[cpp] view plain copy
  1. staticintconsole_init_action(intnargs,char**args)
  2. {
  3. fd=open(console_name,O_RDWR);
  4. if(fd>=0)
  5. have_console=1;
  6. close(fd);
  7. if(load_565rle_image(INIT_IMAGE_FILE)){
  8. fd=open("/dev/tty0",O_WRONLY);
  9. if(fd>=0){
  10. constchar*msg;
  11. msg="\n"
  12. "\n"
  13. "\n"
  14. "\n"
  15. "\n"
  16. "\n"
  17. "\n"//consoleis40colsx30lines
  18. "\n"
  19. "\n"
  20. "\n"
  21. "\n"
  22. "\n"
  23. "\n"
  24. "\n"
  25. "ANDROID";
  26. write(fd,msg,strlen(msg));
  27. close(fd);
  28. }
  29. }
  30. return0;
  31. }


3. 定制Android动画
Android系统过程中会滚动Android字样的一个动画,我们可以根据自己的需要,定制这个开机动画,如下图所示:



Android的开机动画是由Linux本地程序bootanimation控制实现的,其代码在:frameworks/base/cmds/bootanimation/,通过分析源码可知,修改Android开机动画有两种方式:
Ø 替换frameworks/base/core/res/assets/images/目录下的两个图片文件:android-logo-mask.png和android-logo-shine.png,android-logo-mask.png是镂空蒙板png图片,android-logo-shine.png是镂空蒙板后面的闪光png图片
Ø 在/data/local/或/system/media/目录创建bootanimation.zip文件

bootanimation.zip文件打包前的结构为:
[cpp] view plaincopy
1. desc.txt 动画属性描述文件
2. part0/ 第一阶段动画图片的目录(动画是由一帧帧图片组成的)
3. part1/ 第二阶段动画图片的目录
bootanimation.zip文件是直接由这几个文件打包的,打包的格式是ZIP,并且要指定用压缩打包方式(就是在打包时的压缩方式选择为存储)。


desc.txt文件的格式为:

1. 480 250 15
2. p 1 0 part0
3. p 0 10 part1
其中各个参数的意义为:

注:
标识符:p 是必须的。
循环次数:指该目录中图片循环显示的次数,0表示本阶段无限循环。
每秒显示帧数:就是每秒显示的图片数量,决定每张图片显示的时间。
阶段切换间隔时间:指的是该阶段结束后间隔多长时间显示下一阶段的图片,其单位是每张图片显示的时间。
对应图片目录:就是该阶段动画的系列图片,以图片文件目录的顺序显示动画,而且图片的格式必须要为PNG。

[cpp] view plain copy
  1. <prename="code"class="cpp"></pre>
  2. <pre></pre>
  3. <pre></pre>
  4. <pre></pre>
  5. <pre></pre>
  6. <pre></pre>
  7. <pre></pre>
  8. <pre></pre>
  9. <pre></pre>
  10. <pre></pre>

更多相关文章

  1. 关于Android(安卓)drawable和drawable-v24文件夹有什么区别
  2. Android(安卓)5.0 Activity切换动画
  3. android 如何在JNI编程中使用logCat
  4. Android布局文件xml
  5. eclipse Android(安卓)工程在Libs导入第三方jar / Android工程作
  6. 【原创】Android多个xml文件的使用
  7. 菜鸟学Android(安卓)之 selector背景选择器
  8. Android数据持久化之File机制分析
  9. Android(安卓)pdf viewer在android studio应用问题说明详解

随机推荐

  1. 【游戏语音技术开发互联网公司】android
  2. Android中的Selector
  3. Android——EditText【输入框】的所有属
  4. 去除listView和recyclerview滑动到顶部和
  5. 让Ubuntu和Android同时运行(Ubuntu on And
  6. Android自动朗读(TTS)的实现
  7. android 下编译c++项目
  8. android shape的使用
  9. Android中EditText的inputType属性值
  10. Android(安卓)XML布局报错:android/view/V