胖蔡说技术
随便扯扯

Android 外置存储卡安装apk后,拔出u盘(外置存储卡)挂载地址无法释放

问题

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
两个设备任然存在,然后我通过remountdev进行卸载命令,结果如下:

由此可见,umount /mnt/secure/asec成功,umount
/storage/external_storage/sda1
失败,报错:Device 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 #查看当前已挂载设


发现我们的u盘还在挂载。

# umount /mnt/secure/asec 
# umount
 /storage/external_storage/sda1 
# rm -rf /storage/external_storage/sda1 #df 

然后重新打开Filebowers即可发现已成功移除u盘,且在此插入u盘时加载地址为起始加载地址/storage/external_storage/sda1.操作成功,下一遍我将会介绍如何在android代码实现整个过程,并给出实例代码。。

赞(0) 打赏
转载请附上原文出处链接:胖蔡说技术 » Android 外置存储卡安装apk后,拔出u盘(外置存储卡)挂载地址无法释放
分享到: 更多 (0)

请小编喝杯咖啡~

支付宝扫一扫打赏

微信扫一扫打赏