App2sd 的意思是:APK安装到内存卡,“APP”代表程序,“2 ”的意思是To(到),“sd ”即Fat32格式的内存卡。
2.2系统后开始原生支持APP2SD,所以2.2后 为了与官方原生APP2SD区别开来叫APP2SD+或app2ext
2.2系统后的手机原生 app2sd 使用方法:设置 ->应用程序 -> 管理应用程序 ->点击需要 移动到SD卡的程序 ->移至 SD卡
是否遇到过:存储空间不足(手机内存空间所剩不多了)!这是因为 /data 分区的空间快满了
首先要了解APK安装的占用空间的原理
例如 UC浏览器.apk,安装过程:
将UC浏览器.apk 重命名为UC浏览器.zip后用解压缩软件打开即可看到里面有 class.dex 文件 和文件夹Lib
1、首先会将 UC浏览器.apk 重命名为 com.ucmobile.apk 后复制到 /data/app 目录下,
2、将com.ucmobile.apk 包里的 class.dex 文件解压到 /data/Dalvik-Cache 目录下,
3、在/data/data 目录下创建 com.ucmobile 目录,将com.ucmobile.apk 包里的 Lib(有的APK无此文件)下对应的 .so 文件复制到 /data/data/com.ucmobile/lib 目录下,UC浏览器使用产生的缓存、书签、设置等数据都存放在/data/data/com.ucmobile 下
所以一个APK的安装= 原APK+class.dex+.so文件,而系统自带的app2sd仅能将 原APK移动到内存卡,所以/data空间还是慢慢会满的。
APP2SD+ 相对APP2SD的优点是:
1 手机作为U盘时 程序仍能使用
2 系统自带的app2sd 只将 /data/app 移动到内存卡,手机内存空间仍然会满,而APP2SD+ 和Link2sd 只要EXT分区足够大装多少软件都没问题。因为 系统自带的app2sd只能将 /data/app 下的apk移动到内存卡,而APP2SD+ 和 Link2sd则可以将/data/app /data/Dalvik-Cache 下的.dex文件等/data 下所有文件或文件夹都可以移动到 内存卡的EXT分区。
3 小插件(小部件)安装到EXT分区也能正常使用
APP2SD+(又名:App2Ext)、Link2sd与Data2SD(又名:Data2Ext)的原理都是:
Link(链接),Link就像Windows 的快捷方式一样,Link文件大小占用的空间可忽略不计。原理就是 将原文件或文件夹移到到其它任意位置如 EXT分区 或 /system 或/cache,当然内存卡第一分区Fat32格式的分区不行 ,创建Link放回原目录来替代原文件或目录。可用 RE文件管理器 操作
创建Link教程参考:用Re管理器将dalvik-cache移动到cache图文教程
APK ODEX化的节省手机内存原理: apk odex化后可以用 winrar等压缩软件打开APK后删除里面的 class.dex节省内存,无需解压包里的class.dex到/data/Dalvik-Cache 减少了一个 class.dex,class.dex大约能节省三分之一左右的空间。 制作ODEX内置软件
慎用:APK包里的 Lib(有的APK无此文件)下对应的 .so 文件复制到 /system/lib 目录下 后删除APK包里的Lib 文件夹。也能节省不少空间
APP2SD+ 与Link2sd:APP2SD+ 是一刀切将/data/app 和/data/Dalvik-Cache 整个文件夹都移动到EXT分区后用Link替代,所以所有apk都安装到ext分区里了,而Link2sd是一个Link管理软件,安装是能自由的选择apk安装到手机内存还是ext分区,可以将apk移动到ext分区或移动回来手机内存。APP2SD+ 与Link2sd原理都一样,但Link2sd 能管理link更好,而且Link2sd最大的好处是能自动创建ext分区挂载脚本,当然有些机型可能创建不了挂载脚本就只能用下面的APP2SD+了.
Link2sd很简单:
Link2sd使用前提:手机必需已ROOT!
1 内存卡分区:内存卡分区图文教程
2 下载 Link2SD_2.4.10.apk 后安装,任何一个软件市场可以下载Link2sd
详细参考:Link2SD 开启使用图文教程
下面内容全部是进行手动 app2sd+ 的步骤:
进行APP2SD+ 条件:已获取root权限
第一 内存卡分区
第二 尝试手动挂载ext分区后实现创建开机自动挂载ext分区的脚本。
也可以用Link2sd创建挂载脚本(比较方便简单),挂载位置在 /data/sdext,详细参考:Link2SD 开启使用图文教程,link2sd创建挂载脚本不成功则可尝试下面的方法。
第三 将/data/app 等移动到ext分区后创建链接替
App2sd+ 第一步骤,内存卡分区:
分区的顺序 第一分区:fat32 第二分区:ext2或ext3,分区教程:用PartitionManager9.0 给内存卡分区
分区注意事项:第二分区必须是主分区!如果第二分区是逻辑会导致分区后 2.2之后系统不能自动识别挂载 /sdcard ,用Acronis Disk Director Suite 10 分区会出现此种情况(可能是不熟悉软件使用导致)。
2.1做app2sd升级2.2 sdcard(内存卡)无法挂载问题:分区分的是逻辑分区不是主分区会出现此问题(即ext分区是mmcblk0p5或6的升级2.2或2.3后无法挂载/sdard) 。解决方法:重新用PartitionManager9.0 重新分区为主分区—ext分区为mmcblk02。
App2sd+ 第二步骤,尝试手动挂载ext分区后实现创建开机自动挂载ext分区的脚本 :
下载 超级终端(terminal emulator)手机端操作或AdbShell(电脑端操作)都可
如需在电脑操作:Adb Shell使用教程 ,建议用超级终端。
Re 管理器 有些版本没创建链接功能 下载这个版本中文版即可:RE管理器
下载Busybox安装器 ,安装1.17.1版本或更高版本到 /system/xbin下。
先将RE管理器制作为内置软件在/system/app下 ,安装好后从/data/app下将Re管理器剪切移
到/system/app 后重启即可,或制作为 .apk和.odex也行:制作ODEX内置软件
运行手机安装好的超级终端
输入命令:
su
弹出提示是否给予root权限:允许
输入命令
busybox df -h
接着输入:
ls -l /dev/block
busybox df -h 命令,图片说明:红色长方框里 该条内容( /dev/block/vold/179:2 )是在分区后Link2sd或APP2ext 脚本挂载成功后才会出现的,以此可确认Link2sd或App2ext是否挂载成功。
ls -l /dev/block 命令,图片说明:绿色长方框里 该条内容:179, 2 mmcblkop2 是内存卡分区后的第二分区
分区成功后输入命令:busybox df -h
记下:/dev/block/vold/179:数字 如上图的:/dev/block/vold/179:1
接着输入:ls -l /dev/block
找到:179, 1 那一行,则可发现对应:mmcblk0p1
179, 3(数字+2)代表第三主分区,如果分的话
179, 2(数字+1) 代表第二主分区,Ext 格式 对应:mmcblk0p2
179, 1(数字) 代表第一主分区,Fat32 格式 对应:mmcblk0p1
179, 0(数字-1) 代表整个 SD卡
当命令:ls -l /dev/block 出现:“179, 2(数字+1) 代表第二主分区,Ext 格式” 则代表内存卡成功分区,系统已识别。
手动挂载ext分区:
用RE管理器将 /system 挂载为可读可写,在/system 下建立一个sd 空目录(sd或sd-ext等任意名称都可)来挂载ext分区
进去超级终端,输入下面命令:
su
busybox mount -t ext2 /dev/block/mmcblk0p2 /system/sd
再输:
busybox df -h
显示有/dev/block/mmcblk0p2 即ext分区挂载成功。
手动挂载成功后,重启后就无效了,所以要放一个自动挂载脚本到手机,每次开机自动挂载。
用RE管理器在 /system/bin 下建一个文件,命名为:flash_image ,无需后缀名,按住它,弹出的选项里以文本编辑打开,里面输入如下内容:
#!/system/bin/sh
busybox run-parts /system/etc/init.d
保存后,九个权限全部打勾,
或下载脚本直接使用
下载:APP2SD脚本.zip ,解压到内存卡里,下面所有脚本都在里面,注意脚本里的是mmcblk0p2 用记事本打开脚本全部替换为你手机对应的!!!
解压得到脚本:flash_image 放到/system/bin 下, 九个权限全部打勾,flash_image 的作用是使init.d目录下的脚本能开机执行。
如果系统有/system/etc/init.d 目录,将MountEXT脚本放到init.d下面,九个权限全部打勾,重启后 命令:busybox df -h 如果发现挂载成功 即init.d目录脚本能开机自动执行:就无需上面的flash_image脚本 。
/system/etc 下没init.d目录就新建立一个,然后再在 /system/etc/init.d 下建一个文件,命名任意如:MountExt(开机自动挂载ext分区脚本) ,无需后缀名,按住它,弹出的选项里以文本编辑打开,里面输入如下内容:
#!/system/bin/sh
busybox mount -o remount,rw /system
if [ ! -d /system/sd ]
then
mkdir /system/sd
busybox chown system /system/sd
fi
busybox mount -t ext2 /dev/block/mmcblk0p2 /system/sd
if [ $? -eq 255 ]
then
busybox mount -o remount,ro /system
exit 1
fi
保存后,九个权限全部打勾,mmcblk0p2 全部替换为你手机对应的。
或直接将解压得到的脚本:MountExt 放到/system/etc/init.d 下,权限全部打勾
重新开机后,用超级终端命令:
su
busybox df -h
如果显示有mmcblk0p2即自动挂载成功,可以进行APP2SD+ 了。
App2sd+ 第三步骤,第三 将/data/app 等移动到ext分区后创建链接替代 :
手动移动/data/app、 /data/dalvik-cache 、/dat/data(不建议)到ext分区
移动/data/app/system/sd下,R.E. 管理器必须是内置在/system/app! ,不能用RE管理器移动/dat/data到ext分区,/data/app、/data/dalvik-cache可以!
有备无患:有Recovery 先备份。
ext分区用脚本开机自动挂载成功后进入/data 将/data下的 app剪切,如下图:
到/system/sd 下粘贴,如下图:
按住/system/sd下的app文件夹 ,弹出选项 选:创建链接,把链接剪切到/data 下粘贴,
将链接重命名为app就搞定啦 ,如下图:
有箭头的就是Link(链接)文件,如下图:
上图RE管理器操作等同下面超级终端 命令:
su
cp -a /data/app /system/sd/ (将/data/app目录复制到/system/sd/下)
rm -r /data/app (删除/data/app目录)
ln -s /system/sd/app /data/app (建立软链接)
reboot (重启手机后就ok)
/data/dalvik-cache与/data/data更改上面命令为对应即可。
/data/data手动移动必须用电脑端的adb工具!
APP2SD+ 原则:首先移动 /data/app 到EXT分区,内存不够之后再移动 /data/dalvik-cache ,进行前面两个还不够再移动 /dat/data,空间足够不要移动/dat/data 到EXT分区,亲测用Class4以上的内存卡 移动/dat/data 到EXT分区 不卡。
用脚本自动实现APP2SD+等:
一般来说文件从内存卡复制到手机后的权限是9个权限都有的,无需修改。没有权限把文件权限改满9个。
flash_image 实现开机后系统自动执行/system/etc/init.d下的脚本
MountEXT 实现自动开机自动挂载(mount)ext分区,该脚本是 mmcblk0p2 ,不同的自己更改,下面脚本亦是mmcblk0p2
自动实现挂载ext分区和移动/data/app等到ext分区,用MountEXT脚本测试能开机自动挂载ext分区后删除MountEXT脚本换用下面的脚本,四个只需用一个:
App2ext 实现移动/data/app 到ext分区
App_Dalvik-cache2ext 实现移动/data/app 与 /data/dalvik-cache 到ext分区
App_Dalvik-cache_Data2ext 实现移动/data/app 与 /data/dalvik-cache 与 /data/data 到ext分区
上面脚本取消app2sd等功能,需保证手机里有足够的空间,在/data 下建立一个目录(即文件夹),命名为:app2sdno
重启手机,删除/system/etc/init.d下的脚本或不删除取消三个执行权限 (X),删除app2sdno文件夹 或下次再进行App2ext等必需删除。
2.1系统的需注意:实现App2ext等后注意:只能在关机后拔内存卡,不能在没有内存卡和换其它内存卡的情况下开机, 否则有些开机启动的软件会不能用,重新安装那些失效的软件即可。
相关文章:/data/dalvik-cache移到cache制作了图文教程 与/data/app 等移动到ext分区一样的。
文章地址:http://www.tttabc.com/android/app2sd.htm
有话要说