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

目录
相关文章
|
21天前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
65 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
5月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
101 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
5月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
470 19
|
5月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
1182 2
|
8月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
743 83
|
12月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
12月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
638 0
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
473 0
|
17天前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
222 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
27天前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
101 6

热门文章

最新文章