Mono for Android via windows VMNa een update van het Mono for Android pakket onder Windows, besloot ik toch maar 1 van mijn licenties te gebruiken, om op kantoor ook te kunnen ontwikkelen. De licentie is nodig om niet via de emulator te werken. Op zich werkte het via de emulator wel, maar mijn Windows draait in een VM (VirtualBox) en om daar nu de emulator in te draaien, ben ik en veel van mijn geheugen kwijt en/of het is bijzonder langzaam. Dus, deployen op een echt apparaat is wel fijn. Na de update dus de licentie toegevoegd en een tutorial gestart om te testen. Helaas krijg ik het dus mooi niet op het apparaat. Met de hand ben ik de adb tool gaan testen en via Linux kon ik wel direct het apparaat vinden enzo. Dus toch een probleem met windows of de vm. Als optie bedacht ik me dat adb onder linux via de windows VM aangesproken moest kunnen worden. En dat kan! Om het simpel te zeggen: adb onder linux, maakt de connectie met het device en een ssh-tunnel vanaf de windows machine zorgt dat de windows apps, op de linux adb connecten. Via deze constructie zou het ook mogelijk moeten zijn om zonder snelheids problemen met de emulator te werken. Hier de how-to:
Start de ADB server onder linux (de SDK staat bij mij onder mijn user account ~/android-sdk-linux):
$ cd ./android-sdk-linux/platform-tools/
$ ./adb kill-server
$ ./adb connect localhost
$ ./adb start-server
Vervolgens kunnen we even controleren of hij het apparaat ziet (deze moet natuurlijk wel aangesloten zijn via USB en niet door de VM opgepakt zijn)
$ ./adb devices
List of devices attached
BCOKAS156664 device
Onder windows heb ik putty en plink gedownload en in de c:\windows folder neergezet. Hierdoor zijn ze beide direct via de command prompt te benaderen. Start een command prompt via windows+r en dan 'cmd' te typen. Vanaf de windows machine gaan we via plink een ssh-tunnel maken, die vanaf localhost:5037 uitkomt op linux machine. De 5037 poort van ADB draait op localhost, dus is niet direct bereikbaar:
> cd AppData\Local\Xamarin\MonoForAndroid\AndroidSDK\android-sdk-windows\platform-tools
> adb kill-server
> plink -L 127.0.0.1:5037:localhost:5037 peter@[IP linux server]
Na het inloggen op de linux machine via dit commando wordt de tunnel via de ssh server gemaakt en komt op de localhost:5037 uit. Open een 2de cmd op de windows machine en type het volgende (er vanuitgaande dat als het scherm opent, het huidge pad het pad van het gebruikers account is):
> cd AppData\Local\Xamarin\MonoForAndroid\AndroidSDK\android-sdk-windows\platform-tools
> adb devices
List of devices attached
BCOKAS156664 device
en hierbij wordt dus het device herkend. Vervolgens als MonoDevelop gestart wordt, zal bij het runnen dit device ook zichtbaar zijn en zal hij het project daarop kunnen deployen. Probleem opgelost.
