`
ljl_xyf
  • 浏览: 636675 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何在开发时可以让Android应用程序支持安装到SD卡

阅读更多

Android系统在2.1版本之前,应用程序是只能安装到机身内存(RAM)中,这一特性从某种角度上讲,阻止了Android的发展,因为RAM的空间是有限的,所以这一特性限制了应用程序的体积,也就限制了应用程序的功能。

  自从Android 2.2版本开始,Android系统引入了一个全新的功能——APP2SD,这个功能让Android系统允许将应用程序安装到SD卡上面,一方面节约出更多的RAM空间,另一方面也允许应用程序扩大自身的体积。

  但是仅仅Android系统支持APP2SD,这样还是不够的,应用程序如果不经过处理,仍然会一如既往的转进RAM里。这是因为Android系统保持向后兼容的特性。那么,如果让应用程序不装入RAM,而是装入SD卡呢?这需要在应用程序的Android清单文件manifest.xml的manifest元素里加入android:installLocation属性。其值为:perferExtenal或auto。

    perferExtental——意味着此应用程序安装到扩展存储(通常就是SD卡),但是系统不能保证应用肯定会安装到扩展存储。如果扩展存储没有空间或者不可用,那么系统仍然会将应用程序安装到RAM里。

    auto——意味着此应用程序可能安装到扩展存储,但是对安装位置没有特别偏好,将有系统根据自身算法,参考很多因素之后决定将此应用程序安装到哪里。(http://www.my400800.cn )

    internalOnly——意味着此应用程序只能被安装到RAM。



  一旦加入android:installLocation,不论其值为什么,用户都可以将应用程序在RAM和SD卡之间自由移动。当应用程序安装到SD卡后,需要注意以下几点:

    1. 仅apk文件保存在SD卡上,其他所有用户的私有数据、数据库、经过优化的dex文件和释放的原生代码仍然保存在RAM上。

    2. SD卡里的应用程序在进行安装时会被加密,因此安装在SD卡上的应用程序仅对安装这个应用程序的设备起效,在其他设备上将不能运行。

    3. 当用户启用USB大容量存储以共享文件给计算机、或者卸载SD卡,那么所有安装在SD卡上的应用都会被立即结束。



  由于安装在SD卡上的应用程序会受到SD卡状态的影响,所以为了确保应用程序的健壮性,在决定应用程序是否可以安装在SD卡上时,应该做到以下原则:

    1. 有后台服务(Service)的应用程序,不应该支持APP2SD上。因为Service是前台界面不可见的,在卸载SD卡或者启用USB时,用户并无法知道该应用程序的Service是否处于活动状态。所以可能造成Service的意外终止。

    2. 输入法程序不应该支持APP2SD。如果卸载SD或者启用USB,那么该输入法将被终止,并由系统默认输入法所替代。

    3. 壁纸和包含桌面小工具(Widget)等常显于界面的应用程序不应该支持APP2SD。

    4. AccountManager等与用户数据有关的应用程序不应该支持APP2SD,因为在SD卡正常挂载之前,程序都无法看到通过AccountManager创建的用户。



  如果应用程序有Service、或支持桌面小工具等以上提到的功能时,应该尽可能避免被安装到SD卡上。一种保险的做法是指定android:installLocation的值为internalOnly。

  由于APP2SD是Android 2.2版本的新特性,如果该应用程序被计划支持2.2之前的版本,做到向后兼容的话,那么需要进行以下步骤:

    1. 在manifest元素里加入android:installLocation属性,并指定其值为perferExternal或者auto。

    2. 指定andorid:minSdkVersion值,其值可以小于8(2.2版本之前)。

    3. 更改该应用程序的build target为API Level 8,以使编译器能编译此应用程序。(必须)如果不指定build target,那么旧的Android库将无法理解android:installLocation属性,也就无法编译此应用。



  实现以上三个步骤之后,那么如果此应用被安装到API Level低于8的设备上时,android:installLocation属性将被忽略。并且该应用会被安装于RAM上。

分享到:
评论

相关推荐

    Android应用源码之开发之 SD卡的使用.zip

    在Android应用开发中,SD卡(Secure Digital Card)的使用是一项重要的存储管理技能。随着智能手机存储需求的增长,开发者经常需要利用SD卡来扩展应用程序的存储空间,存储用户数据、媒体文件或其他大型资源。本篇...

    Android移动应用开发实验指导书

    - 可以将数据存储到应用的私有目录或SD卡上。 - **ContentProvider:** - 用于实现不同应用间的数据共享。 #### 实验八:位置服务与地图应用 **知识点概述:** 本章节重点介绍了如何集成Google Maps API以及获取...

    Android开发WebView获取SD卡图片并显示

    在Android应用开发中,WebView是一个非常重要的组件,它允许开发者在应用程序内嵌入网页内容,实现类似浏览器的功能。本文将详细讲解如何在Android的WebView中加载并显示SD卡上的图片,以及如何解决自Android 4.4...

    Android 开发之 SD卡的使用.zip

    在Android开发中,SD卡(Secure Digital Card)的使用是一个重要的环节,特别是在处理大量数据、媒体文件或扩展应用程序存储时。本项目源码提供了一种实际应用中的示例,帮助开发者理解和掌握Android如何与外部存储...

    Android移动应用开发(第3版)卷Ⅰ基础篇.pdf

    - **Android SDK**:软件开发包,包含了开发Android应用所需的库文件和工具。 - **JDK**:Java开发工具包,因为Android应用主要使用Java语言编写。 #### 2. 环境配置步骤 1. **安装JDK**:确保系统已安装最新版本的...

    分析Android系统移植和应用程序开发.pdf

    在开发Android应用程序时,开发人员需要使用到Android SDK (软件开发工具包),并且要熟悉Java语言,因为Android应用通常是用Java编写的。开发者需要了解Android的生命周期、如何管理用户界面以及如何使用Android提供...

    [Android应用开发实战]

    ### Android应用开发实战知识点概述 #### 一、Android平台简介 Android是由Google公司主导开发的移动操作系统,基于Linux内核,适用于智能手机、平板电脑等多种移动设备。自2008年发布以来,Android已经成为全球最...

    Android应用源码之判断双SD卡_CheckDoubleSDCard.zip

    "Android应用源码之判断双SD卡_CheckDoubleSDCard.zip"这个压缩包提供了关于如何在Android应用程序中检测设备是否拥有双SD卡的功能。这个源码可以帮助开发者更好地理解和实现对存储设备的管理,以优化用户数据存储...

    Android应用源码之开发之 SD卡的使用-IT计算机-毕业设计.zip

    在Android应用开发中,SD卡(Secure Digital Card)的使用是一项重要的技能,特别是在处理大量数据存储、用户文件管理和资源更新等方面。本项目“Android应用源码之开发之 SD卡的使用”提供了一个学习示例,适合进行...

    《Android应用开发揭秘》附带光盘代码.

     1.1.3 Android应用程序框架  1.2 OMS介绍  1.2.1 OPhone介绍  1.2.2 Widget介绍  1.3 小结  第2章 Android开发环境搭建  2.1 Android开发准备工作  2.2 开发包及其工具的安装和  配置  2.2.1 安装JDK和...

    Android应用程序开发中安全性设计的研究.pdf

    在研究Android应用程序开发过程中,安全性设计始终是一个核心主题。Android平台默认提供了很多安全机制,这使得开发者在进行应用开发时可以不必过多关注安全问题。但是,为了更全面地保障应用与用户的安全,本文将...

    android 下载文件到SD卡

    本教程主要介绍如何在Android应用中实现网络文件的下载并保存到SD卡。 1. **Android权限设置** 在AndroidManifest.xml文件中,你需要添加写入外部存储的权限: ```xml <uses-permission android:name="android....

    VM虚拟机安装Android_2.2和设置虚拟SD卡

    在本文中,我们将详细探讨如何在VM虚拟机上安装Android 2.2并配置虚拟SD卡。VMware(VM)虚拟机是一款...然而,如果你计划进行现代应用程序的开发或测试,建议使用更新的Android版本,因为新版本支持更多的特性和服务。

    Android App调用没有安装的apk

    - 将插件APK的.dex文件提取到内存或存储中,如SD卡。 - 创建自定义的ClassLoader,指定 dex 文件的位置。 - 使用ClassLoader加载插件的类,并通过反射调用其方法。 4. **安全与权限管理**:由于插件apk无需安装...

    android中复制资源文件中的数据库文件到sd卡或内存源码

    在Android开发中,有时我们需要将预置的数据库文件与应用一起发布,并在应用程序首次启动时将其复制到外部存储(如SD卡)或内部存储(内存)中,以便于后续的操作和使用。这样的需求通常出现在那些需要提供初始数据...

    《Android应用开发揭秘》源码

     1.1.3 Android应用程序框架  1.2 OMS介绍  1.2.1 OPhone介绍  1.2.2 Widget介绍  1.3 小结  第2章 Android开发环境搭建  2.1 Android开发准备工作  2.2 开发包及其工具的安装和配置  2.2.1 安装JDK和配置...

    Android写LOG日志到SD卡文件之microlog4android使用

    在Android开发中,记录日志是一项非常重要的任务,它能够帮助开发者追踪应用程序的运行状态,定位和解决问题。本文将深入探讨如何使用microlog4android库将日志信息写入到SD卡上的文件,以实现更灵活的日志管理。 ...

    收集程序崩溃日志到SD卡

    "收集程序崩溃日志到SD卡"这个Demo就是这样一个实用工具,它演示了如何在Android应用发生错误时,自动将崩溃日志保存到设备的外部存储(通常是SD卡)上,以便后续分析。 首先,我们需要理解Android的日志系统。...

    基于Android的多媒体应用开发.pdf

    首先对 Android 的系统架构进行了简要的概述,随后在此基础上对 Android 应用程序的特点及开发组件分别进行了介绍,最后通过设计实现一个音乐播放器对 Android 多媒体应用程序开发方法进行了说明演示。 该设计实现...

Global site tag (gtag.js) - Google Analytics