App2sd功能和Asec文件

App2sd功能和Asec文件本文原创作者:CloudChou.欢迎转载,请注明出处和本文链接1.asec文件是什么?asec的全称是AndroidSecureExternalCaches以前app安装好之后,app和app的数据都是放在data分区,而data分区经常存储空间不够,于是从Android2.2,Froyo版本开始,Android开始支持App2Sd功能,所谓的App2Sd就是安装ap

大家好,又见面了,我是你们的朋友全栈君。

本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接

1. asec文件是什么?

asec的全称是Android Secure External Caches
以前app安装好之后,app和app的数据都是放在data分区,而data分区经常存储空间不够,
于是从Android 2.2, Froyo版本开始,Android开始支持App2Sd功能,
所谓的App2Sd就是安装apk时把apk安装到Sd卡,apk的数据也放到sd卡,
官方的app2sd功能比较鸡肋,由开发者自己决定是否支持app2sd功能,这样大部分应用不支持app2sd功能
而民间的app2sd功能实现时,直接把sdcard挂载到data目录,这样所有的数据都会放在sdcard上,
如果sdcard够大的话,便能解决手机data分区不够的问题。
官方的app2sd功能实现时会建立/sdcard/android_secure,
然后在该目录为每个支持app2sd功能的应用建立asec文件

2.官方app2sd功能的最初实现

官方实现的app2sd功能,最初是在/sdcard目录下建立一个android_secure目录,
然后在该目录下为支持app2sd功能的应用建立一个对应包名的asec文件,
比如com.shuame.mobile,那么建立的文件是com.shuame.mobile.asec,
asec文件是一个镜像文件,Android利用该文件建立一个loop设备,
Android还会为每个应用创建一个挂载点,例如:/asec/com.shuame.mobile
然后将建立好的loop设备挂载到/asec/com.shuame.mobile

3. asec文件存在哪个目录

最初asec文件存放在/sdcard/android_secure目录,
后来存放在/sdcard/.android_secure目录下

4. 为了保护sdcard目录下的android_secure目录不被其它第三方应用搞坏,所采取的措施

为了保护sdcard目录下的android_secure目录不被其它第三方应用搞坏,
最先采取的措施是采取挂载一个只读并且零字节的临时文件系统到/sdcard/android_secure目录,
这样第三方应用就不能操作该目录
为了实现该目的,采取的步骤如下所示:
1) Mount checked media at a secure location (/mnt/secure/staging)
2) Ensure /android_secure exists on the media, (creating if it doesnt)
3) Bind-mount /mnt/secure/staging/android_secure -> /mnt/secure/asec
(where only root can access it)
4) Mount an RDONLY zero-sized tmpfs over /mnt/secure/staging/android_secure
5) Atomically move /mnt/secure/staging to the publicly accessable storage
directory (/mnt/sdcard),move挂载时,其实是使用了MS_BIND选项
采取这个措施后, Android还为每个应用创建的挂载点也变化了,
放在/mnt/asec目录,例如/mnt/asec/com.shuame.mobile,
所以在支持app2sd功能的手机上常常可以看到很多/mnt/asec/* 的挂载点
后来为了进一步保护android_secure目录,
将android_secure目录重命名为.android_secure目录

5. /data/app-asec目录用途

/Path to external storage where *only root can access ASEC image files*/
const char *Volume::SEC_ASECDIR_EXT = “/mnt/secure/asec”;
/Path to internal storage where *only root can access ASEC image files*/
const char *Volume::SEC_ASECDIR_INT = “/data/app-asec”;
/mnt/secure/asec对应外置sd卡上的.android_secure目录,
/data/app-asec对应内置sd卡上的.android_secure目录,
该目录下一般用于存放asec文件,Android系统会将这些asec镜像文件挂载到/mnt/asec/com.*

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162114.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号