GPS didn’t work very well on my XA2 plus it took forever for it to find my location.
On my X10III it works as expected.
Did you manage to fix it. Could someone post link with working script file to download?
yes got it working and working script was in this post
need also file which is mentioned here: Google play services on xperia 10 III Sailfish 4.4.0.64 - #57 by Tekno
I get the following error:
Erreur fatale: /home/.aliendalvik_systemimg_patch/tmp/rpms/lzip-1.16-1.fc22.armv7hl.rpm has wrong architecture: armv7hl
umount: /home/.aliendalvik_systemimg_patch/tmp/systemimg_mount: no mount point specified.
I am on the latest SF version
In 4.6.0, looks like a refactor is necessary at least for SYSTEM_IMG=/opt/{alien -> appsupport}/system.img
. Not sure yet if that’s all there is, since appsupport service is currently failing to start after 4.6.0 update [Release notes] Sauna 4.6.0.11 - #33 by lkraav
I changed the SYSTEM_IMG path and used open_gapps-arm64-11.0-pico-20220503.zip
Play Store works but the apps are unable to see Play Services. I had microG before this update.
You removed all tracs of MicroG?
But even on clean install, I’ve had a couple apps fail to find Play Services, even if majority seem to work fine.
I just had to install the apps again. For apps that have data that I don’t want to lose I downloaded an older apk with Aurora store and then
appsupport-attach sh
pm install -d /path/to/apk.apk
And after that it is possible to update it with Play store. So this was a microG thing.
I have successfully booted 4.6.0 App Support with this slightly updated script fork Sony 10 III - Dual SIM (arm64) | Sailfish OS 4.6 | Android 11 | Open GApps pico installation script · GitHub
Thanks @nemishkor for getting the gist started.
Thank you! Worked like a charm
First of all thanks for your corrections at the code.
I think there are small typos in it.
At the beginning (before set -e
) there should be #!/bin/sh
string.
At _find_opengapps()
function (row 101 adding the #!/bin/sh
above), the download
variable should be equal to /home/defaultuser/Downloads
and not /home/defaultuser/Downloads/
because, with the slash at the end, at runtime it will return /home/defaultuser/Downloads//name_pattern="open_gapps-$OPENGAPPS_ARCH-$OPENGAPPS_API-$OPENGAPPS_VARIANT-*.zip"
(double slashes after Downloads).
In this way the code worked for me after the 4.6.0.11 update.
Open GApps hasn’t been updated for a long time and the latest supported Android version is 11. AppSupport will be API level 33 at least on C2 which means Android 13.
Has anyone tried MindTheGapps or NikGapps with the current phone models? I remember using MindTheGapps some years back.
In 5.0, older devices, systemctl stop appsupport
should be systemctl stop appsupport@defaultuser
. The rest is working.
Yes, my gist has been updated for 5.0 and currently seems to continue to work great on X10III.
Hi there.I’ve been trying to get the script to work on the C2: it actually works with a few edits. opengapps are stuck at Android 11. I tried MindTheGapps: no errors but the Google apps were not showing anywhere . Any clues anybody?
Try this script for Android 13
NikGapps-core-arm64-13-20241231-signed.zip
“run as devel-su”
# installgapps_13_arm64.sh
set -e
WORKDIR=/home/.appsupport_systemimg_patch
TMPWORKDIR="$WORKDIR/tmp"
GAPPSWORKDIR="$TMPWORKDIR/gapps/work/"
SQUASHFS_ROOT="$TMPWORKDIR/squashfs-root"
MOUNT_ROOT="$TMPWORKDIR/systemimg_mount"
SYSTEM_IMG=/opt/appsupport/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
GAPPS=NikGapps
GAPPS_ARCH=arm64
GAPPS_API=13
GAPPS_VARIANT=core
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
log "squashfs-tools package not found. Installing..."
pkcon -y install squashfs-tools
fi
if ! rpm -q rsync > /dev/null; then
log "rsync package not found. Installing..."
pkcon -y install rsync
fi
if ! rpm -q lzip > /dev/null; then
log "lzip package not found. Installing..."
install_fedora22_rpm lzip 1.20-4
fi
if ! rpm -q unzip > /dev/null; then
log "unzip package not found. Installing..."
pkcon -y install unzip
fi
}
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" | tee "$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_gapps() {
downloads=/home/defaultuser/Downloads/
name_pattern="$GAPPS-$GAPPS_VARIANT-$GAPPS_ARCH-$GAPPS_API-*.zip"
if [ "$1" != quiet ]; then
log "Searching for GApps zip at $downloads/$name_pattern"
fi
find "$downloads" -maxdepth 1 -name "$name_pattern" | sort | tail -n 1
}
get_gapps_zip() {
gapps_zip="$(_find_gapps)"
if [ -z "$gapps_zip" ]; then
# Show the GApps download page to the user instead of automating
# the download of the latest version.
# The no-mirror policy
log "Opening ${GAPPS} download page"
runuser -l defaultuser - /usr/bin/xdg-open "https://sourceforge.net/projects/nikgapps/files/Releases/Android-13/"
log "Waiting for download to start"
while [ -z "$gapps_zip" ]; do
sleep 1
gapps_zip="$(_find_gapps quiet)"
done
log "Detected new download at $gapps_zip"
log "Waiting for download to finish"
while [ -f "$gapps_zip" ] && [ -f "$gapps_zip.part" ]; do
sleep 1
done
sleep 1
if [ ! -f "$gapps_zip" ]; then
log "Download failed"
return 1
fi
else
log "Found GApps zip $gapps_zip"
fi
printf '%s' "$gapps_zip"
}
install_gapps() {
gapps_zip_name="$(get_gapps_zip)"
log "Unzip gapps archive"
for p in $(unzip -Z -1t ${gapps_zip_name} AppSet/*); do
unzip -qd "$TMPWORKDIR/gapps/" ${gapps_zip_name} ${p}
done
log "Unzip some google apps"
find "$TMPWORKDIR/gapps/" -type f -regex ".*\.\(zip\|ZIP\)" | while read z; do
log "Unzip --> ${z}"
unzip -qd "$GAPPSWORKDIR" ${z} ___*
done
# if [ -f "$TMPWORKDIR/gapps/<placeholder>" ]; then
# rm -r "$SQUASHFS_ROOT/system/<placeholder"
# fi
for d in ${GAPPSWORKDIR}*; do
log "Work dir --> ${d}"
c=$(echo "${d##*/}"| sed 's/___/\//g')
log "mkdir --> ${c}"
mkdir -p "$TMPWORKDIR/gapps_unarchived${c}"
cp ${d}/* "$TMPWORKDIR/gapps_unarchived${c}/"
done
log "Chown all to 500000"
chown -R 500000:50000 $TMPWORKDIR/gapps_unarchived/*
rm -r "$TMPWORKDIR/gapps/"
ls -al "$TMPWORKDIR"/gapps_unarchived
ls -al "$SQUASHFS_ROOT/system/"
ls -al "$SQUASHFS_ROOT/system/product"
log "Patch system.img with Gapps"
cp -r "$TMPWORKDIR"/gapps_unarchived/* "$SQUASHFS_ROOT/system/"
rm -r "$TMPWORKDIR/gapps_unarchived/"
}
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 appsupport@defaultuser
mkdir -p "$WORKDIR"
mkdir -p "$TMPWORKDIR"
mkdir -p "$GAPPSWORKDIR"
install_deps
log "extract image"
extract_image
log "image was extracted"
log "install ${GAPPS}"
install_gapps
log "${GAPPS} were installed"
log "build image"
build_image
log "image was built"
rmdir "$TMPWORKDIR"
set_traps -
exit 0
Thanks a million ! Tried the script: it works and install smoothly. Then appsupport won’t start. It keeps starting and stopping. I have to further look at the logs to find out what’s going on …
For me it runs with the patched system.img on Xperia 10V
I’m on the C2. Would you know where to look for the appsupport logs?
You were right, the patched image didn’t always work, or rarely. While figuring out the possible error, I had to determine with the tool “unzip” that this tool doesn’t unzip so cleanly. I rewrote the script for “7z” and now have a working image with every patching.
# installgapps_13_aarch64.sh
set -e
WORKDIR=/home/.appsupport_systemimg_patch
TMPWORKDIR="$WORKDIR/tmp"
GAPPSWORKDIR="$TMPWORKDIR/nik"
SQUASHFS_ROOT="$TMPWORKDIR/squashfs-root"
MOUNT_ROOT="$TMPWORKDIR/systemimg_mount"
SYSTEM_IMG=/opt/appsupport/system.img
ORIG_IMG_FILE=orig_img_path.txt
DOWNLOADFOLDER=/home/defaultuser/Downloads/
GAPPS=NikGapps
GAPPS_ARCH=arm64
GAPPS_API=13
GAPPS_VARIANT=core
log() {
printf '\n---> %s <---\n' "$1" > /dev/stderr
}
install_deps() {
if ! rpm -q squashfs-tools > /dev/null; then
log "squashfs-tools package not found. Installing..."
pkcon -y install squashfs-tools
fi
if ! rpm -q rsync > /dev/null; then
log "rsync package not found. Installing..."
pkcon -y install rsync
fi
if ! rpm -q p7zip-full > /dev/null; then
log "unzip package not found. Installing..."
pkcon -y install p7zip-full
fi
}
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 -aPSHAX "$MOUNT_ROOT/" "$SQUASHFS_ROOT/" > /dev/null 2>&1
umount "$MOUNT_ROOT"
rmdir "$MOUNT_ROOT"
printf '%s' "$orig_image" | tee "$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_gapps() {
downloads=${DOWNLOADFOLDER}
name_pattern="$GAPPS-$GAPPS_VARIANT-$GAPPS_ARCH-$GAPPS_API-*.zip"
if [ "$1" != quiet ]; then
log "Searching for GApps zip at $downloads/$name_pattern"
fi
find "$downloads" -maxdepth 1 -name "$name_pattern" | sort | tail -n 1
}
get_gapps_zip() {
gapps_zip="$(_find_gapps)"
if [ -z "$gapps_zip" ]; then
# Show the GApps download page to the user instead of automating
# the download of the latest version.
# The no-mirror policy
log "Opening ${GAPPS} download page"
runuser -l defaultuser - /usr/bin/xdg-open "https://sourceforge.net/projects/nikgapps/files/Releases/Android-13/"
log "Waiting for download to start"
while [ -z "$gapps_zip" ]; do
sleep 1
gapps_zip="$(_find_gapps quiet)"
done
log "Detected new download at $gapps_zip"
log "Waiting for download to finish"
while [ -f "$gapps_zip" ] && [ -f "$gapps_zip.part" ]; do
sleep 1
done
sleep 1
if [ ! -f "$gapps_zip" ]; then
log "Download failed"
return 1
fi
else
log "Found GApps zip $gapps_zip"
fi
printf '%s' "$gapps_zip"
}
install_gapps() {
gapps_zip_name="$(get_gapps_zip)"
log "Unzip nikgapps archive"
/usr/bin/7z x -ai!*.zip ${gapps_zip_name} -r AppSet/Core/ -o${GAPPSWORKDIR} -y
/bin/find ${GAPPSWORKDIR} -type f -name "*.zip" -exec 7z x {} '-x!*installer.sh' -o${GAPPSWORKDIR} -y \;
log "Prepare nikgapps files"
for d in ${GAPPSWORKDIR}/___*; do
# log "$(echo $d | sed 's/___/\//g;s/\/\//\/system\//g')"
mkdir -p "$(echo $d | sed 's/___/\//g;s/\/\//\/system\//g')"
# log "${d}/* ${GAPPSWORKDIR}/system/$(echo "${d##*/}/"| sed 's/___/\//g')"
cp ${d}/* ${GAPPSWORKDIR}/system$(echo "${d##*/}/"| sed 's/___/\//g')
done
log "chown all to 500000"
chown -R 500000:500000 ${GAPPSWORKDIR}/system
log "chmod all with +x"
chmod -R +x ${GAPPSWORKDIR}/system
ls -altr "${GAPPSWORKDIR}/system/"
log "Patch system.img with Gapps"
cp -rp ${GAPPSWORKDIR}/system/* ${SQUASHFS_ROOT}/system/
ls -altr "$SQUASHFS_ROOT/system/"
rm -r "${GAPPSWORKDIR}"
}
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 appsupport@defaultuser
mkdir -p "$WORKDIR"
mkdir -p "$TMPWORKDIR"
mkdir -p "$GAPPSWORKDIR"
log "extract image"
extract_image
log "image was extracted"
log "install ${GAPPS}"
install_gapps
log "${GAPPS} were installed"
log "build image"
build_image
log "image was built"
rmdir "$TMPWORKDIR"
set_traps -
exit 0