Android不刷机下的app2sd方法(dex cache占空间解决篇)
来源:互联网 发布:工地临时用电计算软件 编辑:程序博客网 时间:2024/04/26 03:45
抱着5年的HTC G7这个古董,一直没有想法去换换。
最近微信、支付宝什么的apk应用都开始走程序巨型化,一次性就来个50MB的空间占用,让还是Android 2.2的手机如何吃的消?
看看100多MB的空间,这家里家外都用微信,得装一个吧;大家一起出去吃饭,一人付账,AA结得有支付宝;还有12306火车票啦,手机银行什么的;
加上pm setInstallLocation 2也没有解决dex cache占空间的问题。
于是随着需求的日益强烈,终于要想办法把Android的存储空间扩展下了。网上好多刷机的教程啊,我个人倒不喜欢刷机,刷错一次还得再改再重新刷,太麻烦。
所以准备好环境:
- 玩具笔记本Acer一台,装有Ubuntu,Android SDK和NDK
- HTC G7手机,装有原版Android 2.2
首先,我们简单过一下存储扩展的原理:
- Android 2.2中,app应用分别装在两个地方,一个是/system/app中,一个是/data/app中。
- 官方的app都带有odex文件加速应用启动,一般在/system/app里;以后下载安装的app一般在/data/app,手机启动到桌面后apk应用程序(apk实际就是个zip,16进制看下magic是PK便是)里的内容会被解压,其中最重要的就是dex文件,会被放入/data/dalvik-cache中,程序的数据会放入/data/data中。
为了所有程序的稳定,决定不动/data/data;转而进攻的方向就是/data/app和/data/dalvik-cache,它们是在手机内置存储里的,目标就是把这两个目录指向sdcard,这样以后安装的apk就直接进sdcard了。
Step 1. ROOT权限
这里就不多叙述如何ROOT了,其实你不ROOT,手机关机,按住音量减开机就进入recovery模式,这时连上电脑用adb shell进去就是root。当然一键ROOT方便了不少。
大家还可以学习一下ROOT相关的代码:https://github.com/ChainsDD/su-binary
其实改改那个su.c,用NDK编译一下,扔进/system/bin,chmod 6777,就可以随时ROOT了,只是把验证把关去掉不太安全,还是加个apk,过一下列表比较好。
Step 2. 准备磁盘空间
网上一堆格式化磁盘分区的做法,把sdcard变为ext2等格式,那我还得备份数据啊,太讨厌。
在Ubuntu上建一个磁盘文件,用loop设备就比较轻松(这里给它们总共500MB,应该能装不少应用了吧,改天Hack下看怎么在arm上编LXC玩,顺便把以前编译好的vim也放进去,后面就可以随时编辑文本了):
dd if=/dev/zero of=app.img count=1 bs=300MBdd if=/dev/zero of=cache.img count=1 bs=200MBmkfs.ext2 app.imgmkfs.ext2 cache.img
Step 3. 编写切换脚本
手机USB连接,把那俩img文件放进sdcard里,比如放在/sdcard/extraspace/app.img /sdcard/extraspace/cache.img:
adb shellmkdir /sdcard/extraspaceexitadb push app.img /sdcard/extraspace/adb push cache.img /sdcard/extraspace
(话外:顺便提一下,最好在recovery模式下把busybox取出来放到/system/bin里,HTC G7 Android 2.2那个toolbox实在是太…
adb reboot recovery# 等待手机启动到recovery模式adb shellmount /systemcp /sbin/busybox /system/bincd /system/bin# 下面两个工具很重要ln -s busybox mknodln -s busybox losetup# ls -l 看看哪些常用命令经常用,把toolbox替换为busyboxrm cat ls cp mount umount mv dfln -s busybox catln -s busybox lsln -s busybox cpln -s busybox mountln -s busybox umountln -s busybox mvln -s busybox df)
下面就是写个脚本从内置存储切换到sdcard模式:
#!/bin/sh#loop的0和1被占用了,从2开始用,这里我用3 4mknod /dev/loop3 b 7 3mknod /dev/loop4 b 7 4losetup /dev/loop3 /sdcard/extraspace/app.imglosetup /devv/loop4 /sdcard/extraspace/cache.imgmount -o loop -t ext2 /dev/loop3 /data/appmount -o loop -t ext2 /dev/loop4 /data/dalvik-cache# 记得给权限,如果保留为root:root,升级程序,它还是原来的,删除apk程序,重启手机又回来了chown system:system /data/appchown system:system /data/dalvik-cache# 重新加载一遍所有apk程序,关了好多程序,终于给我逮着了PID=$(ps | grep "/system/bin/servicemanager" | grep -oE "system +[0-9]+" | grep -oE "[0-9]+")kill -9 $PID要是想切换回去:
umount /data/appumount /data/dalvik-cachelosetup -d /dev/loop3losetup -d /dev/loop4rm /dev/loop3 /dev/loop4PID=$(ps | grep "/system/bin/servicemanager" | grep -oE "system +[0-9]+" | grep -oE "[0-9]+")kill -9 $PID以上的脚本是要在ROOT下运行的,就是su过了
Step 4. 验收
sucd /data/local/tmpsh app2sd.sh启动画面结束后,使用一下:adb install com.tencent.mm-1.apk,OK安装完毕,内置容量几乎不减少了,登录下瞬间又少了8MB(我晕,腾讯,你是要吃我磁盘的么;阿里支付宝也是如此…),因为没有把/data/data也映射到sdcard,据说手机会变很慢,所以有空间用就好了,下面装了一堆应用,貌似那个100多MB的植物大战僵尸也可以安装了。
- Android不刷机下的app2sd方法(dex cache占空间解决篇)
- Android 解决Dex超出方法数的限制问题
- Android解决Dex超出方法数限制的问题
- 解决android打包dex文件方法数溢出的问题
- 解决 android dex 65535 方法数的限制
- Android 2.2手动开启APP2SD方法
- 轻松开启android 2.2 官方的app2sd
- android app2sd+无法安装应用的解决办法。
- Android dex file cannot exceed 64K错误,使用Mutidex解决Dex超出方法数的限制
- Android进阶之使用multidex(产生多个dex)解决Dex超出方法数65535的限制
- HTC G7(Desire) Android 2.2 开启APP2SD最安全的方法(软件安装到SD卡)
- android APK加固篇-2.动态加载dex及dex的方法的调用
- 解决android中单个dex方法数超过65535的方法
- Android 使用android-support-multidex解决Dex超出方法数的限制问题
- Android 使用android-support-multidex解决Dex超出方法数的限制问题
- Android 使用android-support-multidex解决Dex超出方法数的限制问题
- Android 使用android-support-multidex解决Dex超出方法数65536的限制问题
- Android 使用android-support-multidex解决Dex超出方法数的限制问题,
- SQL-有条件查询数据
- java批量修改Excel文件 使用包jxl.jar
- STM32 串口通讯 发送 接收
- Block实战应用之button点击事件和Alert弹出框
- 关于“非法使用精神控制技术和生理武器罪”的刑法增修案(正式建议稿)
- Android不刷机下的app2sd方法(dex cache占空间解决篇)
- linux vim,vi编辑器的基础
- OpenCV中的origin成员
- 【leetcode 数组】Remove Duplicates from Sorted Array II
- rac下/tmp/bootstrap权限问题
- 第九周项目3.4 输出点阵4
- java转义字符分类
- Android自定义View之Gallery实现3D图片播放器
- 关于 C++ 框架、库和资源的一些汇总列表