相信很多用于android手机、pad的朋友都知道,机子启动的时候会有一个很炫的开机动画。很多朋友都会制作这类动画。本人也对此很有兴趣,最近研究了一把。不过本文的重点不在于如何制作开机动画,如果对开机动画制作有兴趣,可以参考http://kaiyuan.blog.51cto.com/930309/923522。
前提:机子必须已经root
开机动画的地址:system\media\bootanimation.zip,所以我们只需将这个文件替换为自己的bootanimation.zip,看似简单,但需要我们获取system文件夹的读写权限。只要你的机子已经获取root权限,那么在adb命令窗口中很好实现这些:
解决方法,步骤如下:
#adb shell
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
要把源文件复制到system/media文件夹中,就先要把制作好的bootanimation.zip文件复制到程序的data/data/应用名称/files目录下,然后把这个文件复制到目标文件夹system/media。adb命令如下:cat /data/data/*/files/* >/system/media/bootanimation.zip。有人会问,为何不用mv或者cp命令,但我试了几次,MV和CP命令都不管用,因为android机子认为内存卡和system文件夹不在一个设备上,会报Cross-device link错误。有何办法解决?可以采用 cat命令,查一下cat的用法:cat [选项]... [文件]... ,其作用是将[文件]或标准输入组合输出到标准输出。
最后设置 /system为只读文件
# mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system
开始将命令搬到程序中:
将bootanimation.zip文件拷贝至 data/data/应用名称/files目录,这个难不倒我们,我们将bootanimation.zip放置在assets文件夹下
关键代码:
AssetManager am = null;
am = getAssets();
InputStream is = am.open(fileName);
然后向目标文件夹读入字节流。然后,将三条adb命令写入程序。android提供了Runtime.getRuntime().exec(command)方法。支持多条命令执行,多条命令组成一个长字节流。
关键代码:
Process process = null;
DataOutputStream os = null;
try {
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.writeBytes("mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system\n");
os.writeBytes("cat /data/data/com.hjc/files/* >/system/media/bootanimation.zip\n");
os.writeBytes("mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system\n");
// os.writeBytes("reboot");
os.flush();
os.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
参考:http://blog.csdn.net/weiyirong/article/details/7400036