全志平台Android4.0预装媒体资源文件


 

     最近开发来了一个小需求:在发布的软件包里面预装一些多媒体资源文件。想起来,挺容易的,不就是把多媒体文件拷贝到系统里面去吗?是的,确实是这样,可是得在不同开发平台做法不大一样,目前全志软件打包升级工具还没有很完善,只是在卡启动的做卡程序里可以在烧卡的时候预装一些媒体资源文件。

   在文件管理器访问的路径是/mnt/sdcard这个挂载点是管理了nand用户数据区域的,可以通过USB连到电脑拷贝、删除文件。但是这是一个挂载点,并且是在系统执行preinstall服务时才执行挂载。那我们怎么把媒体文件拷贝到这个数据区呢?

笔者想到的一个比较保守的方法,就是把媒体资源文件先压缩打包好,编译的时候拷贝到/system/media下面去,这样在编译的时候就会打包到system.img里面去,在烧写玩程序后重新开机后执行preinstall的时候再把媒体资源压缩包拷贝到数据区解压,这样就完成了资源文件预装。但是这里面有几个小问题需要注意,/mnt/sdcard挂载点要再执行完:/system/bin/sh /system/bin/pm preinstall /sdcard/preinstall才能使用。全志发布的状态:

   

[plain] view plain copy print ?
  1. #!/system/bin/busybox sh  
  2.   
  3. BUSYBOX="/system/bin/busybox"  
  4.   
  5. if [ ! -e /data/system.notfirstrun ]; then    
  6.   echo "do preinstall job"    
  7.     
  8.     /system/bin/sh /system/bin/pm preinstall /system/preinstall  
  9.     /system/bin/sh /system/bin/pm preinstall /sdcard/preinstall  
  10.   
  11.     # copy android modify tool files  
  12.     mkdir /mnt/nanda  
  13.     mount -t vfat /dev/block/nanda /mnt/nanda  
  14.     $BUSYBOX cp /mnt/nanda/vendor/system/build.prop /system/  
  15.     $BUSYBOX cp /mnt/nanda/vendor/system/media/bootanimation.zip /system/media/  
  16.     $BUSYBOX cp /mnt/nanda/vendor/system/usr/keylayout/*.kl /system/usr/keylayout/  
  17.     sync  
  18.     umount /mnt/nanda  
  19.     rmdir /mnt/nanda  
  20.   
  21.     $BUSYBOX touch /data/system.notfirstrun   
  22.       
  23.      mkdir /databk  
  24.    mount -t ext4 /dev/block/nandi /databk     
  25.    rm /databk/data_backup.tar  
  26.    umount /databk  
  27.    rmdir /databk  
  28.    echo "preinstall ok"  
  29.   
  30. elif [ -e /system/data.need.backup ];then  
  31.    echo "data backup:tar /databk/data_backup.tar /data"  
  32.    mkdir /databk  
  33.    mount -t ext4 /dev/block/nandi /databk     
  34.      
  35.    rm /databk/data_backup.tar  
  36.   
  37.    $BUSYBOX tar -cf /databk/data_backup.tar /data  
  38.    rm /system/data.need.backup  
  39.     
  40.    umount /databk  
  41.    rmdir /databk  
  42.   
  43. else   
  44.    echo "do nothing"  
  45. fi  


 

如果把拷贝媒体资源文件放到这两句之后,肯定能够拷贝成功,但是/system/preinstall执行的时间取决于预装的apk多少,多装几个游戏、应用apk,一般耗时比较多,多数在50秒以上。也就是说在进入桌面后50秒之内可能从文件管理器上看还没法看到预装的媒体资源文件,这样这种体验就不是很好。一旦进入桌面,用户就可以打开资源管理器进入预装的资源管理目录,播放预装的媒体文件。因此就需要做一些小调整,如下:

[plain] view plain copy print ?
  1. if [ ! -e /data/system.notfirstrun ]; then    
  2.   echo "do preinstall job"    
  3.   
  4.     <SPAN style="BACKGROUND-COLOR: #6666cc; COLOR: #000099">/system/bin/sh /system/bin/pm preinstall /sdcard/preinstall  
  5. </SPAN>   
  6. <SPAN style="COLOR: #ff0000">if [ -f  /system/media/mediaresource.tar ]; then  
  7.     $BUSYBOX  echo "######## Copy media resouce to sdcard ##########"  
  8.     $BUSYBOX  cp /system/media/mediaresource.tar /mnt/sdcard  
  9.     cd /mnt/sdcard  
  10.     $BUSYBOX  tar -xvf /mnt/sdcard/mediaresource.tar  ;  
  11.     sync  
  12.     cd /  
  13.   
  14. if [ -d  /sdcard/mediaresource ]; then     
  15.   rm /system/media/mediaresource.tar;  
  16.   rm /mnt/sdcard/mediaresource.tar;  
  17.   $BUSYBOX touch /data/system.mediapreinstallok   
  18. fi  
  19.   
  20. fi  
  21.   
  22. </SPAN> <SPAN style="COLOR: #ffff33"><SPAN style="BACKGROUND-COLOR: #3366ff">/system/bin/sh /system/bin/pm preinstall /system/preinstall  
  23.   
  24. </SPAN>  
  25. </SPAN> # copy android modify tool files  
  26.     mkdir /mnt/nanda  
  27.     mount -t vfat /dev/block/nanda /mnt/nanda  
  28.     $BUSYBOX cp /mnt/nanda/vendor/system/build.prop /system/  
  29.     $BUSYBOX cp /mnt/nanda/vendor/system/media/bootanimation.zip /system/media/  
  30.     $BUSYBOX cp /mnt/nanda/vendor/system/usr/keylayout/*.kl /system/usr/keylayout/  
  31.     sync  
  32.     umount /mnt/nanda  
  33.     rmdir /mnt/nanda  
  34.   
  35.     $BUSYBOX touch /data/system.notfirstrun   
  36.       
  37.      mkdir /databk  
  38.    mount -t ext4 /dev/block/nandi /databk     
  39.    rm /databk/data_backup.tar  
  40.    umount /databk  
  41.    rmdir /databk  
  42.    echo "preinstall ok"  
  43.   
  44. elif [ -e /system/data.need.backup ];then  
  45.    echo "data backup:tar /databk/data_backup.tar /data"  
  46.    mkdir /databk  
  47.    mount -t ext4 /dev/block/nandi /databk     
  48.      
  49.    rm /databk/data_backup.tar  
  50.   
  51.    $BUSYBOX tar -cf /databk/data_backup.tar /data  
  52.    rm /system/data.need.backup  
  53.     
  54.    umount /databk  
  55.    rmdir /databk  
  56.   
  57. else   
  58.    echo "do nothing"  
  59. fi  


   先判断媒体资源文件包的存在性,如果存在就拷贝再解压,如果解压成功就删除system里面的资源文件包,释放空间出来,这样就完成了整个预装。

   这个问题本身没什么难度,本文实现方法经过验证可行,温馨提示资源文件包不要太大,控制在30M之内比较好。

你可能感兴趣的:(全志平台Android4.0预装媒体资源文件)