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

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


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

 

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

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

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

   

#!/system/bin/busybox sh

BUSYBOX="/system/bin/busybox"

if [ ! -e /data/system.notfirstrun ]; then	
  echo "do preinstall job"	
  
	/system/bin/sh /system/bin/pm preinstall /system/preinstall
	/system/bin/sh /system/bin/pm preinstall /sdcard/preinstall

	# copy android modify tool files
	mkdir /mnt/nanda
	mount -t vfat /dev/block/nanda /mnt/nanda
	$BUSYBOX cp /mnt/nanda/vendor/system/build.prop /system/
	$BUSYBOX cp /mnt/nanda/vendor/system/media/bootanimation.zip /system/media/
	$BUSYBOX cp /mnt/nanda/vendor/system/usr/keylayout/*.kl /system/usr/keylayout/
	sync
	umount /mnt/nanda
	rmdir /mnt/nanda

	$BUSYBOX touch /data/system.notfirstrun	
	
	 mkdir /databk
   mount -t ext4 /dev/block/nandi /databk	
   rm /databk/data_backup.tar
   umount /databk
   rmdir /databk
   echo "preinstall ok"

elif [ -e /system/data.need.backup ];then
   echo "data backup:tar /databk/data_backup.tar /data"
   mkdir /databk
   mount -t ext4 /dev/block/nandi /databk	
   
   rm /databk/data_backup.tar

   $BUSYBOX tar -cf /databk/data_backup.tar /data
   rm /system/data.need.backup
  
   umount /databk
   rmdir /databk

else 
   echo "do nothing"
fi


 

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

if [ ! -e /data/system.notfirstrun ]; then	
  echo "do preinstall job"	

	/system/bin/sh /system/bin/pm preinstall /sdcard/preinstall
	
if [ -f  /system/media/mediaresource.tar ]; then
	$BUSYBOX  echo "######## Copy media resouce to sdcard ##########"
	$BUSYBOX  cp /system/media/mediaresource.tar /mnt/sdcard
	cd /mnt/sdcard
	$BUSYBOX  tar -xvf /mnt/sdcard/mediaresource.tar  ;
	sync
	cd /

if [ -d  /sdcard/mediaresource ]; then   
  rm /system/media/mediaresource.tar;
  rm /mnt/sdcard/mediaresource.tar;
  $BUSYBOX touch /data/system.mediapreinstallok	
fi

fi

	/system/bin/sh /system/bin/pm preinstall /system/preinstall


	# copy android modify tool files
	mkdir /mnt/nanda
	mount -t vfat /dev/block/nanda /mnt/nanda
	$BUSYBOX cp /mnt/nanda/vendor/system/build.prop /system/
	$BUSYBOX cp /mnt/nanda/vendor/system/media/bootanimation.zip /system/media/
	$BUSYBOX cp /mnt/nanda/vendor/system/usr/keylayout/*.kl /system/usr/keylayout/
	sync
	umount /mnt/nanda
	rmdir /mnt/nanda

	$BUSYBOX touch /data/system.notfirstrun	
	
	 mkdir /databk
   mount -t ext4 /dev/block/nandi /databk	
   rm /databk/data_backup.tar
   umount /databk
   rmdir /databk
   echo "preinstall ok"

elif [ -e /system/data.need.backup ];then
   echo "data backup:tar /databk/data_backup.tar /data"
   mkdir /databk
   mount -t ext4 /dev/block/nandi /databk	
   
   rm /databk/data_backup.tar

   $BUSYBOX tar -cf /databk/data_backup.tar /data
   rm /system/data.need.backup
  
   umount /databk
   rmdir /databk

else 
   echo "do nothing"
fi


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

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

目录
相关文章
|
2月前
|
Android开发
安卓SO层开发 -- 编译指定平台的SO文件
安卓SO层开发 -- 编译指定平台的SO文件
30 0
|
4月前
|
XML Java Android开发
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
132 0
|
6月前
|
XML 前端开发 Android开发
android 前端常用布局文件升级总结(二)
android 前端常用布局文件升级总结(二)
|
2月前
|
JSON Java Go
|
2月前
|
算法 Java Android开发
安卓逆向 -- 调用其他APK的SO文件
安卓逆向 -- 调用其他APK的SO文件
17 0
|
2月前
|
Android开发
安卓逆向 -- Hook多个dex文件
安卓逆向 -- Hook多个dex文件
18 1
|
3月前
|
IDE 开发工具 Android开发
Android Studio 下发布项目成APK文件
Android Studio 下发布项目成APK文件
117 1
|
7月前
|
Android开发
Android系统开发中产品信息文件说明
Android系统开发中产品信息文件说明
80 1
|
3月前
|
安全 Android开发 数据安全/隐私保护
安卓逆向 -- SO文件逆向分析
安卓逆向 -- SO文件逆向分析
19 0
|
4月前
|
XML JSON Apache
【Android】如何获得Apache服务器的JSON文件数据
【Android】如何获得Apache服务器的JSON文件数据
56 0