`

Android开机动画过程

 
阅读更多
Android 开机会出现3个画面:
1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片);
2. Android平台启动初始化,出现"A N D R I O D"文字字样画面;
3. Android平台图形系统启动,出现含闪动的ANDROID字样的动画图片(start)。

1、开机图片(Linux小企鹅) (Android 1.5及以上版本已经取消加载图片);
Linux Kernel引导启动后,加载该图片。
logo.c中定义nologo,在fb_find_logo(int depth)函数中根据nologo的值判断是否需要加载相应图片。
代码如下:
static int nologo;
module_param(nologo, bool, 0);
MODULE_PARM_DESC(nologo, "Disables startup logo");
/* logo's are marked __initdata. Use __init_refok to tell
* modpost that it is intended that this function uses data
* marked __initdata.
*/
const struct linux_logo * __init_refok fb_find_logo(int depth)
{
const struct linux_logo *logo = NULL;
if (nologo)
return NULL;
        ......
}
相关代码:
/kernel/drivers/video/fbmem.c
/kernel/drivers/video/logo/logo.c
/kernel/drivers/video/logo/Kconfig
/kernel/include/linux/linux_logo.h

2、开机文字("A N D R I O D")
Android 系统启动后,init.c中main()调用load_565rle_image()函数读取/initlogo.rle(一张565 rle压缩的位图),如果读取成功,则在/dev/graphics/fb0显示Logo图片;如果读取失败,则将/dev/tty0设为TEXT模式,并打开/dev/tty0,输出文本“A N D R I O D”字样。
定义加载图片文件名称
#define INIT_IMAGE_FILE "/initlogo.rle"
int load_565rle_image( char *file_name );
#endif
init.c中main()加载/initlogo.rle文件。

if( load_565rle_image(INIT_IMAGE_FILE) ) {//加载initlogo.rle文件
    fd = open("/dev/tty0", O_WRONLY);//将/dev/tty0设为text模式
    if (fd >= 0) {
        const char *msg;
            msg = "\n"
        "\n"
        "\n"
        "\n"
        "\n"
        "\n"
        "\n"  // console is 40 cols x 30 lines
        "\n"
        "\n"
        "\n"
        "\n"
        "\n"
        "\n"
        "\n"
        "             A N D R O I D ";
        write(fd, msg, strlen(msg));
        close(fd);
    }
}
相关代码:
/system/core/init/init.c
   
/system/core/init/init.h
/system/core/init/init.rc
/system/core/init/logo.c
*.rle文件的制作步骤:
a. 使用GIMP或者Advanced Batch Converter软件,将图象转换为RAW格式;
b. 使用android自带的rgb2565工具,将RAW格式文件转换为RLE格式(如:rgb2565 -rle < initlogo.raw > initlogo.rle)。


3、开机动画(闪动的ANDROID字样的动画图片)
Android 1.5版本:Android的系统登录动画类似于Windows系统的滚动条,是由前景和背景两张PNG图片组成,这两张图片存在于手机或模拟器/system/framework /framework-res.apk文件当中,对应原文件位于/frameworks/base/core/res/assets/images/。前景图片(android-logo-mask.png)上的Android文字部分镂空,背景图片(android-logo-shine.png)则是简单的纹理。系统登录时,前景图片在最上层显示,程序代码(BootAnimation.android())控制背景图片连续滚动,透过前景图片文字镂空部分滚动显示背景纹理,从而实现动画效果。
相关代码:
/frameworks/base/libs/surfaceflinger/BootAnimation.h
/frameworks/base/libs/surfaceflinger/BootAnimation.cpp
/frameworks/base/core/res/assets/images/android-logo-mask.png  Android默认的前景图片,文字部分镂空,大小256×64
/frameworks/base/core/res/assets/images/android-logo-shine.png Android默认的背景图片,有动感效果,大小512×64

Android 1.6及以上版本:
init.c解析init.rc(其中定义服务:“service bootanim /system/bin/bootanimation”),bootanim 服务由SurfaceFlinger.readyToRun()(property_set("ctl.start", "bootanim");)执行开机动画、bootFinished()(property_set("ctl.stop", "bootanim");)执行停止开机动画。
BootAnimation.h和BootAnimation.cpp文件放到了/frameworks/base/cmds/bootanimation目录下了,增加了一个入口文件bootanimation_main.cpp。Android.mk文件中可以看到,将开机动画从原来的SurfaceFlinger里提取出来了,生成可执行文件:bootanimation。Android.mk代码如下:
//=============Android.mk======================
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
    bootanimation_main.cpp \
    BootAnimation.cpp
# need "-lrt" on Linux simulator to pick up clock_gettime
ifeq ($(TARGET_SIMULATOR),true)
    ifeq ($(HOST_OS),linux)
        LOCAL_LDLIBS += -lrt
    endif
endif
LOCAL_SHARED_LIBRARIES := \
    libcutils \
    libutils \
    libui \
    libcorecg \
    libsgl \
    libEGL \
    libGLESv1_CM \
    libmedia  
LOCAL_C_INCLUDES := \
    $(call include-path-for, corecg graphics)
LOCAL_MODULE:= bootanimation
include $(BUILD_EXECUTABLE)
//==========================================
(1)adb shell后,可以直接运行“bootanimation”来重新看开机动画,它会一直处于动画状态,而不会停止。
(2)adb shell后,命令“setprop ctl.start bootanim”执行开机动画;命令“getprop ctl.start bootanim”停止开机动画。这两句命令分别对应SurfaceFlinger.cpp的两句语句:property_set("ctl.start", "bootanim");和property_set("ctl.stop", "bootanim");
相关文件:
/frameworks/base/cmds/bootanimation/BootAnimation.h
/frameworks/base/cmds/bootanimation/BootAnimation.cpp
/frameworks/base/cmds/bootanimation/bootanimation_main.cpp
/system/core/init/init.c
/system/core/rootdir/init.rc
参考文档:
图说Android开机画面和开机动画
http://www.shudoo.com/09/1030/15/13418431.html
initlogo.rle: display an image on boot
http://forum.xda-developers.com/showthread.php?t=443431

分析Android 根文件系统启动过程(init守护进程分析)
http://crazier9527.iteye.com/blog/454635
分享到:
评论

相关推荐

    Android 开机动画启动过程详解

    Android 开机动画启动过程详解, 方便定制自己的开机动画

    修改Android开机动画

    首先,开机动画的地址:system\media\...官方最原始的开机动画在system\ framework\framework-res.apk\assets\images里面,里面主要是2张图片,高手可以去研究一下,说不定通过这个文件可以用代码实现动画的过程。

    Android开机动画包bootanimation.zip

    Android开机动画包(bootanimation.zip)是Android操作系统启动时显示的一种动态图形效果,它给用户带来了视觉上的吸引力,同时也是Android系统个性化的一部分。这个压缩包通常包含一系列的PNG图像序列、一个控制...

    ANDROID开机动画分析

    这篇文章将深入探讨ANDROID开机动画的分析,涉及到的知识点包括Android系统的启动流程、动画的制作原理以及如何通过源码和工具进行分析。 首先,Android的启动流程是从引导加载器(Bootloader)开始,经过内核加载...

    Android开机动画修改

    要修改Android开机动画,我们需要了解几个关键点,包括bootanimation.zip文件、desc.txt文件格式以及可能出现的问题及其解决方法。 首先,开机动画的修改主要涉及到`bootanimation.zip`文件。这是一个特殊的压缩包...

    android 原生开机动画文件

    在Android操作系统中,开机动画是用户首次启动设备时看到的视觉效果,它结合了品牌标识、动画元素以及系统加载过程。了解如何修改和定制Android原生开机动画文件对于开发者来说是一项重要的技能,尤其对于那些希望为...

    Android开机logo开机动画定制

    总之,Android开机logo和开机动画的定制涉及到图像处理、文本编辑、文件打包、系统配置等多个环节,需要对Android系统结构和工作原理有深入理解。通过这个过程,开发者不仅可以打造独特的启动体验,还可以借此了解...

    android开机动画包制作工具

    Android开机动画是由一系列图像或视频组成的序列,它们在设备启动过程中显示,为用户提供进度指示。这些动画通常由PNG或JPEG图像序列组成,或者使用特殊的动画格式如APK或MP4。开机动画的制作需要对Android系统架构...

    Android 开机动画

    Android 开机动画是Android操作系统启动过程中展示的一种视觉效果,它为用户提供了系统加载的状态反馈,同时也增加了设备的个性化体验。Android系统的开机动画通常以一个名为`bootanimation.zip`的压缩包形式存在,...

    android开机动画若干

    本篇文章将深入探讨Android开机动画的相关知识点。 首先,Android开机动画的制作涉及到多个技术层面。开机动画的格式通常是`.mp4`或`.gif`,因为这些格式支持动画效果且兼容性良好。开发者需要了解如何使用图形编辑...

    分享Android TV 11开机动画(附上使用方式)

    首先,开机动画是由一系列图像或视频组成的,它们在系统启动过程中播放,通常包含Android的Logo或其他定制的图形。在Android TV 11中,这些动画文件被存储在设备的特定位置,即 `\system\media` 目录下。这表明系统...

    android修改开机画面及开机动画

    在Android系统中,修改开机画面和开机动画可以让设备更加个性化,同时也是一种展现技术实力的方式。下面我们将深入探讨如何进行这些更改,以及涉及到的相关知识点。 首先,我们要了解Android的启动流程。Android...

    android 开机动画sample

    本篇将详细探讨Android开机动画的基本原理、制作流程以及如何利用提供的`android 开机动画sample`包进行修改和自定义。 首先,我们要理解Android开机动画的组成。一个基本的Android开机动画由三部分构成:`desc.txt...

    Android开机动画

    首先,理解Android开机动画的工作原理至关重要。开机动画并不是在操作系统启动后运行的应用程序,而是在引导加载器(Bootloader)和内核启动期间播放的。这些动画由一系列静止图像或视频帧组成,通过特定的格式如DEX...

    MTK Android12 (S) 开机动画

    2. **audioplay.cpp**: 该文件很可能处理开机动画过程中的音频播放。在某些Android设备上,开机动画不仅有视觉效果,还可能伴随着声音,audioplay.cpp就是处理这部分内容的代码。 3. **bootanimation_main.cpp**: ...

    Android4.4开机动画源码

    总之,Android 4.4的开机动画源码涉及到了系统初始化、资源解压、图像和音频处理等多个方面,通过精心设计的代码结构和配置文件,实现了启动过程中的视觉和听觉体验。对于开发者来说,理解这些源码有助于深入学习...

    android开机动画代码

    在Android系统中,开机动画(Boot Animation)是用户开机时看到的一段动画效果,它不仅提升了用户体验,也反映了系统的个性化。本知识点主要探讨在Android 4.1.2版本中如何实现开机动画,我们将从以下几个方面进行...

    android字样的开机动画

    在Android操作系统中,"android字样的开机动画"是指设备启动时显示的具有"ANDROID"文字的动画效果。这个动画不仅是品牌标识的一部分,也代表了系统启动的过程,为用户提供了视觉反馈,让他们知道设备正在准备进入...

    安卓开机动画 bootanimation.zip

    在Android操作系统中,开机动画(Boot ...总的来说,Android开机动画是一个展示个性和创意的平台,同时也涉及到系统资源管理和设备优化的知识。理解其工作原理和文件结构,可以让我们更好地定制和优化设备的启动体验。

    MTK Android13 自定义开机动画和铃声

    1.使用google的bootanimation,不支持开机铃声2.所以修改为使用mtkbootanimation,但基线代码会报错,此资源完美解决编译报错问题,并解决首次开机无铃声的问题。

Global site tag (gtag.js) - Google Analytics