本文译自:http://developer.android.com/guide/topics/data/install-location.html

从API Level 8开始,你可以允许你的应用程序被安装在外部存储器上(如设备的SD卡)。这是一个可选的功能,你可以用android:installLocation清单属性来声明。如果你没有声明这个属性,你的应用程序只会被安装在内部存储器上,并且它不可以被转移到外部存储器。

要允许系统把你的应用程序安装在外部存储器上,就要在清单文件的<manifest>元素中包含android:installLocation属性,并把该属性值设置为“preferExternal”或“auto”。例如:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

android:installLocation="preferExternal"

... >

如果你声明的属性值是“preferExternal”,就会要求你的应用程序被安装在外部存储器上,但是系统不会保证你的应用程序一定会被安装在外部存储器上。如果外部存储器已满,那么系统会把它安装在内部存储器上。用户也可以在这两个位置之间移动你的应用程序。

如果你声明的属性值是“auto”,就说明你的应用程序可以被安装在外部存储器上,但你没有安装位置的偏好。系统会基于几个要素来决定你的应用程序安装到那儿。用户也可以在这两个位置之间来移动你的应用程序。

当你的应用程序被安装在外部存储器时:

当你的应用程序被安装在外部存储器上时:

1.挂载在设备上的外部存储器不会影响应用程序的性能。

2..apk文件被保存在外部存储器上,但是所有私有的用户数据、数据库、被优化的.dex文件以及提取的原生代码都会保存在内部的设备存储器中。

3.在你的应用程序的唯一的容器中保存着一个随机生成的密钥,它只可以在初始安装它的设备上被解密。这样安装在SD卡上的应用程序就只能在一个设备上工作了。

4.通过系统设置,用户可以把你的应用程序移动到内部存储器上。

警告:当用户启用USB存储器来跟计算机共享文件或通过系统设置卸载SD卡时,外部存储器会从设备上被卸载,并且所有的正在运行的外部存储器上的应用程序都会被立即杀死。

向后兼容

把你的应用程序安装在外部存储器上能力,只有在运行API Level 8(Android2.2)以上版本的设备上才有效。既存的创建与API Level 8之前应用程序会始终安装在内部存储器上,并且不能被转移到外部存储器上(即使是在API Level 8的设备上)。

但是,如果你的应用程序被设计成要支持API Level 8以前的版本,你可以选择让这些功能支持API Level 8以上的版本,并且依然兼容API Level 8以前的版本。

以下是允许应用程序安装在外部存储器上,同时保持跟API Level 8以前版本兼容的方法:

1.在<manifest>元素中包含带有“auto”或“preferExternal”值的android:installLocation属性。

2.保留android:minSdkVersion属性,确保该属性值是你的应用程序要兼容的那个API等级。

3.为了编译你的应用程序,把你的编译目标改变到API Level 8。这是必须的,因为较旧的Android类库不理解android:installLocation属性,所以在这个属性存在的时候不会编译你的应用程序。

当你的应用程序被安装在API Level 8以前版本的设备上时,android:installLocation属性会被忽略,并且该应用程序会被安装在内部存储器上。

注意:尽管像这样的XML标记会被较旧的平台所忽略,但是你要注意在minSdkVersion属性值比8小时,不要使用在API Level 8以前引入的编程API,除非你要执行一些必要的工作,以便让代码提供向后兼容性。

更多相关文章

  1. Android(安卓)Toolbar 使用总结
  2. Android(安卓)Weekly - 第 184 期
  3. Android学习笔记:布局
  4. android中隐藏ListView滚动条
  5. 动画专题研究 一
  6. Android(安卓)context 和 getApplicationContext()
  7. android 开发之Action Bar 详解
  8. Android(安卓)structure
  9. Android(安卓)TextInputLayout,打造 Material Design 风格的文本

随机推荐

  1. android 自定义圆形的ImageView
  2. android版本与API对应关系
  3. android SearchView 失去焦点
  4. android DrawerLayout 点击穿透、点击自
  5. Android Gradle Plugin与Gradle 版本对应
  6. gridview第一行与顶端有一定的距离
  7. Android百度地图一种简单实现多标注及响
  8. Android定制之常见问题解决
  9. ListView去除分割线的问题
  10. Android(安卓)studio 实现简单的视频播放