简析android:installLocation

/***************************************************

 * TODO: description .

 * @author: gao_chun

 * @since:  2015-4-1

 * @version: 1.0.0

 * @remark: 转载请注明出处

 **************************************************/

Froyo(android 2.2,API Level:8)中引入了android:installLocation

通过设置该属性可以使得开发者以及用户决定程序的安装位置.

android:installLocation属于AndroidManifest.XML中的manifest节点.如下所示:

[html] view
plain
copy

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2. package="string"
  3. android:sharedUserId="string"
  4. android:sharedUserLabel="string resource"
  5. android:versionCode="integer"
  6. android:versionName="string"
  7. android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
  8. . . .
  9. </manifest>

官方API:

android:installLocation
The default install location for the application.

The following keyword strings are accepted:

Value Description
"internalOnly" The application must be installed on the internal device storage only. If this is set, the application will never be installed on the external storage. If the internal storage is full, then the system will not install the application. This is also the default
behavior if you do not define android:installLocation.
"auto" The application may be installed on the external storage, but the system will install the application on the internal storage by default. If the internal storage is full, then the system will install it on the external storage. Once installed, the user
can move the application to either internal or external storage through the system settings.
"preferExternal" The application prefers to be installed on the external storage (SD card). There is no guarantee that the system will honor this request. The application might be installed on internal storage if the external media is unavailable or full, or if the application
uses the forward-locking mechanism (not supported on external storage). Once installed, the user can move the application to either internal or external storage through the system settings.

android:installLocation可以设置为"auto"、"internalOnly"、"preferExternal"三个值中的任何一个.

  auto:程序可能被安装在外部存储介质上(例如:SD Card),但是默认会被安装到手机内存中.当手机内存为空时,程序将被安装到外部存储介质上.当程序安装到手机上后,用户可以决定把程序放在外部储介质还是内存中.

  internalOnly:默认值.当设置为该值时,程序只能被安装在内存中,如果内存为空,则程序将不能成功安装.

  preferExternal:将程序安装在外部存储介质上,但是系统不保证程序一定会被安装到外部存储介质上.当外部存储介质不可以或空时,程序将被安装到内存中.程序使用了forward-locking机制时也将被安装到内存中,因为外部存储不支持此机制.程序安装后,用户可以自由切换程序应该在外部还是内部存储介质上.

注意:当程序使用了Google Play的Copy Protection特性时,只能安装到内存中.

当程序被安装到外部存储介质时,

.apk文件将被移动到外部存储介质上,但是程序的数据仍然会在内存中

保存.apk文件的容器将会使用一个随机生成的密钥进行加密,这样只有安装该程序的设置可以使用存在外部存储介质上的数据.

警告:当外部存储介质被卸载时,安装在该外部存储介质上的程序将立刻被终止掉!

向后兼容性:

  声明了android:installLocation,但android:minSdkVersion小于8时,我们使用不低于Froyo的AVD进行编译,这样在低于Froyo的系统中android:installLocation将被忽略,而不低于Froyo的系统中将使用我们指定的android:installLocation.

建议:

当程序具有如下行为时我们不应该将程序安装到外部存储介质上

  ①Service

    正在运行的服务将被终止,当外部存储介质被重新加载时服务不会被重启.

  ②Alarm Service

    闹钟服务将被取消,开发者必须在外部存储介质重新加载后重新注册闹钟服务.

  ③Input Method Engines

    输入法将被换成系统输入法,当外部存储介质被重新加载后用户可以通过系统设置来启动我们的输入法

  ④Live Wallpapers

    我们的动态壁纸将被替换为默认的动态壁纸.外部存储介质重载后,用户可以更换回来.

  ⑤Live Folders

    我们的动态文件夹将被移出.

  ⑥App Widgets

    我们的小部件将被移出,通常只有系统重启后我们的小部件才可用.

  ⑦Account Managers

    使用AccountManager创建的账户将会消失,直至存储介质被重新加载.

  ⑧Sync Adapters

    只有外部存储介质被重新加载时,我们的同步功能才可用

  ⑨Device Administrators

    我们的DeviceAdminReceiver将会失效

  ⑩监听开机结束事件

    系统会在加载外部存储介质之前发送ACTION_BOOT_COMPLETED广播.因此安装在外部存储介质的程序将不能接受开机广播.

通常,只要我们没有使用上述的特性,我们就可以将程序安装到外部存储介质上.例如,大的游戏程序.当APK文件很大时我们应该认真的考虑是否要将程序移动到外部存储介质上以帮助用户节省内存.

时间: 2024-10-18 08:52:35

简析android:installLocation的相关文章

阿里客户端工程师试题简析——Android应用的闪退(crash)分析

1. 问题描述 闪退(Crash)是客户端程序在运行时遭遇无法处理的异常或错误时而退出应用程序的表现,请从crash发生的原因分类与解决方法.在出现crash后如何捕捉并分析异常这两个问题给出自己的解决方案. 我们以Android平台为例,介绍下如何捕获Android应用的闪退信息,以帮助我们定位和解决导致闪退的问题代码. 2. Android中的闪退 在讲解Android中的闪退之前,我们先来简单的复习下Java中的异常. (1)Java中的异常 Java中的异常层次结构如下图所示: 我们可以

Volley网络请求框架简析——Android网络请求框架(三)

题记-- 人来到这个世界上,只有两件事情,生与死, 一件事完了,另一件事还急什么? 有缘而来,无缘而去, 识自本心,见自本性 不起妄缘,无心无为 自由自在,动静自如 冷暖自知,则是修行 1.初始化一个消息请求队列以及网络请求工具类对象 /** * Created by androidlongs on 16/7/1. * 网络请求访问框架 */ public class VollyRequestUtils { /** * Volley框架使用工具类对象 */ private static Voll

简析Android 兼容性测试框架CTS使用

一.什么是兼容性测试? 1)为用户提供最好的用户体验,让更多高质量的APP可以顺利的运行在此平台上 2)让程序员能为此平台写更多的高质量的应用程序 3)可以更好的利用Android应用市场 二.CTS覆盖领域 1)签名测试:针对每个Android正式版,都将附带一系列XML文档对所有的公共API签名进行描述.CTS将检查这些签名是否适用于该设备,并保存其结果. 2)平台API测试:测试SDK中平台核心库和Android应用程序框架的API是否正确 3)Dalvik虚拟机测试:集中测试Dalvik

简析android消息模型

android总结系列 一.消息系统构成要素和基本原理 l  消息队列 l  发送消息 l  消息读取 l  消息分发 l  消息循环线程 消息系统必须要依赖一个消息循环线程来轮询自己的消息队列,如果有消息进来,就调用消息处理函数,根据消息类型及其参数来作相应的处理.消息系统要运作起来,必定有消息的产生和消费.暂且把产生消息的线程叫做生产者线程,把消费消息的线程叫做消费者线程.生产者线程将消息发送到消息队列,消费者线程从消息队列中取出消息进行相应处理.当消息队列没有消息时,消费者线程便进入挂起状

简析Android中LruCache缓存类

/***************************************************  * TODO: description .  * @author: gao_chun  * @since:  2015-4-7  * @version: 1.0.0  * @remark: 转载请注明出处  **************************************************/ 内存缓存技术对那些大量占用应用程序宝贵内存的图片提供了快速访问的方法.其中最核心

android:installLocation简析

在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置. android:installLocation隶属于AndroidManifest.XML中的manifest节点.如下所示: <manifest xmlns:android="http://schemas.android.com/apk/res/android"          package=&quo

Android WebView远程代码执行漏洞简析

0x00 本文参考Android WebView 远程代码执行漏洞简析.代码地址为,https://github.com/jltxgcy/AppVulnerability/tree/master/WebViewFileDemo.下面我们分析代码. 0x01 首先列出项目工程目录: MainActivity.java的代码如下: public class MainActivity extends Activity { private WebView webView; private Uri mUr

Android菜单简析02(ContextMenu)

在上一篇文章 Android 菜单简析01(OptionsMenu) 中给大家介绍了OptionsMenu 的使用,这篇接着给大家介绍下ContextMenu 的用法. ContextMenu 简称上下文菜单,通过长按事件响应,有两种响应模式 浮动模式 效果类似弹出的 Dialog,在屏幕的正中央,可以自定义显示的 Menu 以及 MenuItem 的响应 动作模式 通过ActionBar 实现,效果实在 Title 的地方,出现动作条. 特别注意 ContextMenu 的 动作模式 在 An

Android -- MediaPlayer内部实现简析

Android -- MediaPlayer内部实现简析 在之前的博客中,已经介绍了使用MediaPlayer时要注意的内容.现在,这里就通过一个MediaPlayer代码实例,来进一步分析MediaPlayer内部是如何运作.实现的:当然这里的分析只截止到底层调用播放器之前,因为播放器这块实在是没搞懂. 我们使用的例子来源于之前MediaPlayer Playback译文中的官方实例: String url = "http://........"; // your URL here