Android环境下App2SD功能的实现

来源 :计算机光盘软件与应用 | 被引量 : 0次 | 上传用户:zjh73
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:App2SD(ApplicationtoSDcard)可以将系统中内部存储的部分文件迁移到外部存储(如SD卡)中,以此来实现内部存储的“扩容”也让外部存储空间得到充分利用,本文通过对基本原理和环境准备的详细说明,将迁移功能在操作系统的层面完成。主要以三星i559手机为例,描述了实现App2SD的具体实现过程,让手机获得真正想要的App2SD功能。
  关键词:Android系统;App2SD
  中图分类号:TP311.1
  1 应用背景
  Android从2.2开始已支持App2SD(ApplicationtoSDCARD)的功能,可以将系统中内部存储的部分文件迁移到外部存储(如SD卡)中,以此来实现内部存储的“扩容”也让外部存储空间得到充分利用。当下有很多也称之为App2SD的软件,但这些软件都是在应用层面将已安装在内部存储上的软件移动到外存中去,需要在每次安装新程序后手工进行迁移操作,使用时较为麻烦且受被迁移软件特性(某些软件本身不支持迁移,即便被强制迁移也会让软件运行不正常)的限制。本文所实现的内容则是要将迁移功能在操作系统的层面完成,通过系统层实现App2SD功能具有对上层的Android框架完全透明的优点,让程序安装时将本应放置于内部存储的安装文件自动存放到外存上且不会受安装程序的限制。其实,即便是2.2以上的系统很多手机商家也未将该功能直接加到与手机相配的Android系统中,因此要让手机想要真正获得App2SD的功能就需要在了解其原理的基础上进行手工实现。
  2 基本原理
  通常手机的存储空间可以分为三个部分:内部RAM、内部ROM和外部ROM。内部RAM即为内存,是CPU运算时数据的重要暂存空间;内部ROM则是存放操作系统Android的内部闪存,如果与一台装有windows系统的电脑进行类比,可认为内部ROM是装有Windows系统的系统盘(通常是C盘),这部分空间由手机自带且容量较小;而外部ROM可看作是除系统盘以外的其他磁盘,由外部存储卡(如SD、TF卡等)组成且容量较大,用于存放照片、音乐等用户自己的文件。Android可以设置系统在安装程序时将程序安装在什么位置,通常会有内部ROM、外部ROM和由程序自己决定三种选择,用户多会选择“由程序自己决定”方式,而较多程序在开发时因结构设计以及考虑到程序的快速稳定运行都需将安装位置放在内部ROM中。但由于内部ROM本身容量较小(通常只有200M),因而会出现在安装多个软件后内部ROM的容量使用就会处于报警状态,而外部ROM的空间却被大量闲置未被使用的情况。由此提出了将部分外部ROM划分出来挂载到内部ROM上供系统使用。
  具体在实现中需先将外存卡划分为两个分区:一个为FAT格式仍作为外部ROM使用,另一个则为EXT格式(通常是ext2或ext3,视系统的识别能力而定)作为挂载分区。使用EXT格式的原因是防止出现非预期结果,否则会有被系统启动过程中将其当作外部ROM进行挂载的可能。经过分区并格式化后的外存卡在系统启动后会在/dev/block中的设备列表中有所反映:多出一个mmcblk0p2(mmcblk0是指外存卡设备,而mmcblk0p1和mmcblk0p2则是其上的两个分区)设备文件。此时在系统中(考虑到稳定与安全性通常会选择在/system下)创建目录,将mmcblk0p2以ext格式挂载在该目录上,从此存放在该目录中的任何文件实际上都被存放在了外存卡的第二个EXT分区上。接下来便可把与程序安装有关的多个目录(/data下的app、app-private、dalvik-cache和data)都迁移至EXT分区,当然最后还须考虑成功实现App2SD功能的重要条件:让系统继续使用这些将被迁走的目录,因此需在/data下为被迁走的目录建立指向EXT分区对应目录的链接文件。
  上述的EXT分区挂载工作是在系统启动后手动完成的,但Android重启后会因为EXT分区没被挂载使得被迁移的目录不能访问最终造成系统不能成功,因此还需要实现系统启动时自动挂载分区的功能。在系统的根目录下有一个init.rc文件可用来控制Android的初始化进程完成某些初始化工作,在该文件适当的位置加入控制指令便可让系统启动时自动挂载EXT分区。不过直接修改此文件是不可行的,因为此时的init.rc文件只是一副本:手机的内部ROM中留存有一个启动镜像文件boot.img,且此镜像文件中包含有init.rc,系统启动时会把boot.img展开并提取出init.rc并放于根目录下,初始化进程是以这时产生的init.rc文件作为控制依据完成初始化工作的,所以在启动完成后对init.rc文件的编辑操作只是对一个副本进行的,此副本在下次启动时将会被覆盖且不会起到任何作用。然而,boot.img是安装系统(即常说的“刷机”)时被写入手机的,之前该文件是与Android系统的其它重要文件(如内核文件kernel、恢复镜像文件recovery.img、系统结构文件system.rfs等)一并打包作为系统安装所用的rom文件(常说的刷机包)而存在的,所以需要把rom包解开后提取并修改当中的init.rc文件再封装成有效的rom文件且刷入手机才能实现所需要的初始化控制功能。
  3 环境准备
  3.1 外存分区
  将手机的SD卡取出插在读卡器上与电脑相连,通过“AcronisDiskdirectorSuite”软件将sd卡分成两个分区并进行格式化,一个作为常规外部ROM(fat32格式,以下称为FAT分区),另一个则存放被迁移的程序文件(ext2格式,以下称为EXT分区)。EXT分区应根据自己将安装的应用多少和大小而定(一般在400至500兆),剩下的空间可都分配给FAT分区使用。需要注意的是,两个分区在创建时都应设为主分区类型,且FAT分区在EXT分区之前。   3.2 工具软件
  在windows下创建adb与bootimg两个文件夹,分别放入adb(AndroidDebugBridge)与bootimg工具软件。adb用于和手机间的通信。除了本文所提到的功能以外,更多的adb功能可通过帮助命令“adb-h”获得;bootimg则用于对boot.img文件进行展开和打包操作。
  3.3 操作环境
  外存卡插回手机并与电脑本连,在windows下同时开启两个控制终端(“cmd”命令)窗口,一个通过“adbshell”命令与手机的Linux系统相连,实现与手机Linux系统的shell命令交互;另一个则保持在windowsDOS环境下完成与手机间的文件互传以及boot.img文件的解包和打包。在Linuxshell环境中,通过“mkdir”命令在/sdcard上建立rom和ramdisk两个工作目录分别用于存放刷机文件rom.tar和根结构文件ramdisk.gz展开后的文件。
  4 实现过程
  本节开始将以三星i559手机(Android版本为2.3.5,本身不带有App2SD功能)为例,将实现过程进行详细说明。实现过程主要分为6个步骤,对于命令行的描述除了命令本身内容外,将以“【L】”和“【W】”开头来标注该命令的运行环境是LinuxShell或是WindowsDOS(参见上一节),同时对命令的功能解释说明用分号“;”作为分隔符放于命令行的后段。
  4.1 提取ramdisk文件
  本步骤把与三星i559相配的刷机包文件rom.tar进行解包,提取出启动镜像文件boot.img,再利用bootimg.exe工具将boot.img文件展开进而得到Android根结构的描述文件ramdisk.gz。值得注意的是,展开boot.img文件时,bootimg会将boot.img中的base、cmdline、page_size和padding_size等用于Android系统运行所需的配置参数值显示于屏幕上,我们可记下这些值以便后面进行再封包步骤,从而省去了单独对boot.img文件的分析工作。
  (1)【W】adbpushrom.tar/sdcard/rom.tar;将刷机文件放入sdcard卡;(2)【L】cd/sdcard/rom/;变更当前目录;(3)【L】tarxf../rom.tar;展开刷机文件得到boot.img;(4)【W】cdD:\bootimg\;变更windows下当前工作目录;(5)【W】adbpull/sdcard/rom/boot.img.\boot.img;将boot.img拷到windows中;(6)【W】bootimg--unpack-bootimg;解开boot.img文件,得到ramdisk.gz文件;
  说明:第(4)步变换windows下的工作目录是为了第(5)步拷贝出的boot.img文件与bootimg.exe文件在同一目录下以便第(6)步能够正常执行。
  4.2 解包ramdisk文件获取init.rc
  将上一步骤中得到的ramdisk.gz文件解压会得到一个cpio格式的存档文件,利用cpio命令将存档文件展开即可得到原始的init.rc。
  (1)【W】adbpushramdisk.gz/sdcard/;将ramdisk文件放入sdcard卡;(2)【L】gzip-dramdisk.gz;解压ramdisk.gz得到cpio格式文件ramdisk;(3)【L】cd/ramdisk;变更工作目录;(4)【L】cpio-i-F../ramdisk;展开ramdisk文件,得到init.rc文件。
  说明:第(2)步在解压ramdisk.gz文件生成cpio格式的ramdisk文件后原有的ramdisk.gz文件会自动被删除;第(3)步的工作目录的目的是为了让第(4)步展开的所有文件(包括init.rc)存放在/ramdisk下。
  4.3 修改init.rc文件
  Linux环境下用vi编辑上一步得到的init.rc文件,在“onpost-fs”节内开始插入“mountext2/dev/block/mmcblk0p2/system/extrw”并保存文件。
  4.4 封装新的rom包并刷入手机
  本步骤主要是第2、3步的逆向过程。将修改后的init.rc文件与其他展开自ramdisk.gz的文件一并重新打包并压缩生成新的ramdisk.gz文件,再次利用bootimg工具将ramdisk.gz与其他从原boot.img展开得到的文件一并再封装成新的boot.img文件,最终形成可用于刷机的rom文件。
  (1)【L】find.|cpio-o-Hnewc|gzip>../ramdisk.gz;生成新的ramdisk.gz文件;(2)【W】adbpull/sdcard/ramdisk.gz.\;将新ramdisk.gz拷至windows下;(3)【W】bootimg--repack-bootimgxxx“ccc”yyyzzz;生成新的boot.img文件;(4)【W】adbpushboot.img/sdcard/rom;将新生成的boot.img传到sdcard卡;(5)【L】cd/sdcard/rom;变更目录;(6)【L】tarcf../new_rom.tar;在/sdcard下生成新的刷机rom文件;(7)【W】adbpull/sdcard/new_rom.tar.\;将新rom文件传入windows;(8)【W】adbrebootdownload;重启手机并进入刷机模式
  说明:第(1)步须在/sdcard/ramdisk下进行;第(2)步拷贝出的ramdisk.gz文件应与bootimg.exe文件放置在同一目录下覆盖原有的ramdisk.gz文件;第(3)步命令中的xxx、ccc、yyy和zzz分别对应于第2步骤中记录的base、cmdline、page_size和padding-size参数值;第(4)步将把/sdcard/rom中原有的boot.img文件覆盖;第(6)步执行后会在/sdcard中看到新生成的刷机包new_rom.tar;在第(8)步后便可利用刷机工具将新的rom包刷入手机。   4.5 Android环境调整
  手机在刷机完成并重新启动后,新的init.rc文件将开始被系统使用。接下来的工作是在系统中建立挂载EXT分区用的目录、迁移相关目录以及建立链接文件。本步骤进行前,需先通过mount命令对/system目录进行读写重挂载,否则将不能在/system建立挂载所用的目录,但因各手机机型的不同对/system的挂载点也不同,故此处不作说明。对/system的可写挂载也可利用手机上的某些软件(如RootExplorer)来实现,但无论哪种方法都须先对新装入的Android系统进行“root”(获取root权限)操作。
  (1)【L】mkdir/system/ext;创建挂载EXT分区用的目录;(2)【L】chmod775/system/ext;设置目录的访问权限;(3)【L】chownroot/system/ext;设置目录的属主;(4)【L】chgrproot/system/ext;设置目录的属组;(5)【L】mount-r-w-text2/dev/block/mmcblk0p2/system/ext;手工挂载ext2分区到/system/ext上;(6)【L】busyboxcp-a/data/xxx/system/ext/;将被迁移目录拷贝到ext2分区;(7)【L】busyboxrm-rf/data/xxx;删除/data下的被迁移目录(8)【L】busyboxln-s/system/ext/xxx/data/xxx;建立/data下各被迁移的目录相应的软链接并指向/system/ext下对应的目录。
  说明:因为最终要将/data中的内容迁移到/system/ext目录中,所以第(2)、(3)、(4)步对ext目录的属性设置都以/data为参照;第(5)步对设备的手工挂载是因为/system/ext是在新rom刷入手机后被建立的,所以新rom中init.rc的自动挂载还不能起作用;第(6)、(7)、(8)步命令中的xxx指代/data目录下app、app-private、dalvik-cache、data等需要被迁移的目录。
  5 结论
  本文主要以三星i559手机为例,描述了实现App2SD的具体实现过程。但文章所讲述的内容并不可能完全适用于各种型号与系统版本的手机,应用者需根据自己的硬件与软件条件进行调整与优化。同时本文所提出的实现方法还有待改进与完善,比如当系统在运行时如果外存卡有拔插操作(如人为取出并通过读卡器与电脑进行数据交换),而在被Android再识别时外存卡其对应的设备文件可能会发生变化(从mmcblk0变成mmcblk1),从而导致原来挂载于mmcblk0p2上的EXT分区不再可用最终造成系统的不正常运行,所以作为稳定可靠的方法还应加入监测功能,根据外存卡的实际状态动态获取相应的设备文件并自动进行“再”挂载操作。
  参考文献:
  [1]android系统启动流程分析.http://blog.csdn.net/sincethen/article/details/5942472.
  [2]Android启动流程代码分析.http://wenku.baidu.com/view/571d010716fc700abb68fc28.html.
  [3]android系统app2sd(修改boot.img).http://www.cnblogs.com/mahang/archive/2011/09/04/2166066.html.
  作者单位:中国人民解放军装甲兵工程学院训练部信息管理中心,北京 100072
其他文献
摘 要:网络舆情是目前社会科学领域和自然科学领域中的研究热点。为了探索网络舆情传播机制,该文首先构建了BBS社会网络组成,然后利用复杂网络理论,探讨了高校校园BBS网的无尺度特性和小世界特征,最后分析评价了社会网络拓扑结构对网络舆情传播的影响。  关键词:复杂网络;高校BBS网;社会网络;舆情传播  中图分类号:TP393.18  随着互联网的飞速发展,网络用户是网络内容的浏览者和制造者。社交网站
期刊
摘 要:本系统以MSP430F5529单片机为核心,采用MQ138甲醛检测传感器、MS2200-P1一氧化碳检测传感器等多种传感器检测室内空气中甲醛、一氧化碳等有害气体并检测甲醛浓度;利用AM2301温湿度传感器对现场温湿度进行实时监测,并通过段式液晶显示屏实时显示甲醛浓度读数,温度、湿度读数。整个系统体积小,重量轻,采用电池供电,携带方便。系统功耗低,价格低,适合家庭使用的空气质量检测系统,能快
期刊
摘 要:“工学结合”模式是高职院校培养高素质应用型人才的核心理念,从“工学结合”模式的基本特点出发,指出高职院校《大学计算机信息技术》课程改革的现状及问题,探讨基于“工学模式”下课程内容的优化整合、课程资源建设的完善、教学方法的更新、实践考核方式的规范等方面的改革与创新,以期助推高职院校信息技术人才培养目标的实现。  关键词:工学结合;高职院校;大学计算机信息技术;课程改革  中图分类号:G420
期刊
摘 要:随着移动互联网行业的迅速发展,企业对移动互联网人才的需求急速增加,本文从企业对移动互联网专业人才的需求现状入手,以苏州高博软件技术职业学院为例,立足于民办高职院校,探讨移动互联网人才培养存在的问题,提出了“教学、实习、就业”三位一体的高职移动互联网专业人才培养模式。  关键词:实训教学;实习;人才培养;移动互联网  中图分类号:TN929.5-4  1 中国移动互联网行业发展现状  中国互
期刊
摘 要:软件技术是一门实用性和操作性都很强的技术,必须通过实训环节来加强学生的职业能力。通过以软件企业“准职业人”的职业成长路线和项目开发过程作为整个实训的主线,让学生对软件开发有了整体的认识,使其顺利进入职场。实践证明,这套方法已经取得了良好的效果,非常适合培养高素质的软件人才。  关键词:软件“准职业人”;实训教學  中图分类号:TP31-4  1 软件专业毕业生面临的主要问题  1.1 缺乏
期刊
摘 要:生活污水中含有大量的硫化物。在厭氧环境下容易产生有毒气体。本实验装置通过自动加压供气的方式来补充远距离管线传输过程中的氧气,以此提出了试验装置的远程控制系统结构和实现方法。在设计时充分利用无线传输网络和Internet网络技术的优势,实现远程启停控制和回路控制。经过实验和反复验证,系统稳定、可靠,对工业化推广系统设计与实施有直接的指导意义。  关键词:生活污水;有毒气体;试验装置;远程控制
期刊
摘 要:本文以单片机为核心,,采用定温上水与温差循环相结合的运行方式,设计了智能热水系统工作过程及程序设计,经实验检验,有一定的合理性及实用价值。  关键词:太阳能;程序设计;单片机  中图分类号:TP311.52  随着能源日趋紧张,新能源的开发利用越来越成为当务之急,而太阳能在各种新能源中日益突显。太阳能热水系统由于具有简单易行和效率高的优点,在我国取得了前所未有的发展。而如何设计智能高效的系
期刊
摘 要:Ad Hoc网络攻击行为分析可以为Ad Hoc网络安全机制的设计提供借鉴,为此提出一种基于随机博弈网的Ad Hoc网络安全分析方法。该方法通过建立Ad Hoc网络的攻防随机博弈网模型并计算得到纳什均衡策略,然后将模型转化为一个同构的连续时间马尔科夫链(CTMC),通过计算CTMC的稳态概率就可以对Ad Hoc网络的攻击行为进行定量分析。仿真结果表明攻击行为的成功概率只与攻击能力与预期收益有
期刊
摘 要:云计算技术的飞速发展,给现代化工行业带来了机遇和挑战。文章结合当前我国云计算技术的发展状况,针对石油化工行业中化工物流和虚拟化工厂的技术特点,研究了基于云计算的化工物流信息平台和虚拟化工厂平台设计方案。  关键词:云计算;化工物流;虚拟化工厂  中图分类号:TP393  云计算的概念在近两年越来越热,与早些年不同的是,现在云计算已经不再停留在概念上,一些IT公司纷纷推出了自己的云服务并加强
期刊
摘 要:以三维可视化的现状和研究意义为出发点,通过对其建设需求、系统建设和实际应用的研究,总结了三维可视化数字校园信息管理系统的实现方法,介绍了该系统的特点与优点,阐述了三维可视化技术的发展前景。  关键词:物联网;三维可视化;数字校园;GIS  中图分类号:TP391  三维可视化(3D Visualization)技术是20世纪80年代中期诞生的一门集计算机数据处理、图像显示的综合性前缘技术。
期刊