From 455803019766d3925d55edb10f52717995e15c48 Mon Sep 17 00:00:00 2001 From: Oliver Bock Date: Tue, 21 Mar 2017 16:30:26 +0100 Subject: [PATCH 01/10] [#1829][android] vagrant init --- android/Vagrantfile | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 android/Vagrantfile diff --git a/android/Vagrantfile b/android/Vagrantfile new file mode 100644 index 0000000000..ea341843c7 --- /dev/null +++ b/android/Vagrantfile @@ -0,0 +1,71 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://atlas.hashicorp.com/search. + config.vm.box = "base" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + # config.vm.synced_folder "../data", "/vagrant_data" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + # # Customize the amount of memory on the VM: + # vb.memory = "1024" + # end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies + # such as FTP and Heroku are also available. See the documentation at + # https://docs.vagrantup.com/v2/push/atlas.html for more information. + # config.push.define "atlas" do |push| + # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" + # end + + # Enable provisioning with a shell script. Additional provisioners such as + # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the + # documentation for more information about their specific syntax and use. + # config.vm.provision "shell", inline: <<-SHELL + # apt-get update + # apt-get install -y apache2 + # SHELL +end From 32ae2c2312253ef05e28b436cf67f2fab54e9834 Mon Sep 17 00:00:00 2001 From: Oliver Bock Date: Tue, 21 Mar 2017 16:46:53 +0100 Subject: [PATCH 02/10] [#1829][android] Use ubuntu/xenial64 box Simplifies Android Studio installation via ubuntu-make --- android/Vagrantfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/Vagrantfile b/android/Vagrantfile index ea341843c7..592863d2ee 100644 --- a/android/Vagrantfile +++ b/android/Vagrantfile @@ -12,7 +12,7 @@ Vagrant.configure("2") do |config| # Every Vagrant development environment requires a box. You can search for # boxes at https://atlas.hashicorp.com/search. - config.vm.box = "base" + config.vm.box = "ubuntu/xenial64" # Disable automatic box update checking. If you disable this, then # boxes will only be checked for updates when the user runs From 073df23ec4381e4bf2143aa0f68ea5232e714543 Mon Sep 17 00:00:00 2001 From: Oliver Bock Date: Wed, 29 Mar 2017 14:14:11 +0200 Subject: [PATCH 03/10] [#1829][android] Use a better Vagrant box * Ubuntu's box isn't standard compliant (https://bugs.launchpad.net/cloud-images/+bug/1569237) * We don't need nightly builds --- android/Vagrantfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/Vagrantfile b/android/Vagrantfile index 592863d2ee..c03a2f92eb 100644 --- a/android/Vagrantfile +++ b/android/Vagrantfile @@ -12,7 +12,7 @@ Vagrant.configure("2") do |config| # Every Vagrant development environment requires a box. You can search for # boxes at https://atlas.hashicorp.com/search. - config.vm.box = "ubuntu/xenial64" + config.vm.box = "bento/ubuntu-16.04" # Disable automatic box update checking. If you disable this, then # boxes will only be checked for updates when the user runs From 62f88217bc7c0048a125fc01c627986419b9a818 Mon Sep 17 00:00:00 2001 From: Oliver Bock Date: Wed, 29 Mar 2017 14:16:11 +0200 Subject: [PATCH 04/10] [#1829][android] Configure VM for Android Studio --- android/Vagrantfile | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/android/Vagrantfile b/android/Vagrantfile index c03a2f92eb..66d8e6b9f5 100644 --- a/android/Vagrantfile +++ b/android/Vagrantfile @@ -43,13 +43,29 @@ Vagrant.configure("2") do |config| # backing providers for Vagrant. These expose provider-specific options. # Example for VirtualBox: # - # config.vm.provider "virtualbox" do |vb| - # # Display the VirtualBox GUI when booting the machine - # vb.gui = true - # - # # Customize the amount of memory on the VM: - # vb.memory = "1024" - # end + config.vm.provider "virtualbox" do |vb| + # Set VM name + vb.name = "BOINC-Android-Development" + + # Display the VirtualBox GUI when booting the machine + vb.gui = true + + # Customize the number of CPU cores on the VM: + vb.cpus = 2 + + # Customize the amount of memory on the VM: + vb.memory = "2048" + + # Increase video memory to 128 MB + vb.customize ["modifyvm", :id, "--vram", "128"] + + # Enable 3D acceleration + vb.customize ["modifyvm", :id, "--accelerate3d", "on"] + + # Enable USB + vb.customize ["modifyvm", :id, "--usb", "on"] + vb.customize ["modifyvm", :id, "--usbxhci", "on"] + end # # View the documentation for the provider you are using for more # information on available options. From 5591c74629aff9db8b55d78c5491f63510cba3ed Mon Sep 17 00:00:00 2001 From: Oliver Bock Date: Wed, 29 Mar 2017 14:34:20 +0200 Subject: [PATCH 05/10] [#1829][android] Development environment provisioning * Update OS packages * Install necessary OS packages * Install Android Studio, SDK, NDK and Android repos * Install SDKs and build tools required by BOINC (dynamically) * Install OpenSSL and cURL sources (for BOINC client build) * Final state: * Ready to run andriod/build_all.sh * Ready to import android/BOINC in Android Studio (Gradle project) --- android/Vagrantfile | 54 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/android/Vagrantfile b/android/Vagrantfile index 66d8e6b9f5..4e7683cab4 100644 --- a/android/Vagrantfile +++ b/android/Vagrantfile @@ -80,8 +80,54 @@ Vagrant.configure("2") do |config| # Enable provisioning with a shell script. Additional provisioners such as # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the # documentation for more information about their specific syntax and use. - # config.vm.provision "shell", inline: <<-SHELL - # apt-get update - # apt-get install -y apache2 - # SHELL + config.vm.provision "shell", name: "Preparing desktop environment...", inline: <<-SHELL + add-apt-repository ppa:ubuntu-desktop/ubuntu-make + apt-get update + apt-get upgrade + apt-get --assume-yes install ubuntu-mate-core virtualbox-guest-x11 + apt-get --assume-yes install ubuntu-make git automake libtool + update-locale LC_ALL=en_US.UTF-8 + SHELL + + config.vm.provision "shell" do |s| + s.name = "Installing Android Studio..." + s.privileged = false + s.inline = <<-SHELL + umake --verbose android android-studio --accept-license $HOME/Android/Android-Studio + printf "\n# umake fix-up\nexport ANDROID_HOME=\$HOME/Android/Sdk\n" >> $HOME/.profile + umake --verbose android android-sdk --accept-license $HOME/Android/Sdk + printf "\n# umake fix-up\nexport NDK_ROOT=\$HOME/Android/Ndk\n" >> $HOME/.profile + umake --verbose android android-ndk --accept-license $HOME/Android/Ndk + yes | $HOME/Android/Sdk/tools/bin/sdkmanager --update + yes | $HOME/Android/Sdk/tools/bin/sdkmanager "extras;android;m2repository" "extras;google;m2repository" + mkdir $HOME/Desktop + cp $HOME/.local/share/applications/android-studio.desktop $HOME/Desktop/ + chmod +x $HOME/Desktop/android-studio.desktop + SHELL + end + + config.vm.provision "shell" do |s| + s.name = "Clone BOINC repository and configuring toolchain..." + s.privileged = false + s.inline = <<-SHELL + git clone https://github.com/BOINC/boinc.git $HOME/BOINC + export BUILD_TOOLS=`sed -n "s/.*buildToolsVersion\\s*\\"\\(.*\\)\\"/\\1/p" $HOME/BOINC/android/BOINC/app/build.gradle` + export COMPILE_SDK=`sed -n "s/.*compileSdkVersion\\s*\\(\\d*\\)/\\1/p" $HOME/BOINC/android/BOINC/app/build.gradle` + yes | $HOME/Android/Sdk/tools/bin/sdkmanager "build-tools;${BUILD_TOOLS}" + yes | $HOME/Android/Sdk/tools/bin/sdkmanager "platforms;android-${COMPILE_SDK}" + printf "\n# Build toolchains\nexport ANDROID_TC=\$HOME/Android/Toolchains\n" >> $HOME/.profile + mkdir $HOME/3rdParty + wget -O /tmp/openssl.tgz https://www.openssl.org/source/old/1.0.2/openssl-1.0.2g.tar.gz + tar xzf /tmp/openssl.tgz --directory=$HOME/3rdParty + printf "\n# OpenSSL sources\nexport OPENSSL_SRC=\$HOME/3rdParty/openssl-1.0.2g\n" >> $HOME/.profile + wget -O /tmp/curl.tgz https://curl.haxx.se/download/curl-7.48.0.tar.gz + tar xzf /tmp/curl.tgz --directory=$HOME/3rdParty + printf "\n# cURL sources\nexport CURL_SRC=\$HOME/3rdParty/curl-7.48.0\n" >> $HOME/.profile + SHELL + end + + config.vm.provision "shell", name: "Final cleanup and reboot...", inline: <<-SHELL + apt-get clean + reboot + SHELL end From ef2f85b5957c1b3928b66eb753bb932514378582 Mon Sep 17 00:00:00 2001 From: Oliver Bock Date: Wed, 29 Mar 2017 15:07:05 +0200 Subject: [PATCH 06/10] [#1829][android] Update cURL and OpenSSL --- android/Vagrantfile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/android/Vagrantfile b/android/Vagrantfile index 4e7683cab4..bca034d4a7 100644 --- a/android/Vagrantfile +++ b/android/Vagrantfile @@ -110,6 +110,8 @@ Vagrant.configure("2") do |config| s.name = "Clone BOINC repository and configuring toolchain..." s.privileged = false s.inline = <<-SHELL + export OPENSSL_VERSION=1.0.2k + export CURL_VERSION=7.53.1 git clone https://github.com/BOINC/boinc.git $HOME/BOINC export BUILD_TOOLS=`sed -n "s/.*buildToolsVersion\\s*\\"\\(.*\\)\\"/\\1/p" $HOME/BOINC/android/BOINC/app/build.gradle` export COMPILE_SDK=`sed -n "s/.*compileSdkVersion\\s*\\(\\d*\\)/\\1/p" $HOME/BOINC/android/BOINC/app/build.gradle` @@ -117,12 +119,12 @@ Vagrant.configure("2") do |config| yes | $HOME/Android/Sdk/tools/bin/sdkmanager "platforms;android-${COMPILE_SDK}" printf "\n# Build toolchains\nexport ANDROID_TC=\$HOME/Android/Toolchains\n" >> $HOME/.profile mkdir $HOME/3rdParty - wget -O /tmp/openssl.tgz https://www.openssl.org/source/old/1.0.2/openssl-1.0.2g.tar.gz + wget -O /tmp/openssl.tgz https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz tar xzf /tmp/openssl.tgz --directory=$HOME/3rdParty - printf "\n# OpenSSL sources\nexport OPENSSL_SRC=\$HOME/3rdParty/openssl-1.0.2g\n" >> $HOME/.profile - wget -O /tmp/curl.tgz https://curl.haxx.se/download/curl-7.48.0.tar.gz + printf "\n# OpenSSL sources\nexport OPENSSL_SRC=\$HOME/3rdParty/openssl-${OPENSSL_VERSION}\n" >> $HOME/.profile + wget -O /tmp/curl.tgz https://curl.haxx.se/download/curl-${CURL_VERSION}.tar.gz tar xzf /tmp/curl.tgz --directory=$HOME/3rdParty - printf "\n# cURL sources\nexport CURL_SRC=\$HOME/3rdParty/curl-7.48.0\n" >> $HOME/.profile + printf "\n# cURL sources\nexport CURL_SRC=\$HOME/3rdParty/curl-${CURL_VERSION}\n" >> $HOME/.profile SHELL end From c447506cb781878add85c75d35296f80b3db200d Mon Sep 17 00:00:00 2001 From: Oliver Bock Date: Wed, 29 Mar 2017 15:37:35 +0200 Subject: [PATCH 07/10] [#1829][android] Added README/HOWTO for Vagrant --- android/Vagrant.README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 android/Vagrant.README.md diff --git a/android/Vagrant.README.md b/android/Vagrant.README.md new file mode 100644 index 0000000000..d634d029bb --- /dev/null +++ b/android/Vagrant.README.md @@ -0,0 +1,32 @@ +## Goals + +Provide a turn-key VM for Android development + +## Requirements + +* Vagrant +* VirtualBox + +## HOWTO + +1. On your host: open a terminal + 1. `cd /android` + 1. `vagrant up` + 1. Wait until the final reboot finished + 1. `vagrant ssh` + 1. `cd BOINC/android` + 1. `./build_all.sh` +1. In the VM: + 1. Log in with `vagrant/vagrant` + 1. Start Android Studio + 1. No need to change anything in the setup assitant (just complete it) + * OK / Next / Next / Finish / Finish + 1. Import the BOINC App as *Gradle* project from: `~/BOINC/android/BOINC` + 1. Ignore potential Gradle Plugin warning: Don't remind me again +1. Hook up your Android device via USB (and remember to attach it to VirtualBox) +1. Happy hacking :-) + +## Know limitations + +* The Android Virtual Device Manager might not work properly as it needs virtualization + which isn't possible within a virtual machine (at least not using VirtualBox). From ac3deca87eb3d0d4c54c350bb1d7cc17f4bb5a9e Mon Sep 17 00:00:00 2001 From: Oliver Bock Date: Fri, 31 Mar 2017 10:28:09 +0200 Subject: [PATCH 08/10] [#1829][android] Refined Vagrant README * Added hardware and download volume to requirements * Refined HOWTO --- android/Vagrant.README.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/android/Vagrant.README.md b/android/Vagrant.README.md index d634d029bb..729c544238 100644 --- a/android/Vagrant.README.md +++ b/android/Vagrant.README.md @@ -4,8 +4,13 @@ Provide a turn-key VM for Android development ## Requirements -* Vagrant -* VirtualBox +* [Vagrant](https://www.vagrantup.com/downloads.html) +* [VirtualBox](https://www.virtualbox.org/wiki/Downloads) +* Host: + * 4 CPU cores (2 used by VM) + * ~18 GB disk space + * 4 GB RAM (2 used by VM) +* Download volume (once): ~3.5 GB ## HOWTO @@ -13,16 +18,19 @@ Provide a turn-key VM for Android development 1. `cd /android` 1. `vagrant up` 1. Wait until the final reboot finished - 1. `vagrant ssh` - 1. `cd BOINC/android` - 1. `./build_all.sh` + 1. **From this point on you don't need Vagrant anymore** + 1. Don't run `vagrant up` again! + 2. Just use VirtualBox to stop/start your new shiny VM 1. In the VM: 1. Log in with `vagrant/vagrant` + 1. Open a terminal + 1. `cd BOINC/android` + 1. `./build_all.sh` 1. Start Android Studio 1. No need to change anything in the setup assitant (just complete it) * OK / Next / Next / Finish / Finish 1. Import the BOINC App as *Gradle* project from: `~/BOINC/android/BOINC` - 1. Ignore potential Gradle Plugin warning: Don't remind me again + 1. Ignore potential Gradle Plugin warning: *Don't remind me again* 1. Hook up your Android device via USB (and remember to attach it to VirtualBox) 1. Happy hacking :-) From 60935c211a20c27261bcbb18d5eba3adfcb62f01 Mon Sep 17 00:00:00 2001 From: Oliver Bock Date: Fri, 31 Mar 2017 12:22:55 +0200 Subject: [PATCH 09/10] [#1829][android] Fixed README typo --- android/Vagrant.README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/Vagrant.README.md b/android/Vagrant.README.md index 729c544238..2d6130cdca 100644 --- a/android/Vagrant.README.md +++ b/android/Vagrant.README.md @@ -34,7 +34,7 @@ Provide a turn-key VM for Android development 1. Hook up your Android device via USB (and remember to attach it to VirtualBox) 1. Happy hacking :-) -## Know limitations +## Known limitations * The Android Virtual Device Manager might not work properly as it needs virtualization which isn't possible within a virtual machine (at least not using VirtualBox). From 12424d31512dbbcec03f90b48bb0c66bd079fb8e Mon Sep 17 00:00:00 2001 From: Oliver Bock Date: Fri, 31 Mar 2017 13:55:43 +0200 Subject: [PATCH 10/10] [#1829][android] Fixed README markdown --- android/Vagrant.README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/Vagrant.README.md b/android/Vagrant.README.md index 2d6130cdca..b597df5ccb 100644 --- a/android/Vagrant.README.md +++ b/android/Vagrant.README.md @@ -20,7 +20,7 @@ Provide a turn-key VM for Android development 1. Wait until the final reboot finished 1. **From this point on you don't need Vagrant anymore** 1. Don't run `vagrant up` again! - 2. Just use VirtualBox to stop/start your new shiny VM + 1. Just use VirtualBox to stop/start your new shiny VM 1. In the VM: 1. Log in with `vagrant/vagrant` 1. Open a terminal