后记:android
本文解决了VirtualBox里共享文件夹的两个问题:shell
1. 没法访问Host机的共享文件夹;ubuntu
2. 没法在共享文件夹里建立symbol link;bash
但解决完上面的问题以后,最终virtualbox用共享文件夹编译仍是会遇到问题。ui
故事:用mac系统,但芯片厂商提供的方案里没有提供mac系统编译android,只好装了虚拟机。虚拟机里parallels desktop算是比较好用,不过坑爹的是,编译时期make命令挂了,提示"segmentation fail",Google未果。只好从新启用virtualbox。spa
在虚拟机管理里设置了共享文件夹,以后发现权限不够:code
➜ ~ ls /media/sf_AndroidBuild ls: 没法打开目录/media/sf_AndroidBuild: 权限不够
解决方法是用mount命令挂载进来orm
➜ ~ sudo mkdir -m 755 /mnt/AndroidBuild ➜ ~ sudo mount -t vboxsf -o AndroidBuild /mnt/AndroidBuild
mount命令至少须要知道三个信息:对象
要加载对象的文件系统类型:vboxsfip
要加载对象的设备名称:AndroidBuild,就是在虚拟机管理设置的名字
要加载到哪一个目录下:/mnt/AndroidBuild
挂载以后,当前用户没有写权限,加上参数`-o`:
➜ ~ sudo mount -t vboxsf -o rw,uid=1000,gid=1000 AndroidBuild /mnt/AndroidBuild
其中uid和gid表示当前用户的id,能够用`id`命令查到:
➜ ~ id caohong uid=1000(caohong) gid=1000(caohong) groups=1000(caohong),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),124(sambashare)
结果以下:
➜ ~ /mnt/AndroidBuild/LL95 mount | grep vboxsf AndroidBuild on /media/sf_AndroidBuild type vboxsf (gid=999,rw) AndroidBuild on /mnt/AndroidBuild type vboxsf (uid=1000,gid=1000,rw)
这下能够了吧,你还会遇到编译时的错误:“ln: 没法建立符号连接"out/target/": 只读文件系统”
答案在这儿找到:cannot create symlinks in virtualbox shared folders virtualbox在某版本以后禁用了在共享文件夹里建立连接(symbol link),workaround的方法是:
➜ ~ VBoxManage setextradata ubuntu64 VBoxInternal2/SharedFoldersEnableSymlinksCreate/AndroidBuild 1 ➜ ~ VBoxManage getextradata ubuntu64 enumerate Key: GUI/InfoDlgState, Value: 400,450,normal Key: GUI/LastCloseAction, Value: PowerOff Key: GUI/LastGuestSizeHint, Value: 640,480 Key: GUI/LastNormalWindowPosition, Value: 32,44,640,342,max Key: GUI/LastScaleWindowPosition, Value: 20,52,1245,694,max Key: GUI/VirtualScreenToHostScreen0, Value: 1 Key: VBoxInternal2/SharedFoldersEnableSymlinksCreate/AndroidBuild, Value: 1
`ubuntu64`是虚拟机的名字,`AndroidBuild`是共享文件夹的名字,设置成功后用`VBoxManage getextradata`能够查到,重启搞定