Google play services on Sailfish 4.1

Anyone had any problems with 4.3.0.15 ? I mean with script…

Works

@all didn’t want to start a new topic so: updated to 4.4 and still works. Had to rerun the script after every update up until now, though. Also after a while of inactivity (not using the Play Store, or the apps, can’t tell the amount of time though, in my case a few months) Android apps and Play Store stop working and have to be reinstalled again

1 Like

hey, I managed to install opengapps 10 on xperia 10 III however there is an annoyance where I cannot put the android apps to background, I have to go to sailfish top menu → select something that will open a sailfish app → then it will open the android app → now I can put it in background. Really blocking from using the devices properly. Did anyone else run into this?

you can use mkdir -p to ignore error if the directory already exists

Actually managed to figure it out. After having ran the android setup wizard and setting up my google account I made a new system image with the script but removed setupwizarddefault-arm64 and setupwizardtablet-arm64. After rebooting the account was still set up and the annoying thing doesn’t happen anymore.

1 Like

Okay help us simpletons understand

Which part do you need help with?

How did u remove those files

I changed the part in the script where it deletes files

install_opengapps() {
    unzip "$(get_opengapps_zip)" -d "$TMPWORKDIR/opengapps/"

    for p in $GOOGLE_APPS_REMOVE; do
        rm "$TMPWORKDIR/opengapps/Core/$p-all.tar.lz"
    done

    rm "$TMPWORKDIR/opengapps/Core/setupwizarddefault-arm64.tar.lz"
    rm "$TMPWORKDIR/opengapps/Core/setupwizardtablet-arm64.tar.lz"
    if [ -f "$TMPWORKDIR/opengapps/Core/extservicesgoogle-all.tar.lz" ]; then
        rm -r "$SQUASHFS_ROOT/system/priv-app/ExtServices"
    fi
    if [ -f "$TMPWORKDIR/opengapps/Core/extsharedgoogle-all.tar.lz" ]; then
        rm -r "$SQUASHFS_ROOT/system/app/ExtShared"
    fi


    mkdir "$TMPWORKDIR/opengapps_2"
    for f in "$TMPWORKDIR"/opengapps/Core/*.tar.lz; do
        lzip -c -d "$f" | tar -x -C "$TMPWORKDIR/opengapps_2"
    done
    rm -r "$TMPWORKDIR/opengapps/"

    cp -r "$TMPWORKDIR"/opengapps_2/*/*/* "$SQUASHFS_ROOT/system/"

    rm -r "$TMPWORKDIR/opengapps_2/"
}
1 Like

If you dont mind sharing the the script as some of us are not so tech savvy

I used the same script that you can get from this thread from the mega link

I’ll repost

#!/bin/sh

# Install Open GApps to the Alien Dalvik squashfs system.img.

set -e


WORKDIR=/home/.aliendalvik_systemimg_patch
TMPWORKDIR="$WORKDIR/tmp"
SQUASHFS_ROOT="$TMPWORKDIR/squashfs-root"
MOUNT_ROOT="$TMPWORKDIR/systemimg_mount"
SYSTEM_IMG=/opt/alien/system.img
ORIG_IMG_FILE=orig_img_path.txt

FEDORA22_REPO=https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/30/Everything/aarch64/os/Packages

OPENGAPPS_ARCH=arm64
OPENGAPPS_API=10.0
OPENGAPPS_VARIANT=pico

GOOGLE_APPS_REMOVE='carriersetup extservicesgoogle extsharedgoogle googlebackuptransport googlecontactssync googlefeedback googlepartnersetup'


log() {
    printf '%s\n' "$1" > /dev/stderr
}


install_fedora22_rpm() {
    pkgname="$1"
    pkgversion="$2"

   if ! rpm -q "$pkgname" > /dev/null; then
       pkgfile="$pkgname-$pkgversion.fc30.aarch64.rpm"
      firstletter="$(printf '%s' "$pkgfile" | cut -c 1)"
       mkdir "$TMPWORKDIR/rpms"
        curl "$FEDORA22_REPO/$firstletter/$pkgfile" > "$TMPWORKDIR/rpms/$pkgfile"
       pkcon -y install-local "$TMPWORKDIR/rpms/$pkgfile"
       rm "$TMPWORKDIR/rpms/$pkgfile"
        rmdir "$TMPWORKDIR/rpms"
   fi
}


install_deps() {
    if ! rpm -q squashfs-tools > /dev/null; then
        pkcon -y install squashfs-tools
    fi

    install_fedora22_rpm lzip 1.20-4
}


extract_image() {
    mkdir "$MOUNT_ROOT"
    mount -o loop,ro "$SYSTEM_IMG" "$MOUNT_ROOT"

    if [ -f "$MOUNT_ROOT/$ORIG_IMG_FILE" ]; then
        orig_image="$(cat "$MOUNT_ROOT/$ORIG_IMG_FILE")"
        log "$SYSTEM_IMG already patched, using original from $orig_image"
    else
        orig_image="$WORKDIR/system.img.orig.$(date +%Y%m%dT%H%M%S)"
        cp "$SYSTEM_IMG" "$orig_image"
        log "Copying original image $SYSTEM_IMG to $orig_image"
    fi
    umount "$MOUNT_ROOT"

    if [ ! -f "$orig_image" ]; then
        log "$orig_image not found"
        return 1
    fi

    mount -o loop,ro "$orig_image" "$MOUNT_ROOT"

    if [ -f "$MOUNT_ROOT/$ORIG_IMG_FILE" ]; then
        umount "$MOUNT_ROOT"
        rmdir "$MOUNT_ROOT"
        log "$orig_image already patched, please restore original image to $SYSTEM_IMG"
        return 1
    fi

    mkdir -p "$SQUASHFS_ROOT"
    # rsync needs to be run twice to copy all xattrs. Probably a bug in rsync.
    rsync -aSHAX "$MOUNT_ROOT/" "$SQUASHFS_ROOT/"
    rsync -aSHAX "$MOUNT_ROOT/" "$SQUASHFS_ROOT/"
    umount "$MOUNT_ROOT"
    rmdir "$MOUNT_ROOT"

    printf '%s' "$orig_image" > "$SQUASHFS_ROOT/$ORIG_IMG_FILE"
}


build_image() {
    cp "$SYSTEM_IMG" "$TMPWORKDIR/system.img.backup"
    mksquashfs "$SQUASHFS_ROOT" "$SYSTEM_IMG" -noappend -no-exports -no-duplicates -no-fragments
    rm "$TMPWORKDIR/system.img.backup"
    rm -r "$SQUASHFS_ROOT"
}


_find_opengapps() {
    downloads=/home/defaultuser/Downloads/
    name_pattern="open_gapps-$OPENGAPPS_ARCH-$OPENGAPPS_API-$OPENGAPPS_VARIANT-*.zip"
    if [ "$1" != quiet ]; then
        log "Searching for Open GApps zip at $downloads/$name_pattern"
    fi
    find "$downloads" -maxdepth 1 -name "$name_pattern" | sort | tail -n 1
}


get_opengapps_zip() {
    opengapps_zip="$(_find_opengapps)"
    if [ -z "$opengapps_zip" ]; then
        # Show the Open GApps download page to the user instead of automating
        # the download of the latest version.
        # https://opengapps.org/blog/post/2016/03/18/the-no-mirror-policy/
        log "Opening Open GApps download page"
        runuser -l defaultuser -- /usr/bin/xdg-open "https://opengapps.org/?download=true&arch=$OPENGAPPS_ARCH&api=$OPENGAPPS_API&variant=$OPENGAPPS_VARIANT"
        log "Waiting for download to start"
        while [ -z "$opengapps_zip" ]; do
            sleep 1
            opengapps_zip="$(_find_opengapps quiet)"
        done
        log "Detected new download at $opengapps_zip"
        log "Waiting for download to finish"
        while [ -f "$opengapps_zip" ] && [ -f "$opengapps_zip.part" ]; do
            sleep 1
        done
        sleep 1
        if [ ! -f "$opengapps_zip" ]; then
            log "Download failed"
            return 1
        fi
    else
        log "Found Open GApps zip $opengapps_zip"
    fi
    printf '%s' "$opengapps_zip"
}


install_opengapps() {
    unzip "$(get_opengapps_zip)" -d "$TMPWORKDIR/opengapps/"

    for p in $GOOGLE_APPS_REMOVE; do
        rm "$TMPWORKDIR/opengapps/Core/$p-all.tar.lz"
    done

    rm "$TMPWORKDIR/opengapps/Core/setupwizarddefault-arm64.tar.lz"
    rm "$TMPWORKDIR/opengapps/Core/setupwizardtablet-arm64.tar.lz"
    if [ -f "$TMPWORKDIR/opengapps/Core/extservicesgoogle-all.tar.lz" ]; then
        rm -r "$SQUASHFS_ROOT/system/priv-app/ExtServices"
    fi
    if [ -f "$TMPWORKDIR/opengapps/Core/extsharedgoogle-all.tar.lz" ]; then
        rm -r "$SQUASHFS_ROOT/system/app/ExtShared"
    fi


    mkdir "$TMPWORKDIR/opengapps_2"
    for f in "$TMPWORKDIR"/opengapps/Core/*.tar.lz; do
        lzip -c -d "$f" | tar -x -C "$TMPWORKDIR/opengapps_2"
    done
    rm -r "$TMPWORKDIR/opengapps/"

    cp -r "$TMPWORKDIR"/opengapps_2/*/*/* "$SQUASHFS_ROOT/system/"

    rm -r "$TMPWORKDIR/opengapps_2/"
}


set_traps() {
    # shellcheck disable=SC2064
    trap "$*" EXIT HUP INT QUIT PIPE TERM
}

cleanup() {
    if [ ! -f "$SYSTEM_IMG" ] && [ -f "$TMPWORKDIR/system.img.backup" ]; then
        mv "$TMPWORKDIR/system.img.backup" "$SYSTEM_IMG" || :
    fi
    umount "$MOUNT_ROOT" || :
    rm -r "$TMPWORKDIR" || :
    set_traps -
    exit 1
}

set_traps cleanup

systemctl stop aliendalvik

mkdir -p "$WORKDIR"
mkdir -p "$TMPWORKDIR"

install_deps
extract_image
install_opengapps
build_image

rmdir "$TMPWORKDIR"

set_traps -
exit 0

Thank you your script managed to fix it.

1 Like

Also there might be a bug in the audio. It seems like whenever a message comes in from whatsapp the audio switches to loudspeaker and the headphone is no longer recognised unless i try calling via the call app, can anyone help

Guys ive used the script on the new 4.5 update and i used the android 11 pico but the terminal return the umount:/home/.aliendvlik_systemimg_patch/tmp/systemimg_mount:no mount point specified error

1 Like

Try: devel-su pkcon install unzip

It returns package lready installed

There were some errors with the script and so it was going to clean up and as there was nothing to unmount it was showing that error.

I’ve updated the script and it works for me with Xperia 10 II on 4.5.0.

The changes are to accomodate for:
Android version 11
One of the gapps zips is now appended with arm64
The product directory under system now appears to be a link and can’t be copied to.

#!/bin/sh


set -e

WORKDIR=/home/.aliendalvik_systemimg_patch
TMPWORKDIR="$WORKDIR/tmp"
SQUASHFS_ROOT="$TMPWORKDIR/squashfs-root"
MOUNT_ROOT="$TMPWORKDIR/systemimg_mount"
SYSTEM_IMG=/opt/alien/system.img
ORIG_IMG_FILE=orig_img_path.txt

FEDORA22_REPO=https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/30/Everything/aarch64/os/Packages

OPENGAPPS_ARCH=arm64
OPENGAPPS_API=11.0
OPENGAPPS_VARIANT=pico

GOOGLE_APPS_REMOVE='carriersetup-all extservicesgoogle-arm64 extsharedgoogle-all  googlebackuptransport-all googlecontactssync-all  googlefeedback-all googlepartnersetup-all'
 
log() {
printf '%s\n'"$1" > /dev/stderr
}

install_fedora22_rpm() {
pkgname="$1"
pkgversion="$2"

if ! rpm -q "$pkgname" > /dev/null; then
    pkgfile="$pkgname-$pkgversion.fc30.aarch64.rpm"
    firstletter="$(printf '%s' "$pkgfile" | cut -c 1)"
    mkdir "$TMPWORKDIR/rpms"
    curl "$FEDORA22_REPO/$firstletter/$pkgfile" > "$TMPWORKDIR/rpms/$pkgfile"
    pkcon -y install-local "$TMPWORKDIR/rpms/$pkgfile"
    rm "$TMPWORKDIR/rpms/$pkgfile"
    rmdir "$TMPWORKDIR/rpms"
fi

}

install_deps() {

if ! rpm -q squashfs-tools > /dev/null; then
pkcon -y install squashfs-tools
fi

install_fedora22_rpm lzip 1.20-4

}

extract_image() {
mkdir "$MOUNT_ROOT"
mount -o loop,ro "$SYSTEM_IMG" "$MOUNT_ROOT"

if [ -f "$MOUNT_ROOT/$ORIG_IMG_FILE" ]; then
    orig_image="$(cat "$MOUNT_ROOT/$ORIG_IMG_FILE")"
    log "$SYSTEM_IMG already patched, using original from $orig_image"
else
    orig_image="$WORKDIR/system.img.orig.$(date +%Y%m%dT%H%M%S)"
    cp "$SYSTEM_IMG" "$orig_image"
    log "Copying original image $SYSTEM_IMG to $orig_image"
fi
umount "$MOUNT_ROOT"

if [ ! -f "$orig_image" ]; then
    log "$orig_image not found"
    return 1
fi

mount -o loop,ro "$orig_image" "$MOUNT_ROOT"

if [ -f "$MOUNT_ROOT/$ORIG_IMG_FILE" ]; then
    umount "$MOUNT_ROOT"
    rmdir "$MOUNT_ROOT"
    log "$orig_image already patched, please restore original image to $SYSTEM_IMG"
    return 1
fi

mkdir "$SQUASHFS_ROOT"
# rsync needs to be run twice to copy all xattrs. Probably a bug in rsync.
rsync -aSHAX "$MOUNT_ROOT/" "$SQUASHFS_ROOT/"
rsync -aSHAX "$MOUNT_ROOT/" "$SQUASHFS_ROOT/"
umount "$MOUNT_ROOT"
rmdir "$MOUNT_ROOT"

printf '%s' "$orig_image" > "$SQUASHFS_ROOT/$ORIG_IMG_FILE"
log "line 87"
}

build_image() {
cp "$SYSTEM_IMG" "$TMPWORKDIR/system.img.backup"
mksquashfs "$SQUASHFS_ROOT" "$SYSTEM_IMG" -noappend -no-exports -no-duplicates -no-fragments
rm "$TMPWORKDIR/system.img.backup"
rm -r "$SQUASHFS_ROOT"
}

_find_opengapps() {
downloads="$(runuser -l defaultuser -- /usr/bin/xdg-user-dir DOWNLOAD)"
name_pattern="open_gapps-$OPENGAPPS_ARCH-$OPENGAPPS_API-$OPENGAPPS_VARIANT-*.zip"
if [ "$1" != quiet ]; then
log "Searching for Open GApps zip at $downloads/$name_pattern"
fi
find "$downloads" -maxdepth 1 -name "$name_pattern" | sort | tail -n 1
}

get_opengapps_zip() {
opengapps_zip="$(_find_opengapps)"
if [ -z “$opengapps_zip” ]; then
# Show the Open GApps download page to the user instead of automating
# the download of the latest version.
# https://opengapps.org/blog/post/2016/03/18/the-no-mirror-policy/ 1
log "Opening Open GApps download page"
runuser -l defaultuser – /usr/bin/xdg-open "https://opengapps.org/?download=true&arch=$OPENGAPPS_ARCH&api=$OPENGAPPS_API&variant=$OPENGAPPS_VARIANT"

log "Waiting for download to start"
while [ -z "opengapps_zip" ]; do sleep 1 opengapps_zip="(_find_opengapps quiet)"
done
log "Detected new download at $opengapps_zip"
log "Waiting for download to finish"
while [ -f “$opengapps_zip” ] && [ -f "$opengapps_zip.part" ]; do
sleep 1
done
sleep 1
if [ ! -f "$opengapps_zip" ]; then
log "Download failed"
return 1
fi
else
log "Found Open GApps zip $opengapps_zip"
fi
printf '%s' "$opengapps_zip"
}

install_opengapps() {
unzip "$(get_opengapps_zip)" -d "$TMPWORKDIR/opengapps/"

for p in $GOOGLE_APPS_REMOVE; do
    rm "$TMPWORKDIR/opengapps/Core/$p.tar.lz"
done

if [ -f "$TMPWORKDIR/opengapps/Core/extservicesgoogle-all.tar.lz" ]; then
    rm -r "$SQUASHFS_ROOT/system/priv-app/ExtServices"
fi
if [ -f "$TMPWORKDIR/opengapps/Core/extsharedgoogle-all.tar.lz" ]; then
    rm -r "$SQUASHFS_ROOT/system/app/ExtShared"
fi
if [ -f "$TMPWORKDIR/opengapps/Core/setupwizardtablet-all.tar.lz" ]; then
    rm "$TMPWORKDIR/opengapps/Core/setupwizardtablet-all.tar.lz"
fi
mkdir "$TMPWORKDIR/opengapps_2"
for f in "$TMPWORKDIR"/opengapps/Core/*.tar.lz; do
    lzip -c -d "$f" | tar -x -C "$TMPWORKDIR/opengapps_2"
done
rm -r "$TMPWORKDIR/opengapps/"

mkdir "$TMPWORKDIR/opengapps_3"
mv "$TMPWORKDIR"/opengapps_2/vending-common "$TMPWORKDIR"/opengapps_3
cp -r "$TMPWORKDIR"/opengapps_2/*/*/* "$SQUASHFS_ROOT/system/"

cp -r "$TMPWORKDIR"/opengapps_3/vending-common/common/product/overlay/ "$SQUASHFS_ROOT"/product/

rm -r "$TMPWORKDIR/opengapps_2/"
rm -r "$TMPWORKDIR/opengapps_3/"

}

set_traps() {
# shellcheck disable=SC2064
trap "$*" EXIT HUP INT QUIT PIPE TERM
}

cleanup() {
if [ ! -f "$SYSTEM_IMG" ] && [ -f "$TMPWORKDIR/system.img.backup" ]; then
mv "$TMPWORKDIR/system.img.backup" “$SYSTEM_IMG” || :
fi

umount "$MOUNT_ROOT" || :
rm -r "$TMPWORKDIR" || :
set_traps -
exit 1
}

set_traps cleanup

systemctl stop aliendalvik

mkdir -p "$WORKDIR"
mkdir -p "$TMPWORKDIR"

install_deps
extract_image
install_opengapps
build_image

rmdir "$TMPWORKDIR"

set_traps -
exit 0
2 Likes

What script to use on Xperia 10 first model? it’s 32bit btw :wink:

How about copying text from this post and creating .sh file?
https://forum.sailfishos.org/t/google-play-services-on-sailfish-4-1/6912/10

Hello
I hate tried the scrpt with sailfish 4.5 on an xperia X.
Can you recommend any changes I need to make to get it to work.

[root@XperiaXDualSIM priv-app]# ./install.sh
mount: /home/.aliendalvik_systemimg_patch/tmp/systemimg_mount: failed to setup loop device for /opt/alien/system.img.
umount: /home/.aliendalvik_systemimg_patch/tmp/systemimg_mount: not mounted.
[root@XperiaXDualSIM priv-app]#
[root@XperiaXDualSIM .aliendalvik_systemimg_patch]# ls -als /home/.aliendalvik_systemimg_patch/tmp
ls: /home/.aliendalvik_systemimg_patch/tmp: No such file or directory
[root@XperiaXDualSIM .aliendalvik_systemimg_patch]# ls -als /home/.aliendalvik_systemimg_patch/
total 8
4 drwxrwxr-x 2 root root 4096 Oct 10 20:46 .
4 drwxr-xr-x 10 root root 4096 Oct 10 20:38 …
[root@XperiaXDualSIM .aliendalvik_systemimg_patch]#