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

Android APK应用安装位置选择与对Widget的影响

 
阅读更多

以下文字转自 http://www.androidzz.com/2011/08/android-sd-app2sd/

 

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——意味着此应用程序可能安装到扩展存储,但是对安装位置没有特别偏好,将有系统根据自身算法,参考很多因素之后决定将此应用程序安装到哪里。

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上。

 

 

--------------------------引文结束---------------------------------------

 

总结:

1. Android 2.2(API 8) 以后,manifest支持android:installLocation属性, 值范围 为internalOnly,perferExternal,auto

 

2. 要兼容Android 2.1及以前的版本,将程序的build target改为API Level 8,manifest的andorid:minSdkVersion 还可以保持为原来的值。这样,API 8以下的android设备将忽略

android:installLocation属性,  API  8以上的设备将支持android:installLocation属性。

 

3. 应用程序如有widget,则安装至sd卡后,widget将不会在home screen的widget list里显示出来,如移动至sd卡,则已显示的widget会被删除。 如果想让widget一直能用,则需将应用程序的安装位置设置为 android:installLocation = internalOnly

 

 

分享到:
评论

相关推荐

    Android的widget使用listview布局

    在Android开发中,Widget是应用在主屏幕上的小型UI组件,它们可以提供用户与应用程序的交互,无需打开应用本身。ListView是一种常用的布局管理器,它允许用户在一个滚动列表中显示大量数据。本教程将深入探讨如何在...

    Android APK 6

    在Android平台上,APK文件是应用安装包的格式,相当于iOS中的IPA文件。"Android APK 6"这个标题可能指的是一个包含多个不同Android应用程序的压缩包集合,版本号6可能代表这是该系列的第六个版本或者是包含了6个主题...

    JEB.android_apk_decompiler.zip

    通过不断的实践和研究,你可以逐步提升对APK逆向工程的理解,从而在应用安全、漏洞发现或恶意软件分析等领域发挥重要作用。 总的来说,JEB是Android逆向工程师的得力助手,它以其全面的功能和强大的分析能力,使得...

    android 桌面控件appwidget

    这个Activity通常会启动一个Intent,让用户选择AppWidget的大小和位置。 6. **测试和发布**:使用Android Studio的AVD管理器或实际设备进行测试,确保AppWidget正常工作。然后,打包应用并发布到Google Play或其他...

    Android App Widget 开发

    Android App Widget是Android系统提供的一种轻量级的UI组件,允许开发者在用户的主屏幕上放置一些交互式的快捷方式或小部件,提供类似于桌面小工具的功能。这些小部件可以显示实时信息,如天气、日历事件、音乐播放...

    Android AppWidget实例验证

    对于AppWidget,我们需要在这里声明我们的BroadcastReceiver,它是处理AppWidget与用户交互的主要组件。例如: ```xml <receiver android:name=".AppWidgetProvider"> <action android:name="android.appwidget....

    Android应用源码之Android小部件AppWidget.zip

    Android小部件(AppWidget)是Android系统提供的一种特殊类型的用户界面组件,允许开发者在用户的主屏幕上添加可交互的微型应用程序视图。这个压缩包“Android应用源码之Android小部件AppWidget.zip”包含了一个用于...

    android widget简单使用方法

    Android小部件(Widget)是Android系统提供的一种桌面组件,它可以让用户在主屏幕上直接与应用程序进行交互,无需打开应用本身。本教程将详细介绍如何在Android项目中创建和使用一个简单的Widget。 1. **理解...

    Android代码-Android小部件AppWidget.rar

    "JavaApk源码说明.txt"可能是对源码的解释,而"点这里查看更多优质源码~.url"则可能是一个链接,指向更多Android开发资源。通过学习和理解这个压缩包的内容,开发者可以更好地掌握Android小部件的开发技巧,并应用于...

    Android高级应用源码-Android小部件AppWidget.zip

    1. **AppWidget提供者(AppWidget Provider)**:这是Android系统与你的AppWidget交互的组件,定义了AppWidget的行为,如接收广播更新、添加、删除或更新AppWidget等。 2. **布局文件(Layout)**:定义了AppWidget...

    AndroidStudio简单实现单击Widget打开Activity

    在Android应用开发中,Widget是桌面小部件,它能让用户在主屏幕上与应用程序进行交互,而无需实际打开应用。Android Studio作为官方推荐的集成开发环境(IDE),为开发者提供了便捷的方式来创建和管理Widget。本教程...

    APK权限大选———Android开发必懂知识

    本文将深入探讨Android APK权限的重要性、常见的权限类型及其作用,旨在帮助开发者更好地理解和管理这些权限,同时也让用户能够更加明智地选择安装的应用程序。 #### 一、为什么需要关注APK权限? 在Android系统中...

    APK权限大全_-_Android必懂知识

    `ACCESS_SURFACE_FLINGER`:此权限涉及Android平台底层的图形显示支持,主要用于游戏或照相机预览界面,以及底层模式的屏幕截图,需要谨慎使用,防止对系统稳定性和性能造成负面影响。 #### WiFi状态访问 `ACCESS_...

    android widget初涉

    - Widget有两种实现方式:App Widget(应用Widget)和服务Widget。本文将重点介绍App Widget的实现。 - 首先,需要在项目的`AndroidManifest.xml`文件中注册Widget。添加如下代码: ```xml android:name="....

    android之appwidget(一)简单appwidget

    在Android平台上,AppWidget是系统桌面的一个组成部分,它允许开发者创建小型、静态或动态的应用程序组件,用户可以直接在主屏幕上与这些组件互动,无需打开完整的应用程序。本篇将深入探讨如何开发一个简单的App...

    AndroidWidget电池插件

    在Android平台上,Widget是应用程序提供的一种桌面小部件,它允许用户在主屏幕上放置小型交互式UI元素,以方便快速访问或展示信息。本教程将深入探讨如何创建一个名为"AndroidWidget电池插件"的项目,让用户能通过...

    android 桌面组件 App widget的使用 AppWidgetProvider

    总结来说,App Widget 是 Android 平台上的一种强大工具,它让用户能够更便捷地与应用交互。通过学习并掌握 `AppWidgetProvider` 的使用,开发者可以创建出丰富多样的桌面组件,提升用户体验。在实际开发中,要充分...

    Android appWidget每日一句修正1

    文件列表中的"DailyLearn.apk"很可能是修复后的appWidget应用的安装包,用户可以通过安装这个APK来更新他们的appWidget。而"DailyLearn"可能是源代码或者资源文件,包含了这次更新的具体实现,包括布局文件、图片...

    android appwidget使用说明及示例程序

    Android AppWidget是Android系统提供的一种轻量级组件,允许开发者在用户的主屏幕上创建小型应用程序,通常称为小部件或快捷方式。这些小部件不需要用户启动应用,就能直接在主屏幕上显示和交互,为用户提供便捷的...

    appWidget启动Activity

    在Android开发中,`appWidget` 是一种可以在用户主屏幕上显示的小部件,它提供了一种无需打开应用程序就能与用户交互的方式。本篇文章将深入探讨如何使用`appWidget`来启动一个`Activity`。 首先,我们需要了解`app...

Global site tag (gtag.js) - Google Analytics