全志平台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之内比较好。

时间: 2024-08-31 10:35:05

全志平台Android4.0预装媒体资源文件文件的相关文章

基于全志A20 android4.2平台如何支持三个SD卡

基于全志A20 android4.2平台如何支持三个SD卡            做过android平台的同仁大多都知道android原生态只支持了一个sd卡,默认的挂载点也就是/mnt/sdcard,所以在应用中使用getExternalStorageDirectory()得到的都是/mnt/sdcard,通常会symlink 到/sdcard目录.做过全志平台的童鞋也知道全志android SDK支持2个sd卡,通常是一个内置的,一个外置的,内置的一般是从nand上或者emmc上的用户数据区

html5-HTML5音频文件不能在android4.0.4本地浏览器播放

问题描述 HTML5音频文件不能在android4.0.4本地浏览器播放 一个关于HTML5的工程 在android系统本地浏览器,多次播放相同的音频文件,在Android ICS 4.0.4版本中,只播放一次,再次启动音频就不会播放,在Android ICS 4.0.3版本和更新的4.1.1版本中就正常. 测试设备: Samsung Galaxy(Android 4.0.4):只播放一次 HTC(Android 4.0.4):只播放一次 索尼(Android 4.0.3):正常播放 HTC S

android4.0下serial port给应用操作完成特殊定制

android4.0下serial port给应用操作完成特殊定制         我们在开发中,串口也就是serialport或者叫uart用的是相当频繁的,很普通的接口了,今天为什么在这提出来呢?笔者前年完成了一款android4.0平台的车载平板产品,客户外接了一个DTV,我们在android这边通过GPIO模拟IR来控制DTV盒子的.客户前面也做了特殊的一些应用,可以通过wifi跟服务器连.服务器通过wifi网络发送控制命令给车载平板机器,但是客户反馈在wifi 在heavy WiFi

编译并运行Android4.0模拟器

1. 编译Android模拟器 在Ubuntu下,我们可以在源码里编译出自己的模拟器及SDK等编译工具,当然这个和在windows里下载的看起来没有什么区别. 编译Android模拟器的步骤和编译Android系统很相似: Ø source build/envsetup.sh Ø lunch sdk-eng Ø make sdk 在每次执行make的时候,编译系统会自动的验证上次编译项和这次编译项,如果两次不一样,会删除所有的目标代码,其实现在./build/core/main.mk 71 #

阿里“NASA”首个重磅武器亮相:机器学习平台PAI2.0

3月29日,阿里云在云栖大会深圳峰会上正式发布机器学习平台PAI2.0. 相比1.0版本,PAI2.0有多项重大更新,除增加了100余种算法外,更重要的是对主流深度学习框架TensorFlow.Caffe和MXNet的全面兼容. "NASA计划" 3月初,阿里巴巴董事局主席马云宣布启动内部代号为"NASA"的计划,将面向未来 20 年组建强大的独立研发部门,建立新的机制体制,为服务 20 亿人的新经济体储备核心科技. 同时,马云还动员阿里巴巴全球两万多名工程师投身&

仿android4.0 Spinner下拉效果

 1.自定义控件需求     自从android4.0发布后,android的桌面效果进一步得到增强以及美化,增加了动画特效,可是这仅仅用于android4.0以上的版本, 对于很多停留在android2.3或者更低的版本时,很多只有感叹.     为了获得更好的用户体验,很多软件产品在设计时,已经考虑到在android4.0以下版本加入android4.0以上版本的特效,那么 自定义控件来达到效果.     2.效果展示    3.技术点    1.自定义控件spinner包含Button和P

Android4.0开机启动速度优化过程经验总结

Android4.0开机启动速度优化过程经验总结         笔者EDE101使用的平台是:A10+android4.0.4+16GB NAND+1G DDR+(1280 X RGB X 800).项目进入收尾阶段,需要着重解决一下开机速度的问题,客户反映还是太慢了一点,当然我们得列入高优先级重点攻关解决了.优化开机速度前,平均android启动速度大概在39秒样子,A10跑1G.以下测试开关机都是按电源键正常操作.系统突然掉电的情况下,重新开机文件系统需要做recovery,在EDE101

谷歌三星联合发布Android4.0手机

在个人"气场"上,被誉为Android之父的安迪鲁宾(AndyRubin)和乔布斯相比仍有很大差距,不过他的突然现身仍然引起了媒体的极大关注.昨日,谷歌和三星在香港召开面向全球的新闻发布会,正式推出首款搭载谷歌Android4.0系统的智能手机G alaxyNexus.和上一版本相比,Android4.0有了完整的UI风格,并在人机交互.网络集成以及数据交换上进行了改进,让系统变得更易于使用.而对易用性细节的追求一直是苹果的长处.摩托罗拉则于昨日凌晨发布了Android2.3系统新机型

全志平台boot框架中增加设备驱动过程分析

全志平台boot框架中增加设备驱动过程分析          在boot启动阶段,大家都知道他的主要目的就是引导uboot,uboot在引导内核,从而让整个系统运作起来.全志的boot阶段,对应平板这一块,它会驱动LCD,显示一些开机LOGO,这个过程很快,也就1-2秒钟的时间.然而对于车载行业应用来说,可能需要再boot阶段做一些事情.比如,机器冷启动,大家都知道android启动时间还是比较长的,那么怎么使得客户能快速的用上倒车影像的功能呢?这就需要动脑筋了. /**************