在 Android sdk 2.2 中在 SD 卡上安装应用程序
Posted
技术标签:
【中文标题】在 Android sdk 2.2 中在 SD 卡上安装应用程序【英文标题】:Installing application on SD-card in Android sdk 2.2 【发布时间】:2011-04-04 19:12:03 【问题描述】:自过去 2 周以来,我一直面临这个问题并正在寻找解决方案。
现在我已经为客户端开发了一个 android 应用程序,其大小为 54 MB,其中只有 52 MB 的图像/照片。
[编辑:我需要将图像保存在“可绘制”文件夹中]
所以我想将它安装在 Android SDK 2.2 的 sd 卡中,因为我已经在 AndroidManifest.xml 文件中设置了android:installLocation="preferExternal"
。我在创建 avd 时创建了 256MB sd-card,heap size - 192,ram size - 192
但它仍然显示错误:
[2010-08-27 17:58:28 - demo_test] 上传 demo_test.apk 失败 设备“模拟器-5554” [2010-08-27 17:58:28 - demo_test] java.io.IOException:无法上传 文件:设备上没有剩余空间 [2010-08-27 17:58:28 - demo_test] 发射已取消!
编辑:
-
这是内存相关问题还是内存问题?
我必须做什么才能运行应用程序并仍然使用模拟器进行测试?
如何在 Android sdk 2.2 的 sd-card 中安装应用程序?
【问题讨论】:
我已经为“内存相关问题”上传了模拟器图片 请帮帮我...自过去两周以来,我一直在寻找此问题的解决方案..所以请 来吧,你来这里已经有一段时间了;请学习更好地格式化您的问题!毫无疑问,它将帮助您获得更多关注和答案。 为什么图片需要保存在“drawable”文件夹中?即使它们在 SD 卡上,您也可以同样访问它们。您不会获得自动“R”链接,但有一些方法可以从文件中提取可绘制对象。 @Drew 很抱歉回复晚了,当时正在度假,但是无论下载该应用程序,我如何给应用程序提供图像 【参考方案1】:SD卡大小真的是256MB吗?我有时会忘记后缀,最后得到.. 一些非常小的东西。
您也可以随时将大小提高到 512、256,266 等,然后再次尝试确定它是其他的。
另外,Logcat 的输出也会很好。
编辑:看起来,您不能只是在 SD 卡上“安装”应用程序,即使您有 30+GB 的免费空间。即使在 2.2 中,安装也取决于手机的内存。
示例:Nexus one 有 512mb 内存。 android 操作系统为摄像头、gpu、内核等占用了所需的内存,用户只有大约 190MB 的应用程序空间(由于已经安装了应用程序等,这个空间会更低)。
另一方面,HTC Hero 只有 288mb 的内存,留给它的“应用程序大小的内存”非常小。
根据手机的不同,90mb 的应用程序会安装到 nexus one 上的 SD 卡上,但由于内存限制,不会安装到 Hero 上。
您收到该错误的原因是,在 android 操作系统从 192MB 中取出所需的 ram 后,“应用程序大小 ram”不足以容纳 50+mb 的应用程序。
我以为 installLocation 会直接安装到 SD,但事实并非如此。
Vidar Vestnes blog 通过在他的 HTC Desire 上使用不同大小的应用程序进行测试,证实了我上面描述的内容..
【讨论】:
@Milan thanx 的答案...刚才我检查了“logcat”,但 logcat 没有显示错误 @Milan thanx 提供了非常棒的帮助信息..但我也用 2.2 创建了模拟器,但仍然出现上述错误 我上面解释的是它在 2.2 平台上是如何工作的。也就是说,没有办法在内存那么大的手机上安装该应用程序。 @Milan 请阅读我已经明确提到的这句话 android:installLocation="preferExternal" 这意味着我想在 sd 卡中安装应用程序 对不起,我不知道是我解释不好还是你不理解我的解释方式。使用 android:installLocation="preferExternal" 手机不会忽略我的帖子和 Vidars 博客中解释的内存限制。这意味着无论您做什么,目前截至 2010 年 8 月,您都无法在 SD 卡上安装该应用程序,因为 android 不允许您这样做。【参考方案2】:你可以检查一下sd卡是否真的挂载了,运行时是否有足够的空间
adb shell df
android-sdk/tools 目录下的命令 它会显示当前挂载了哪些分区、它们有多大以及有多少可用空间
【讨论】:
/dev:总共 95764K,已使用 0K,可用 95764K(块大小 4096) /mnt/asec:总共 95764K,已使用 0K,可用 95764K(块大小 4096) /system:总共 77568K,已使用 77568K , 0K 可用(块大小 4096)/数据:总共 65536K,使用 21112K,可用 44424K(块大小 4096)/缓存:总共 65536K,使用 1156K,可用 64380K(块大小 4096)/mnt/sdcard:总共 258064K,使用 1K , 258062K 可用(块大小 512)/mnt/secure/asec:总共 258064K,已用 1K,258062K 可用(块大小 512)【参考方案3】:我建议您尝试增加可用的内部内存(屏幕截图显示为 43MB),以防 .apk 在被操作系统安装到 SD 卡之前先被复制到那里。
【讨论】:
在将 .apk 移动到 SD 卡之前,您需要足够的内部空间来加载 .apk。请增加模拟器的内存。 Gorge @Chris324 如何增加内存?? Gorge @Chris324 是的,你们是对的,但是假设我增加了模拟器的内存并成功在模拟器上运行它,那么内存增量呢?是否可以增加手机内存的大小?【参考方案4】:更好的方法是将您的资源放在 SD 卡上自己的目录中。然后您的应用可以在需要时加载它们。
【讨论】:
我支持这个。分发一个充满图像的 52MB .apk 是不可行的 @T3Road 我需要将图像保存在“可绘制”文件夹中..不能将它们放入 SD 卡中..感谢答案【参考方案5】:假设您需要设备上而不是云端上的图像,最简单的方法是让应用连接到您的服务器并在首次运行时下载包含所有图像的 zip。在设备获得更大的“应用内存大小”之前,这可能是您唯一的解决方案。
【讨论】:
【参考方案6】:您可以使用以下内容:
adb shell pm setInstallLocation 2
从 android-sdk/tools 目录强制模拟器安装到您的 sd 卡,无论其大小 - 显然最好足够大以容纳您的应用程序。
如果您想回到默认安装位置(手机应用程序内存),请执行以下操作:
adb shell pm setInstallLocation 0
您也可以在手机/平板电脑上使用这些 adb 命令。
设置好要安装到 sd 卡上的模拟器后,您可以进入设置 --> 应用程序 --> 管理应用程序,选择您想要在 sd 卡上的应用程序,然后“移至SD Card”按钮将不再灰显。
【讨论】:
以上是关于在 Android sdk 2.2 中在 SD 卡上安装应用程序的主要内容,如果未能解决你的问题,请参考以下文章