From 6a47b5f12093dc1eec89623af1913a3292c13378 Mon Sep 17 00:00:00 2001
From: Samuel <36420837+Samueru-sama@users.noreply.github.com>
Date: Mon, 11 Aug 2025 02:19:48 +0000
Subject: [PATCH 01/18] refactor
---
AppDir/AppRun | 97 +++++++++++++++++++
AppDir/android-tools.desktop | 9 ++
AppDir/android-tools.png | Bin 0 -> 10292 bytes
android-tools-appimage.sh | 181 +++++++----------------------------
4 files changed, 142 insertions(+), 145 deletions(-)
create mode 100644 AppDir/AppRun
create mode 100644 AppDir/android-tools.desktop
create mode 100644 AppDir/android-tools.png
diff --git a/AppDir/AppRun b/AppDir/AppRun
new file mode 100644
index 0000000..76389bf
--- /dev/null
+++ b/AppDir/AppRun
@@ -0,0 +1,97 @@
+#!/usr/bin/env sh
+CURRENTDIR="$(dirname "$(readlink -f "$0")")"
+UDEVNOTICE='No android udev rules detected, use "--getudev" to install'
+UDEVREPO="https://github.com/M0Rf30/android-udev-rules.git"
+cat /etc/udev/rules.d/*droid.rules >/dev/null 2>&1 && UDEVNOTICE=""
+cat /usr/lib/udev/rules.d/*droid.rules >/dev/null 2>&1 && UDEVNOTICE=""
+BIN="${ARGV0#./}"
+unset ARGV0
+export PATH="$CURRENTDIR/bin:$PATH"
+
+_get_udev_rules() {
+ if cat /etc/udev/rules.d/*droid.rules >/dev/null 2>&1 \
+ || cat /usr/lib/udev/rules.d/*droid.rules >/dev/null 2>&1; then
+ echo "ERROR: udev rules are already installed!"
+ echo "Errors persisting with installed udev rules may be due to missing"
+ echo "udev rules for device or lack of permissions from device"
+ exit 1
+ fi
+ if ! command -v git >/dev/null 2>&1; then
+ echo "ERROR: you need git to use this function"
+ exit 1
+ fi
+ if command -v sudo >/dev/null 2>&1; then
+ SUDOCMD="sudo"
+ elif command -v doas >/dev/null 2>&1; then
+ SUDOCMD="doas"
+ else
+ echo "ERROR: You need sudo or doas to use this function"
+ exit 1
+ fi
+ printf '%s' "udev rules installer from $UDEVREPO, run installer? (y/N): "
+ read -r yn
+ if echo "$yn" | grep -i '^y' >/dev/null 2>&1; then
+ tmpudev=".udev_rules_tmp.dir"
+ git clone "$UDEVREPO" "$tmpudev" && cd "$tmpudev" || exit 1
+ chmod +x ./install.sh && "$SUDOCMD" ./install.sh
+ cat /etc/udev/rules.d/*droid.rules >/dev/null 2>&1 || exit 1
+ cd .. && rm -rf "$tmpudev" || exit 1
+ echo "udev rules installed successfully!"
+ else
+ echo "Aborting..."
+ exit 1
+ fi
+}
+
+_get_symlinks() {
+ BINDIR="${XDG_BIN_HOME:-$HOME/.local/bin}"
+ links="$(find "$CURRENTDIR"/shared/bin -maxdepth 1 -exec file {} \; \
+ | awk -F":" '/ELF/ {print $1}' | xargs -I {} basename {} 2>/dev/null)"
+ echo ""
+ echo "This function will make wrapper symlinks in $BINDIR"
+ echo "that will point to $APPIMAGE with the names:"
+ echo "$links" | tr ' ' '\n'
+ echo ""
+ echo "Make sure there are not existing files $BINDIR with those names"
+ printf '\n%s' "Proceed with the symlink creation? (Y/n): "
+ read -r yn
+ if echo "$yn" | grep -i '^n' >/dev/null 2>&1; then
+ echo "Aborting..."
+ exit 1
+ fi
+ mkdir -p "$BINDIR" || exit 1
+ for link in $links; do
+ ln -s "$APPIMAGE" "$BINDIR/$link" 2>/dev/null \
+ && echo "\"$link\" symlink successfully created in \"$BINDIR\""
+ done
+}
+
+# logic
+if [ -n "$BIN" ] && [ -e "$CURRENTDIR/bin/$BIN" ]; then
+ "$CURRENTDIR/bin/$BIN" "$@" || echo "$UDEVNOTICE"
+elif [ -n "$1" ] && [ -e "$CURRENTDIR/bin/$1" ]; then
+ option="$1"
+ shift
+ "$CURRENTDIR/bin/$option" "$@" || echo "$UDEVNOTICE"
+else
+ case "$1" in
+ '--getudev')
+ _get_udev_rules
+ ;;
+ '--getlinks')
+ _get_symlinks
+ ;;
+ *)
+ echo ""
+ echo "USAGE: \"${APPIMAGE##*/} [ARGUMENT]\""
+ echo "EXAMPLE: \"${APPIMAGE##*/} adb shell\" to enter adb shell"
+ echo ""
+ echo "You can also make a symlink to $APPIMAGE named adb"
+ echo "and run the symlink to enter adb without typing ${APPIMAGE##*/}"
+ echo ""
+ echo 'use "--getlinks" if you want to make the symlinks automatically'
+ echo ""
+ exit 1
+ ;;
+ esac
+fi
diff --git a/AppDir/android-tools.desktop b/AppDir/android-tools.desktop
new file mode 100644
index 0000000..3095196
--- /dev/null
+++ b/AppDir/android-tools.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Name=Android-platform-tools
+Type=Application
+Icon=Android
+Exec=android-tools
+Categories=Utility;
+Terminal=true
+Hidden=true
+
diff --git a/AppDir/android-tools.png b/AppDir/android-tools.png
new file mode 100644
index 0000000000000000000000000000000000000000..c19b5090091430d47a7ecfb8b8c1a8271fbb091d
GIT binary patch
literal 10292
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
txNJsc6VzTr4dD0r<51N9w-QOzWWI;ur_*`> ./android-tools.desktop << 'EOF'
-[Desktop Entry]
-Name=Android-platform-tools
-Type=Application
-Icon=Android
-Exec=android-tools
-Categories=Utility;
-Terminal=true
-Hidden=true
-EOF
-wget "$ICON" -O ./Android.png
-ln -s ./Android.png ./.DirIcon
-
-# BUNDLE ALL DEPENDENCIES
-wget "$LIB4BIN" -O ./lib4bin
-chmod +x ./lib4bin
-
-./lib4bin -p -v -s -k ./shared/bin/*
-
-# AppRun
-cat >> ./AppRun << 'EOF'
-#!/usr/bin/env sh
-CURRENTDIR="$(dirname "$(readlink -f "$0")")"
-UDEVNOTICE='No android udev rules detected, use "--getudev" to install'
-UDEVREPO="https://github.com/M0Rf30/android-udev-rules.git"
-cat /etc/udev/rules.d/*droid.rules >/dev/null 2>&1 && UDEVNOTICE=""
-cat /usr/lib/udev/rules.d/*droid.rules >/dev/null 2>&1 && UDEVNOTICE=""
-BIN="${ARGV0#./}"
-unset ARGV0
-export PATH="$CURRENTDIR/bin:$PATH"
+export ADD_HOOKS="udev-installer.hook"
+export UPINFO="gh-releases-zsync|${GITHUB_REPOSITORY%/*}|${GITHUB_REPOSITORY#*/}|latest|*$ARCH.AppImage.zsync"
+export URUNTIME_PRELOAD=1 # really needed here
-_get_udev_rules() {
- if cat /etc/udev/rules.d/*droid.rules >/dev/null 2>&1 \
- || cat /usr/lib/udev/rules.d/*droid.rules >/dev/null 2>&1; then
- echo "ERROR: udev rules are already installed!"
- echo "Errors persisting with installed udev rules may be due to missing"
- echo "udev rules for device or lack of permissions from device"
- exit 1
- fi
- if ! command -v git >/dev/null 2>&1; then
- echo "ERROR: you need git to use this function"
- exit 1
- fi
- if command -v sudo >/dev/null 2>&1; then
- SUDOCMD="sudo"
- elif command -v doas >/dev/null 2>&1; then
- SUDOCMD="doas"
- else
- echo "ERROR: You need sudo or doas to use this function"
- exit 1
- fi
- printf '%s' "udev rules installer from $UDEVREPO, run installer? (y/N): "
- read -r yn
- if echo "$yn" | grep -i '^y' >/dev/null 2>&1; then
- tmpudev=".udev_rules_tmp.dir"
- git clone "$UDEVREPO" "$tmpudev" && cd "$tmpudev" || exit 1
- chmod +x ./install.sh && "$SUDOCMD" ./install.sh
- cat /etc/udev/rules.d/*droid.rules >/dev/null 2>&1 || exit 1
- cd .. && rm -rf "$tmpudev" || exit 1
- echo "udev rules installed successfully!"
- else
- echo "Aborting..."
- exit 1
- fi
-}
-
-_get_symlinks() {
- BINDIR="${XDG_BIN_HOME:-$HOME/.local/bin}"
- links="$(find "$CURRENTDIR"/shared/bin -maxdepth 1 -exec file {} \; \
- | awk -F":" '/ELF/ {print $1}' | xargs -I {} basename {} 2>/dev/null)"
- echo ""
- echo "This function will make wrapper symlinks in $BINDIR"
- echo "that will point to $APPIMAGE with the names:"
- echo "$links" | tr ' ' '\n'
- echo ""
- echo "Make sure there are not existing files $BINDIR with those names"
- printf '\n%s' "Proceed with the symlink creation? (Y/n): "
- read -r yn
- if echo "$yn" | grep -i '^n' >/dev/null 2>&1; then
- echo "Aborting..."
- exit 1
- fi
- mkdir -p "$BINDIR" || exit 1
- for link in $links; do
- ln -s "$APPIMAGE" "$BINDIR/$link" 2>/dev/null \
- && echo "\"$link\" symlink successfully created in \"$BINDIR\""
- done
-}
-
-# logic
-if [ -n "$BIN" ] && [ -e "$CURRENTDIR/bin/$BIN" ]; then
- "$CURRENTDIR/bin/$BIN" "$@" || echo "$UDEVNOTICE"
-elif [ -n "$1" ] && [ -e "$CURRENTDIR/bin/$1" ]; then
- option="$1"
- shift
- "$CURRENTDIR/bin/$option" "$@" || echo "$UDEVNOTICE"
-else
- case "$1" in
- '--getudev')
- _get_udev_rules
- ;;
- '--getlinks')
- _get_symlinks
- ;;
- *)
- echo ""
- echo "USAGE: \"${APPIMAGE##*/} [ARGUMENT]\""
- echo "EXAMPLE: \"${APPIMAGE##*/} adb shell\" to enter adb shell"
- echo ""
- echo "You can also make a symlink to $APPIMAGE named adb"
- echo "and run the symlink to enter adb without typing ${APPIMAGE##*/}"
- echo ""
- echo 'use "--getlinks" if you want to make the symlinks automatically'
- echo ""
- exit 1
- ;;
- esac
-fi
-EOF
-chmod a+x ./AppRun
-export VERSION="$(awk -F"=" '/vision/ {print $2}' ./shared/bin/source.properties)"
-echo "$VERSION" > ~/version
-
-# Do the thing!
-cd ..
-wget "$APPIMAGETOOL" -O appimagetool
-chmod +x ./appimagetool
-./appimagetool -n -u "$UPINFO" ./AppDir
+# CREATE DIRECTORIES AND DOWNLOAD THE ARCHIVE
+mkdir -p ./AppDir/shared/bin ./AppDir/bin ./AppDir/etc/udev/rules.d
+wget "$BINARY" -O ./bin.zip
+unzip -q ./bin.zip
+rm -f ./bin.zip
+cp -v ./platform-tools/lib64 ./AppDir/bin
+cp -v ./platform-tools/mke2fs.conf ./AppDir/bin
+mv -v ./platform-tools/* ./AppDir/shared/bin
+
+VERSION="$(awk -F"=" '/Revision/{print $2; exit}' ./AppDir/shared/bin/source.properties)"
+[ -n "$VERSION" ] && "$VERSION" > ~/version
+export OUTNAME=Android_Tools-"$VERSION"-anylinux-"$ARCH".AppImage
+
+# add udev rules
+wget --retry-connrefused --tries=30 "$UDEV" -O ./AppDir/etc/udev/rules.d
+
+# DEPLOY ALL LIBS
+wget --retry-connrefused --tries=30 "$SHARUN" -O ./quick-sharun
+chmod +x ./quick-sharun
+./quick-sharun ./AppDir/shared/bin/*
+
+# MAKE APPIMAGE WITH URUNTIME
+wget --retry-connrefused --tries=30 "$URUNTIME" -O ./uruntime2appimage
+chmod +x ./uruntime2appimage
+./uruntime2appimage
UPINFO="$(echo "$UPINFO" | sed 's#.AppImage.zsync#*.AppBundle.zsync#g')"
-wget -O ./pelf "https://github.com/xplshn/pelf/releases/latest/download/pelf_$ARCH"
+wget -O ./pelf "https://github.com/xplshn/pelf/releases/latest/download/pelf_$ARCH"
chmod +x ./pelf
echo "Generating [dwfs]AppBundle..."
./pelf \
@@ -159,7 +50,7 @@ echo "Generating [dwfs]AppBundle..."
--add-updinfo "$UPINFO" \
--compression "-C zstd:level=22 -S26 -B8" \
--appbundle-id="android-tools#github.com/$GITHUB_REPOSITORY:$VERSION@$(date +%d_%m_%Y)" \
- --output-to ./Android-platform-tools-"$VERSION"-"$ARCH".dwfs.AppBundle
+ --output-to ./Android_Tools-"$VERSION"-anylinux-"$ARCH".AppImage
echo "Generating zsync file..."
zsyncmake ./*.AppBundle -u ./*.AppBundle
From 72a0625cb0571a228b85b509bfb2429fa39d889b Mon Sep 17 00:00:00 2001
From: Samuel <36420837+Samueru-sama@users.noreply.github.com>
Date: Sun, 10 Aug 2025 22:52:25 -0400
Subject: [PATCH 02/18] big refactor
---
AppDir/AppRun | 132 ++++++++++++++++++--------------------------------
1 file changed, 47 insertions(+), 85 deletions(-)
diff --git a/AppDir/AppRun b/AppDir/AppRun
index 76389bf..a287fae 100644
--- a/AppDir/AppRun
+++ b/AppDir/AppRun
@@ -1,97 +1,59 @@
-#!/usr/bin/env sh
-CURRENTDIR="$(dirname "$(readlink -f "$0")")"
-UDEVNOTICE='No android udev rules detected, use "--getudev" to install'
-UDEVREPO="https://github.com/M0Rf30/android-udev-rules.git"
-cat /etc/udev/rules.d/*droid.rules >/dev/null 2>&1 && UDEVNOTICE=""
-cat /usr/lib/udev/rules.d/*droid.rules >/dev/null 2>&1 && UDEVNOTICE=""
-BIN="${ARGV0#./}"
-unset ARGV0
-export PATH="$CURRENTDIR/bin:$PATH"
+#!/bin/sh
-_get_udev_rules() {
- if cat /etc/udev/rules.d/*droid.rules >/dev/null 2>&1 \
- || cat /usr/lib/udev/rules.d/*droid.rules >/dev/null 2>&1; then
- echo "ERROR: udev rules are already installed!"
- echo "Errors persisting with installed udev rules may be due to missing"
- echo "udev rules for device or lack of permissions from device"
- exit 1
- fi
- if ! command -v git >/dev/null 2>&1; then
- echo "ERROR: you need git to use this function"
- exit 1
- fi
- if command -v sudo >/dev/null 2>&1; then
- SUDOCMD="sudo"
- elif command -v doas >/dev/null 2>&1; then
- SUDOCMD="doas"
- else
- echo "ERROR: You need sudo or doas to use this function"
- exit 1
- fi
- printf '%s' "udev rules installer from $UDEVREPO, run installer? (y/N): "
- read -r yn
- if echo "$yn" | grep -i '^y' >/dev/null 2>&1; then
- tmpudev=".udev_rules_tmp.dir"
- git clone "$UDEVREPO" "$tmpudev" && cd "$tmpudev" || exit 1
- chmod +x ./install.sh && "$SUDOCMD" ./install.sh
- cat /etc/udev/rules.d/*droid.rules >/dev/null 2>&1 || exit 1
- cd .. && rm -rf "$tmpudev" || exit 1
- echo "udev rules installed successfully!"
- else
- echo "Aborting..."
- exit 1
- fi
-}
+set -e
+
+CURRENTDIR="$(cd "${0%/*}" && echo "$PWD")"
+BINDIR="${XDG_BIN_HOME:-$HOME/.local/bin}"
+BIN="${ARGV0:-$0}"
+BIN="${BIN##*/}"
+unset ARGV0
_get_symlinks() {
- BINDIR="${XDG_BIN_HOME:-$HOME/.local/bin}"
- links="$(find "$CURRENTDIR"/shared/bin -maxdepth 1 -exec file {} \; \
- | awk -F":" '/ELF/ {print $1}' | xargs -I {} basename {} 2>/dev/null)"
+ set -- "$CURRENTDIR"/bin/*
echo ""
echo "This function will make wrapper symlinks in $BINDIR"
- echo "that will point to $APPIMAGE with the names:"
- echo "$links" | tr ' ' '\n'
+ echo "that will point to $APPIMAGE, this way when you run that symlink"
+ echo "it automatically launches that binary without extra arguments"
echo ""
- echo "Make sure there are not existing files $BINDIR with those names"
- printf '\n%s' "Proceed with the symlink creation? (Y/n): "
- read -r yn
- if echo "$yn" | grep -i '^n' >/dev/null 2>&1; then
- echo "Aborting..."
- exit 1
- fi
- mkdir -p "$BINDIR" || exit 1
- for link in $links; do
- ln -s "$APPIMAGE" "$BINDIR/$link" 2>/dev/null \
- && echo "\"$link\" symlink successfully created in \"$BINDIR\""
+ printf '%s' "Proceed with the symlink creation? (Y/n): "; read -r yn
+ case "$yn" in
+ n*|N*) >&2 echo "Aborting..."; exit 1;;
+ esac
+ mkdir -p "$BINDIR"
+ for link do
+ if [ ! -x "$link" ] || [ ! -f "$link" ]; then
+ continue
+ fi
+ link="${link##*/}"
+ ln -s "$APPIMAGE" "$BINDIR"/"$link" 2>/dev/null \
+ && echo "'$link' successfully created in '$BINDIR'"
done
}
-# logic
-if [ -n "$BIN" ] && [ -e "$CURRENTDIR/bin/$BIN" ]; then
- "$CURRENTDIR/bin/$BIN" "$@" || echo "$UDEVNOTICE"
-elif [ -n "$1" ] && [ -e "$CURRENTDIR/bin/$1" ]; then
- option="$1"
+# additional scripts can be placed in the top level bin dir
+# those with a name that ends up .hook will be executed in teh current shell
+# while those that end with bg.hook will be executed in the background
+for hook in "$CURRENTDIR"/bin/*.hook; do
+ [ -x "$hook" ] || continue
+ case "$hook" in
+ *.bg.hook) >&2 echo "exec bg hook: $hook"; "$hook" &;;
+ *.hook) >&2 echo "exec hook: $hook"; "$hook" ;;
+ esac
+done
+
+if [ "$1" = '--getlinks' ]; then
+ _getlinks
+fi
+
+# Check if ARGV0 matches any bundled binary, fallback to $1, then main bin
+if [ -f "$CURRENTDIR"/bin/"$BIN" ]; then
+ exec "$CURRENTDIR"/bin/"$BIN" "$@"
+elif [ -f "$CURRENTDIR"/bin/"$1" ]; then
+ BIN="$1"
shift
- "$CURRENTDIR/bin/$option" "$@" || echo "$UDEVNOTICE"
+ exec "$CURRENTDIR"/bin/"$BIN" "$@"
else
- case "$1" in
- '--getudev')
- _get_udev_rules
- ;;
- '--getlinks')
- _get_symlinks
- ;;
- *)
- echo ""
- echo "USAGE: \"${APPIMAGE##*/} [ARGUMENT]\""
- echo "EXAMPLE: \"${APPIMAGE##*/} adb shell\" to enter adb shell"
- echo ""
- echo "You can also make a symlink to $APPIMAGE named adb"
- echo "and run the symlink to enter adb without typing ${APPIMAGE##*/}"
- echo ""
- echo 'use "--getlinks" if you want to make the symlinks automatically'
- echo ""
- exit 1
- ;;
- esac
+ >&2 echo "Using default binary adb..."
+ >&2 echo "Run ${APPIMAGE##*/} --getlinks for more info"
+ exec "$CURRENTDIR"/bin/adb "$@"
fi
From 425c2eaedbd5df9ffac9eccbd516061afbf0ca51 Mon Sep 17 00:00:00 2001
From: Samuel <36420837+Samueru-sama@users.noreply.github.com>
Date: Sun, 10 Aug 2025 22:53:55 -0400
Subject: [PATCH 03/18] Delete Android.png
---
Android.png | Bin 38857 -> 0 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 Android.png
diff --git a/Android.png b/Android.png
deleted file mode 100644
index 879461a2b717106e007bcda906a3f47eb1ec1e88..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 38857
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