#!/bin/bash # Copyright 2019 root@geeks-r-us.de # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, # INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A # PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF # CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # For further information see: http://geeks-r-us.de/2017/08/26/android-apps-auf-dem-linux-desktop/ # If you find this piece of software useful and or want to support it's development think of # buying me a coffee https://ko-fi.com/geeks_r_us # die when an error occurs set -e WORKDIR="$(pwd)/anbox-work" # use sudo if installed if [ ! "$(which sudo)" ]; then SUDO="" else SUDO=$(which sudo) fi # clean downloads if [ "$1" = "--clean" ]; then $SUDO rm -rf "$WORKDIR" exit 0 fi # check if script was started with BASH if [ ! "$(ps -p $$ -oargs= | awk '{print $1}' | grep -E 'bash$')" ]; then echo "Please use BASH to start the script!" exit 1 fi # check if lzip is installed if [ ! "$(which lzip)" ]; then echo -e "lzip is not installed. Please install lzip.\nExample: sudo apt install lzip" exit 1 fi # check if squashfs-tools are installed if [ ! "$(which mksquashfs)" ] || [ ! "$(which unsquashfs)" ]; then echo -e "squashfs-tools is not installed. Please install squashfs-tools.\nExample: sudo apt install squashfs-tools" exit 1 else MKSQUASHFS=$(which mksquashfs) UNSQUASHFS=$(which unsquashfs) fi # check if wget is installed if [ ! "$(which wget)" ]; then echo -e "wget is not installed. Please install wget.\nExample: sudo apt install wget" exit 1 else WGET=$(which wget) fi # check if curl is installed if [ ! "$(which curl)" ]; then echo -e "curl is not installed. Please install curl.\nExample: sudo apt install curl" exit 1 else CURL=$(which curl) fi # check if unzip is installed if [ ! "$(which unzip)" ]; then echo -e "unzip is not installed. Please install unzip.\nExample: sudo apt install unzip" exit 1 else UNZIP=$(which unzip) fi # check if tar is installed if [ ! "$(which tar)" ]; then echo -e "tar is not installed. Please install tar.\nExample: sudo apt install tar" exit 1 else TAR=$(which tar) fi # get latest releasedate based on tag_name for latest x86_64 build OPENGAPPS_RELEASEDATE="$($CURL -s https://api.github.com/repos/opengapps/x86_64/releases/latest | grep tag_name | grep -o "\"[0-9][0-9]*\"" | grep -o "[0-9]*")" OPENGAPPS_FILE="open_gapps-x86_64-7.1-pico-$OPENGAPPS_RELEASEDATE.zip" OPENGAPPS_URL="https://sourceforge.net/projects/opengapps/files/x86_64/$OPENGAPPS_RELEASEDATE/$OPENGAPPS_FILE" HOUDINI_Y_URL="http://dl.android-x86.org/houdini/7_y/houdini.sfs" HOUDINI_Z_URL="http://dl.android-x86.org/houdini/7_z/houdini.sfs" KEYBOARD_LAYOUTS="da_DK de_CH de_DE en_GB en_UK en_US es_ES es_US fr_BE fr_CH fr_FR it_IT nl_NL pt_BR pt_PT ru_RU" contains() { local list="$1" local item="$2" if [[ "$list" =~ (^|[[:space:]])"$item"($|[[:space:]]) ]] ; then return 0 else return 1 fi } if [ "$1" = "--layout" ]; then if ! contains "$KEYBOARD_LAYOUTS" "$2" ; then echo "$2 is not a supported keyboard layout. Supported layouts are: $KEYBOARD_LAYOUTS" exit 1 else echo "Keyboard layout $2 selected" fi fi ANBOX=$(which anbox) SNAP_TOP="" if ( [ -d '/var/snap' ] || [ -d '/snap' ] ) && \ ( [ ${ANBOX} = "/snap/bin/anbox" ] || [ ${ANBOX} == /var/lib/snapd/snap/bin/anbox ] );then if [ -d '/snap' ];then SNAP_TOP=/snap else SNAP_TOP=/var/lib/snapd/snap fi COMBINEDDIR="/var/snap/anbox/common/combined-rootfs" OVERLAYDIR="/var/snap/anbox/common/rootfs-overlay" WITH_SNAP=true else COMBINEDDIR="/var/lib/anbox/combined-rootfs" OVERLAYDIR="/var/lib/anbox/rootfs-overlay" WITH_SNAP=false fi if [ ! -d "$COMBINEDDIR" ]; then # enable overlay fs if $WITH_SNAP;then $SUDO snap set anbox rootfs-overlay.enable=true $SUDO snap restart anbox.container-manager else # As fix for https://github.com/geeks-r-us/anbox-playstore-installer/issues/54 so none need manually create the structure # Author @NickWilde263 (Just call me Fox) # "mkdir" won't report error when the path already exist because of "-p" see "man mkdir" about "-p" option if [ ! -d "/etc/systemd/system/anbox-container-manager.service.d/" ]; then # Informing the user about creation of the directory echo "Creating /etc/systemd/system/anbox-container-manager.service.d/ directory" $SUDO mkdir -p /etc/systemd/system/anbox-container-manager.service.d/ fi $SUDO cat >/etc/systemd/system/anbox-container-manager.service.d/override.conf<\n \n \n \n \n \n \n \n \n \n \n " END ) C=$(echo $C | sed 's/\//\\\//g') C=$(echo $C | sed 's/\"/\\\"/g') if [ ! -d "$OVERLAYDIR/system/etc/permissions/" ]; then $SUDO mkdir -p "$OVERLAYDIR/system/etc/permissions/" $SUDO cp "$WORKDIR/squashfs-root/system/etc/permissions/anbox.xml" "$OVERLAYDIR/system/etc/permissions/anbox.xml" fi $SUDO sed -i "/<\/permissions>/ s/.*/${C}\n&/" "$OVERLAYDIR/system/etc/permissions/anbox.xml" # make wifi and bt available $SUDO sed -i "//d" "$OVERLAYDIR/system/etc/permissions/anbox.xml" $SUDO sed -i "//d" "$OVERLAYDIR/system/etc/permissions/anbox.xml" if [ ! -x "$OVERLAYDIR/system/build.prop" ]; then $SUDO cp "$WORKDIR/squashfs-root/system/build.prop" "$OVERLAYDIR/system/build.prop" fi if [ ! -x "$OVERLAYDIR/default.prop" ]; then $SUDO cp "$WORKDIR/squashfs-root/default.prop" "$OVERLAYDIR/default.prop" fi # set processors $SUDO sed -i "/^ro.product.cpu.abilist=x86_64,x86/ s/$/,armeabi-v7a,armeabi,arm64-v8a/" "$OVERLAYDIR/system/build.prop" $SUDO sed -i "/^ro.product.cpu.abilist32=x86/ s/$/,armeabi-v7a,armeabi/" "$OVERLAYDIR/system/build.prop" $SUDO sed -i "/^ro.product.cpu.abilist64=x86_64/ s/$/,arm64-v8a/" "$OVERLAYDIR/system/build.prop" echo "persist.sys.nativebridge=1" | $SUDO tee -a "$OVERLAYDIR/system/build.prop" $SUDO sed -i '/ro.zygote=zygote64_32/a\ro.dalvik.vm.native.bridge=libhoudini.so' "$OVERLAYDIR/default.prop" # enable opengles echo "ro.opengles.version=131072" | $SUDO tee -a "$OVERLAYDIR/system/build.prop" echo "Restart anbox" if $WITH_SNAP;then $SUDO snap restart anbox.container-manager else $SUDO systemctl restart anbox-container-manager.service fi