android机子如何通过程序替换开机动画

    相信很多用于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/mediaadb命令如下:cat /data/data/*/files/* >/system/media/bootanimation.zip。有人会问,为何不用mv或者cp命令,但我试了几次,MVCP命令都不管用,因为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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值