问题
在amlogic
中,实现将apk
安装在sd
卡中,出现了当安装完成后,拔出被安装的u盘
后出现已拔出的u盘路径未释放问题。
解决过程
人工手动拔出
通过adb
命令测试如下:
$adb shell
#umount /storage/external_storage/sda1
命令成功,成功撤销u盘,但挂载点任存在 查看u盘拔插前后的设备mount情况:
# mount
注:与u盘挂载有关的设备挂载信息
tmpfs /mnt/asec tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
/dev/block/vold/8:1 /storage/external_storage/sda1 fuseblk rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096 0 0
/dev/block/vold/8:1 /mnt/secure/asec fuseblk rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096 0 0
首先,看先未将apk
安装到sd卡
中的挂载设备信息: 插入u盘
的mount
信息:
拔出u盘后的mount
信息:
这两种状态相比较的差别:
/dev/block/vold/8:1 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1015,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
当拔出u盘后这两个dev
消失, tmpfs /mnt/asec tmpfs rw,seclabel,relatime,mode=755,gid=1000
这个
0 0 dev
一直均存在 将apk
安装到U盘
后查看其mount
信息: U盘
未拔出的mount
信息:
U盘
拔出后的mount
信息:
经查看发现,/mnt/secure/asec 和/storage/external_storage/sda1
两个设备任然存在,然后我通过remount
对dev
进行卸载命令,结果如下:
由此可见,umount /mnt/secure/asec
成功,umount
失败,报错:
/storage/external_storage/sda1Device or resource busy
猜想
可能是安装在u盘上的apk正在运行,会对u盘的apk数据进行访问占有访问资源。 测试: –
关闭当前安装在u盘上的apk,然后再进入mount查看设备信息,结果发现,/storage/external_storage/sda1任存在,猜想不成立。
这样,我们通过lsof 查看u盘路径所占有的进程情况:
#lsof |grep /storage/external_storage/sda1
由上可知,当前文件系统还存在未结束的进程。 结束当前进程:
#kill -9 1946
然后umount
#umount /storage/external_storage/sda1
卸载成功。 然而,/storage/external_storage/sda1
文件夹任然存在。
尝试在u盘拔出前对/storage/external_storage/sda1
进行umount
操作
首先需要对/mnt/secure/asec
进行移除操作,发现无法移除,然后拔出u盘后移除asec
,发现成功移除
移除sd卡后对其操作如下可实现移除操作.
- 将
apk
安装到u盘
; - 将
u盘
拔出,这时会发现fileBrowers
中会存在一个对已拔出U盘
的持有,且打开后无文件 - 通过adb或者串口连接
device
,并进入Android
的文件系统(我这使用的是adb方式)
$ adb shell
$ mount 或者是#df #查看当前已挂载设
# umount /mnt/secure/asec
# umount
/storage/external_storage/sda1
# rm -rf /storage/external_storage/sda1 #df
然后重新打开Filebowers
即可发现已成功移除u盘
,且在此插入u盘
时加载地址为起始加载地址/storage/external_storage/sda1
.操作成功,下一遍我将会介绍如何在android
代码实现整个过程,并给出实例代码。。