现在的位置: 首页 > 综合 > 正文

Android应用程序的安装位置(一)

2018年03月31日 ⁄ 综合 ⁄ 共 1709字 ⁄ 字号 评论关闭

本文转自:http://blog.csdn.net/fireofstar/article/details/8491368?reload

本文译自: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,除非你要执行一些必要的工作,以便让代码提供向后兼容性。

抱歉!评论已关闭.