VirtualBox上編譯android遇到共享文件夾引發的問題

後記: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命令至少須要知道三個信息:對象

  1. 要加載對象的文件系統類型:vboxsfip

  2. 要加載對象的設備名稱:AndroidBuild,就是在虛擬機管理設置的名字

  3. 要加載到哪一個目錄下:/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`能夠查到,重啓搞定

相關文章
相關標籤/搜索