Android应用预置系统
项目中需要将开发出来的Apk预置到某款手机里面,如果是不可卸载,就将Apk放到/system/app/下面,如果可以卸载,那就放到/data/app/下面。
但遇到了一个问题:apk中包含so文件,这个时候需要将so文件预置到/system/lib/下面,在apk中删除so文件。
关于Android系统的分区以及含义,网上的分析如下:
安卓的系统一般会有4个重要的分区:boot,system,cache,data。system分区存放的是系统应用(systemapp)和系统所需要的库文件(lib/*.so),而大家平时安装的软件是装到data分区(用户区)的。装在system区的就是系统应用,data分区的是用户应用。应用程序都安装在/app子目录下。
但是,不管是系统应用还是用户应用,安卓会建立缓存以加速应用的启动,该缓存是在/data/dalvik-cache下面。注意了,是在data分区上的,所以应用安装的越多,data分区可用的空间就越少。
一般ROOT之后,我们会删除/卸载部分系统的应用,从而system分区就空出了部分的空间,尤其是定制机,删了系统应用之后,会空出多达60M的空间。假如本身机器的ROM比较小,data分区不够用的话,就最好把部分的app移动到system空间,当然一旦移动到了system分区,就是系统应用了!
好,下面介绍哪些应用是可以移动到system分区的:
1)开机就要启动的程序,比如权限管理啊,Widget啊。
2)常常用到的程序,比如文件管理器。
3)一些不会有内存驻留的小程序,比如autostarts,SDMaid啊。
有一些应用是不适合移动到system空间的:
1)退出仍然会驻留内存的程序(比如数米基金宝),因为这些程序一旦变成了system应用,杀进程的软件就拿他们没办法了。
2)应用程序内含lib库的,这个可以用压缩工具(windows下的zip工具、安卓下的ES文件管理器、RootExplorer)查看该apk,假如内部有lib文件夹的,里面有*.so文件的,那就说明他用到了这些lib。当然,若硬要移动到system空间也是可以的,只要把lib/*.so拷贝到system/lib下即可,但是本人觉得一是会造成重复,二是将来维护起来比较麻烦。不过有一法,可以在system/app下面建立文件夹,把*.so拷贝到该文件夹下,然后通过链接文件的方式将其拷贝到lib下。(这个我没试过)
移动方法:
1)将该apk先卸载,然后将apk文件拷贝到system/app下,修改权限,有必要的话,重启一下。这样做的好处是,该软件的缓存会在卸载是自动删除。
2)为防止有些应用卸载后数据丢失,可以不卸载,方法是:将apk拷贝到system/app下,然后删除data/app的apk,最后手动把/data/dalvik-cache/下该程序的缓存清除。
3)假如要移动的应用太多,可以进入recovery,清除一下dalvik-cache,让启动的时候自动再生成cache。
附:
1.查看各个分区的使用情况:http://blog.csdn.net/puncha/article/details/7670727