环境:imx51 fsl 开发板 系统:android2.2
方法一、
1,连接调试串口
2,在shell 下执行:pm setInstallLocation 2
还可以执行:pm getInstallLocation 获得是什么模式
0 [auto]: Let system decide the best location
1 [internal]: Install on internal device storage
2 [external]: Install on external media
3,把你所要安装的包:放到/sdcard中,用ES安装,
安装后: df or busybox df -h
Filesystem Size Used Available Use% Mounted on
tmpfs 210.5M 12.0K 210.5M 0% /dev
tmpfs 210.5M 0 210.5M 0% /mnt/asec
tmpfs 1.0M 28.0K 996.0K 3% /mnt/shm
/dev/block/mmcblk0p2 121.5M 97.6M 23.9M 80% /system
/dev/block/mmcblk0p5 239.6M 37.0M 190.2M 16% /data
/dev/block/mmcblk0p6 121.6M 5.5M 109.8M 5% /cache
/dev/block/vold/179:1
3.2G 22.6M 3.1G 1% /mnt/sdcard
/dev/block/vold/179:1
3.2G 22.6M 3.1G 1% /mnt/secure/asec
/dev/block/dm-0 2.0M 28.0K 2.0M 1% /mnt/asec/com.kevin.slidingdrawer-1
/dev/block/dm-1 2.0M 32.0K 2.0M 2% /mnt/asec/android.serialport.sample-1
/dev/block/dm-2 8.1M 6.9M 1.2M 85% /mnt/asec/com.google.android.apps.maps-1
/dev/block/dm-3 2.0M 876.0K 1.2M 42% /mnt/asec/com.aurorasoftworks.quadrant.ui.advanced-1
其中/dev/block/dm-0 到3 就是我们安装在SD上的apk应用程序。可以看出(我在SD上安装了4个应用)
4,这只是将应用程序安装在SD上,但是它们的缓冲数据或临时数据,都还是在 /data目录下,只是安装的文件不占flash空间,其运行时所需要的动态数据或生成的临时数据还是在flash上的。
5,不足:这就带来一个问题,启动会变慢,运行SD上的程序会比在flash上的要慢。这就要求你的SD卡要足够快!
6,好处:就是系统坏了,这些在SD的应用不需要再安装。
方法二、
主要是针对开发人员
1,让你的程序支持SD卡上安装必须具备设置API Level至少为8,即androidmanifest.xml的中android:minSdkVersion至少为8这样你的APK最终运行时兼容的固件只有2.2了,同时在androidmanifest.xml文件的根节点中必须加入android:installLocation这个属性,类似代码如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="preferExternal"
... >
2,android:installLocation的值主要有preferExternal、auto和internalOnly这三个选项,通常我们设置为preferExternal可以优先推荐应用安装到SD卡上,当然最终用户可以选择为内部的ROM存储上,如果外部存储已满,Android内部也会安装到内部存储上,auto将会根据存储空间自适应,当然还有一些应用可能会有特殊的目的,他们一般必须安装在内部存储才能可靠运行,设置为internalOnly比较合适。