android:installLocation简析

介绍了Android Froyo版本中引入的android:installLocation属性,它允许开发者和用户选择应用程序的安装位置,包括内部存储和外部存储。详细解释了auto、internalOnly及preferExternal三种设置的区别及其对不同类型应用的影响。

在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="string"
         
android:sharedUserId="string"
         
android:sharedUserLabel="string resource"
         
android:versionCode="integer"
         
android:versionName="string"
         
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    . . .
</manifest>
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文件有几M大时我们应该认真的考虑是否要将程序移动到外部存储介质上以帮助用户节省内存.
<think>好的,我需要帮助用户修改AndroidManifest.xml中的installLocation和屏幕支持配置。首先,我得确认用户提到的两个配置的具体位置和用法。关于installLocation,我记得它属于<manifest>标签的属性,用来指定应用安装的位置,比如内部存储或外部存储。根据引用[3],installLocation的可能值有auto、internalOnly和preferExternal。用户需要修改这个属性,可能需要指导他们在<manifest>标签中添加或修改该属性。然后是屏幕支持配置,用户提到了screen支持的配置。根据引用[1],<supports-screens>标签用于声明应用支持的屏幕尺寸,比如smallScreens、normalScreens等。每个属性可以设置为true或false。需要告诉用户如何在AndroidManifest中添加这个标签,并设置对应的属性。接下来,我需要检查用户提供的引用内容是否准确。引用[1]确实提到了<supports-screens>的相关属性,而引用[3]展示了<manifest>标签中的installLocation属性。这些引用是正确的,可以用来支持回答。 然后,我需要确保回答的结构清晰,分步骤说明如何修改这两个配置。可能需要用代码块展示具体的XML代码,并解释每个属性的含义和可选值。同时,要提醒用户注意事项,比如installLocation在API Level8之后才支持,或者屏幕配置的默认值可能带来的影响。最后,生成相关问题,帮助用户进一步了解相关配置,比如兼容不同屏幕尺寸的方法,或安装位置选择的注意事项。这样用户如果有其他疑问,可以继续深入探讨。现在,将这些思考整理成步骤清晰的回答,确保引用正确,语法正确,并使用中文自然表达。</think>在AndroidManifest.xml中修改`installLocation`和屏幕支持配置的操作步骤如下: ### 一、修改应用安装位置(installLocation) 在`<manifest>`根节点添加以下属性: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" ...> ``` 可选值说明: - `auto`:允许系统决定安装位置 - `internalOnly`:强制安装在内部存储(默认值) - `preferExternal`:优先安装在外部存储[^3] > *注意:该属性仅适用于API Level 8(Android 2.2)及以上版本* ### 二、配置屏幕支持参数 在`<application>`标签同级位置添加: ```xml <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="false" android:anyDensity="true"/> ``` 参数说明: - `smallScreens`:支持小屏幕设备(如QVGA) - `largeScreens`:支持大屏幕设备(如平板) - `anyDensity`:自动适配不同屏幕密度[^1] ### 三、完整配置示例 ```xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.app" android:installLocation="preferExternal" android:versionCode="1" android:versionName="1.0"> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="false"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <!-- 组件声明 --> </application> </manifest> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值