App Install Location

与API级别8开始,你可以允许外部存储(例如,在设备的SD卡)安装了应用程序。这是一项可选功能,您可以声明要与Android应用程序:的installLocation的属性。如果你不声明这个属性,应用程序将只在内部存储安装,它不能移动到外部存储。


为了让系统在外部存储安装应用程序,修改清单文件中包括了Android:在<manifest>元素的installLocation属性,无论是用“preferExternal”的值或“自动”。 例如:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    android:installLocation="preferExternal"    ... >
如果申报“preferExternal”,就要求你的应用程序的外部存储安装,但系统并不能保证你的申请将在外部存储安装。如果外部存储满时,系统将在内部存储安装。用户还可以将两个位置之间的应用程序。


如果声明“自动”,则表明您的应用程序可能在外部存储进行安装,但您不必安装位置的偏好。该系统将自行决定基于几个因素来安装应用程序。用户还可以将两个位置之间的应用程序。


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


上有应用程序的性能,只要外部存储设备安装在该装置上没有影响。
该.apk文件保存在外部存储,但所有用户的私人数据,数据库,优化的.dex文件,并提取本地代码被保存在内部设备内存。
在其中应用程序被存储在唯一的容器进行加密,只能通过最初安装它的设备被解密一个随机产生的密钥。因此,安装在SD卡上的应用程序适用于只有一台设备。
用户可以通过系统设定应用程序移动到内部储存空间。
警告:当用户启用USB海量存储与计算机共享文件或通过系统设置卸载SD卡,外部存储是从设备卸载和外部存储上运行的所有应用程序会立即死亡。


向后兼容性


安装在外部存储的能力,为您的应用程序仅适用于运行API等级8(Android 2.2的)或更高版本的设备的功能。这是一组API级别8之前,总是会在内部存储安装并不能移动到外部存储(即使在设备与API等级8)的现有应用程序。但是,如果你的应用程序被设计为支持低于8的API级别,可以选择支持此功能与API级别8或更高版本的设备,仍然与使用API​​级别低于8的设备兼容。


为了让外部存储设备,并保持比API级别低8版本兼容:


包括机器人:以“自动”或“preferExternal”中的<清单>元素的值的installLocation属性。
留下您的安卓的minSdkVersion属性为是(不是“8”东西少),并确认您的应用程序代码使用的API只与该电平兼容。
为了编译应用程序,更改您的构建目标API级别8.这是必要的,因为较旧的Andr​​oid库不明白了android:属性的installLocation并不会编译应用程序时,它的存在。
当你的应用程序安装与API级别低于8的设备上,在android:属性的installLocation忽略和应用程序被安装在内部存储。


注意:虽然XML标记,如这将由旧平台被忽略,你一定要小心,不要使用,而你的minSdkVersion小于“8”,除非你执行必要的工作,以提供向后兼容性编程API级别8中引入的API你的代码。


应用程序不应该在外部存储安装


当用户启用USB海量存储与他们的电脑共享文件(或以其他方式卸载或删除外部存储),安装在外部存储的任何应用程序和当前正在运行的被杀害。直到海量存储被禁用,外部存储设备重新安装在设备上的系统实际上变成不知道的应用程序。除了杀灭的应用和使其无法给用户,这可以打破某些类型的应用中的更严重的方式。为了让您的应用程序始终像预期的那样,你不应该允许的,如果它使用下列任何功能,由于当外部存储卸载引用后果外部存储器安装了应用程序:


服务
您正在运行的服务会被杀死,当外部存储设备重新安装将无法重新启动。你可以,但是,请注册ACTION_EXTERNAL_APPLICATIONS_AVAILABLE广播意图,这将通知您的应用程序时,安装在外部存储应用已经成为提供给系统一次。此时,就可以重新启动您的服务。
报警服务
您与AlarmManager注册报警将被取消。当外部存储设备重新安装您必须手动重新注册任何警报。
输入法引擎
你的IME将由默认IME被替换。当外部存储设备重新安装时,用户可以打开系统设置再次启用IME。
动态壁纸
运行动态壁纸你将默认动态壁纸更换。当外部存储设备重新安装,用户可以重新选择动态壁纸。
应用小工具
您的应用程序窗口小部件就会从主屏幕中移除。当外部存储设备重新安装,应用程序窗口小部件将无法供用户选择,直到系统重置家庭应用(通常直到重新启动系统)。
客户经理
与创建的AccountManager的帐户将消失,直到外部存储设备重新装入。
同步适配器
您AbstractThreadedSyncAdapter及其所有的同步功能将无法工作,直到外部存储设备重新装入。
设备管理员
您的DeviceAdminReceiver及其所有管理功能将被禁止,其可以具有用于该设备的功能无法预见的后果,外部存储设备重新装入之后可能持续。
广播接收器监听“启动完成”
前外部存储被安装到设备的系统提供了ACTION_BOOT_COMPLETED广播。如果您的应用程序安装在外部存储,它永远不能接受这个广播。
如果应用程序使用任何上面列出的功能,你不应该让你的应用程序安装在外接存储。默认情况下,系统将不允许您的应用程序安装在外接存储,所以你不必担心你的现有应用程序。但是,如果你确信你的应用程序不应该对外部存储进行安装,那么你应该明确这一点通过声明的android:用的installLocation“internalOnly”的值。虽然这不会更改默认行为,它明确指出,应用程序应该只对内部存储进行安装,并作为一个提醒,你和其他开发人员,这个决定已经作出。


,应该在外部存储安装应用程序


简单来说,对外部存储装时任何不使用前一节中列出的功能是安全的。大型游戏是更常见的类型,应该允许外部存储设备的应用程序,因为游戏通常不会在不活动时提供额外的服务。当外部存储变得不可用,游戏过程中被杀死了,不应该有明显的效果时,存储再次可用,并且用户重新启动游戏(假设游戏中的正常活动生命周期中正确地保存其状态)。


如果应用程序需要的APK文件几兆,您应该谨慎考虑是否启用应用程序安装在外接存储,让用户可以在他们的内部存储空间保存。

更多相关文章

  1. (转帖)Android开发者应该如何推广营销自己的应用程序
  2. 狂刷Android范例之4:用代码安装卸载app
  3. Android天下大乱,Google无法一统山河
  4. 安卓热点话题总结性剖析:《Android在多屏幕、多设备上的适配》 |
  5. Android的内存泄漏怎么治-----------MAT使用教程
  6. Android(安卓)10获取设备标识方案探究
  7. Building Your First App(创建你的第一个应用程序)
  8. (20120722)(笔记004)android开发应用程序资源
  9. Android应用程序与SurfaceFlinger服务的关系概述和学习计划 .

随机推荐

  1. Android开发视频教程大总结—23部视频教
  2. 【拿来主义】Android反编译工具
  3. Google手机操作系统Android应用开发入门
  4. Android(安卓)(6.0) 系统启动流程梳理
  5. Android(安卓)数据库简单操作
  6. Android卡片式列表布局
  7. 2018-03-08(Android四大启动模式)
  8. Android用户界面 UI组件--TextView及其子
  9. 理解 Android(安卓)消息机制
  10. Android(安卓)的消息队列模型