背景:

新需求:APK能安装在外部存储器设备(TF卡或U盘)的功能区。

Android软件结构:

Android关于安装APK外部存储设备

App:

1)APP的AndroidManifest.xml中android:installLocation的数值为"preferExternal","auto","internalOnly".其中"preferExternal"把该app安装到"外部存储"

2)Settings

APK或者其他系统应用,调用boolean setInstallLocation(int loc)设置:app安装到"外部存储"

3)在安装程序中,调用的installPackageWithVerificationAndEncryption()中flag,添加PackageManager.INSTALL_EXTERNAL。app安装到"外部存储"。

注:1)"外部存储"在这里可能是内置SD卡,也可能是外置SD卡;2)部分APK不能被安装”外部存储”,则会返回Error

PackageManagerService:

1)安装Apk,处理“外部存储”等信息

2)其中内部类AsecInstallArgs通过PackageHelper,调用MouthService操作将“外部存储”与”/mnt/asec”相关内容。

MountService:

1)调用VOLD中内容,对/mnt/asec相关进行处理(及安装apk的目录的新建,mount等)

VOLD:

2)通过device

mapper将/mnt/asec/内的APP目录映射成了ext4设备:/dev/block/dm-0

Android原生“App安装到外部存储”的功能,实际上是安装/dev/block/dm相关的设备上,链接(SEC_ASECDIR_EXT= "/mnt/secure/asec")。

3)外置SD插上时,将相关路径(SEC_ASECDIR_EXT= "/mnt/secure/asec")mount到外置SD存储空间或内置SD

现有方案:

目前代码已存在相关方案:在Settings选择”Default storage equipment”为外部存储区的时候,若在安装时候,PMS收到的消息安装信息中包含PackageManager.INSTALL_EXTERNAL,并APP。则将APP安装到外部存储区。

验证操作如下:

1)插入SD卡

2)将/system/build.prop中修改“ro.defaultStorage.enable=false”为”ro.defaultStorage.enable=true”

3)进入“Settings” ->”Default storage

equipment” ,然后选外置存储设备

4)adb install –s apk路径(例如:adb install –s testExample.apk)

5)查看/mnt/asec/是否存在安装apk的相关信息,查看/dev/block/dm相关设备节点是否存在,使用df命令查看外置SD卡的空间是否发生变化

需要对现有方案修改的点:

1)在packagemanagerservice中,添加判断条件,赋值flagPackageManager.INSTALL_EXTERNAL。或者其他方式,设置安装Apk为外部存储区域

整体方案风险:

1.因为对现网的盒子进行处理,所以必须考虑版本升级带来的问题。例如:升级后,data/app的原有aok是否能正常启动;升级后,再对/data/app/的缘由Apk进行升级,是否存在问题;

2.所有APK是否能安装成功。

3.在Apk使用过程中,若热插拔外部存储区(如:插拔SD),APK是否能导致整体系统出现异常;APK热插拔后,能否正常使用;插拔后,再次安装相同APK,能否安装成功。

4.外置存储区只能同事支持一个,中途修改外置存储位置将导致之前外置存储安装应用无法识别。

5.添加外置存储后会影响开机速度,而且和开机优化有冲突,建议关闭。

更多相关文章

  1. Android四大基本组件介绍与生命周期
  2. Android(安卓)Spinner
  3. 在本地UI使用webview,在html页面用js与android通信方法。
  4. android中的onInterceptTouchEvent和onTouchEvent
  5. android实用小工具
  6. eclipse 开发android 配置
  7. Android获取用户已安装app列表
  8. Android(安卓)Service AIDL 远程调用服务之简单音乐播放实例
  9. Android中WebView使用html,且实现android和JS的互相调用

随机推荐

  1. Android中关于线程使用的几点注意事项
  2. Android相对布局实现各种梅花效果
  3. Android优秀学习资源列表
  4. Android应用程序核心-应用程序的基本组件
  5. Android中的几种网络请求方式详解
  6. Ubuntu下android源码下载与编译
  7. Android的多媒体框架OpenCore(PacketVideo
  8. 【Android】Android(安卓)监听apk安装替
  9. Android中关于线程使用的几点注意事项
  10. Android(安卓)TextView实现滚动跑马灯效