botdevice/rom/scripts/build-magisk-module.sh

286 lines
9.9 KiB
Bash
Executable file

#!/bin/bash
# Build BotOS Magisk Module
# Substitui boot animation, launcher padrão, e configurações do sistema
#
# O módulo será instalado via Magisk Manager
set -e
cd "$(dirname "$0")/.."
MODULE_DIR="magisk-module"
MODULE_ZIP="botos-magisk-v1.0.zip"
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ Building BotOS Magisk Module ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
# Limpar e criar estrutura
rm -rf "$MODULE_DIR"
mkdir -p "$MODULE_DIR/META-INF/com/google/android"
mkdir -p "$MODULE_DIR/system/media"
mkdir -p "$MODULE_DIR/system/etc/permissions"
mkdir -p "$MODULE_DIR/system/priv-app/BotOS"
mkdir -p "$MODULE_DIR/common"
# =====================================================
# module.prop - Metadados do módulo
# =====================================================
cat > "$MODULE_DIR/module.prop" << 'EOF'
id=botos
name=BotOS - General Bots Launcher
version=v1.0
versionCode=1
author=Pragmatismo.io
description=Transforma seu Android em BotOS - Remove bloatware, substitui boot animation e define BotOS como launcher padrão
EOF
# =====================================================
# update-binary - Script de instalação
# =====================================================
cat > "$MODULE_DIR/META-INF/com/google/android/update-binary" << 'INSTALLER'
#!/sbin/sh
#################
# Initialization
#################
TMPDIR=/dev/tmp
PERSISTDIR=/sbin/.magisk/mirror/persist
rm -rf $TMPDIR 2>/dev/null
mkdir -p $TMPDIR
# echo before loading util_functions
ui_print() { echo "$1"; }
require_new_magisk() {
ui_print "*******************************"
ui_print " Please install Magisk v20.4+! "
ui_print "*******************************"
exit 1
}
##########################
# Load util_functions.sh
##########################
OUTFD=$2
ZIPFILE=$3
mount /data 2>/dev/null
[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk
. /data/adb/magisk/util_functions.sh
[ $MAGISK_VER_CODE -lt 20400 ] && require_new_magisk
install_module
exit 0
INSTALLER
chmod 755 "$MODULE_DIR/META-INF/com/google/android/update-binary"
# =====================================================
# updater-script (vazio, necessário para compatibilidade)
# =====================================================
echo "#MAGISK" > "$MODULE_DIR/META-INF/com/google/android/updater-script"
# =====================================================
# customize.sh - Script de customização pós-instalação
# =====================================================
cat > "$MODULE_DIR/customize.sh" << 'CUSTOMIZE'
#!/system/bin/sh
# BotOS Magisk Module - Customization Script
ui_print "╔══════════════════════════════════════════════════════════════╗"
ui_print "║ Installing BotOS ║"
ui_print "╚══════════════════════════════════════════════════════════════╝"
ui_print ""
# Verificar arquitetura
ARCH=$(getprop ro.product.cpu.abi)
ui_print "- Device architecture: $ARCH"
ui_print "- Android version: $(getprop ro.build.version.release)"
ui_print "- Device: $(getprop ro.product.model)"
ui_print ""
# Copiar boot animation se existir
if [ -f "$MODPATH/bootanimation.zip" ]; then
ui_print "- Installing custom boot animation..."
mkdir -p "$MODPATH/system/media"
cp "$MODPATH/bootanimation.zip" "$MODPATH/system/media/"
fi
# Copiar APK do BotOS se existir
if [ -f "$MODPATH/BotOS.apk" ]; then
ui_print "- Installing BotOS launcher as system app..."
mkdir -p "$MODPATH/system/priv-app/BotOS"
cp "$MODPATH/BotOS.apk" "$MODPATH/system/priv-app/BotOS/"
fi
# Configurar permissões
ui_print "- Setting permissions..."
set_perm_recursive $MODPATH 0 0 0755 0644
if [ -d "$MODPATH/system/priv-app" ]; then
set_perm_recursive "$MODPATH/system/priv-app" 0 0 0755 0644
fi
ui_print ""
ui_print "╔══════════════════════════════════════════════════════════════╗"
ui_print "║ BotOS installed successfully! ║"
ui_print "║ ║"
ui_print "║ After reboot: ║"
ui_print "║ 1. Press Home button ║"
ui_print "║ 2. Select 'BotOS' as default launcher ║"
ui_print "║ 3. Choose 'Always' ║"
ui_print "╚══════════════════════════════════════════════════════════════╝"
CUSTOMIZE
chmod 755 "$MODULE_DIR/customize.sh"
# =====================================================
# post-fs-data.sh - Executado no boot (após fs montado)
# =====================================================
cat > "$MODULE_DIR/post-fs-data.sh" << 'POSTFS'
#!/system/bin/sh
# BotOS - Post-FS-Data Script
# Executado após o sistema de arquivos ser montado
MODDIR=${0%/*}
# Log
log -t BotOS "BotOS module post-fs-data started"
# Desabilitar apps de fabricante (overlay)
# Isso "esconde" os apps sem deletá-los
for bloat in \
"com.facebook.katana" \
"com.facebook.appmanager" \
"com.facebook.services" \
"com.samsung.android.bixby.agent" \
"com.samsung.android.bixby.service" \
"com.huawei.appmarket" \
"com.miui.msa.global" \
"com.miui.analytics"
do
# Criar diretório vazio para "substituir" o app
if [ -d "/system/app/$bloat" ]; then
mkdir -p "$MODDIR/system/app/$bloat"
touch "$MODDIR/system/app/$bloat/.replace"
fi
if [ -d "/system/priv-app/$bloat" ]; then
mkdir -p "$MODDIR/system/priv-app/$bloat"
touch "$MODDIR/system/priv-app/$bloat/.replace"
fi
done
log -t BotOS "BotOS bloatware disabled via overlay"
POSTFS
chmod 755 "$MODULE_DIR/post-fs-data.sh"
# =====================================================
# service.sh - Executado como serviço no boot
# =====================================================
cat > "$MODULE_DIR/service.sh" << 'SERVICE'
#!/system/bin/sh
# BotOS - Service Script
# Executado como serviço após o boot completar
MODDIR=${0%/*}
# Aguardar boot completar
while [ "$(getprop sys.boot_completed)" != "1" ]; do
sleep 1
done
# Aguardar mais um pouco para sistema estabilizar
sleep 5
log -t BotOS "BotOS service started"
# Configurar BotOS como launcher padrão (se instalado)
BOTOS_PKG="br.com.pragmatismo.botos"
if pm list packages | grep -q "$BOTOS_PKG"; then
# Tentar definir como launcher padrão
# Nota: Isso pode não funcionar em todos os dispositivos
pm set-home-activity "$BOTOS_PKG/.MainActivity" 2>/dev/null || true
log -t BotOS "BotOS set as preferred launcher"
fi
# Desabilitar analytics/telemetria de fabricantes
settings put global upload_apk_enable 0 2>/dev/null || true
settings put secure send_action_app_error 0 2>/dev/null || true
# Ativar modo imersivo (esconde barra de navegação)
# settings put global policy_control immersive.full=* 2>/dev/null || true
log -t BotOS "BotOS service configuration complete"
SERVICE
chmod 755 "$MODULE_DIR/service.sh"
# =====================================================
# uninstall.sh - Script de desinstalação
# =====================================================
cat > "$MODULE_DIR/uninstall.sh" << 'UNINSTALL'
#!/system/bin/sh
# BotOS - Uninstall Script
# Restaurar launcher padrão do sistema
# (O Magisk automaticamente remove os overlays)
log -t BotOS "BotOS module uninstalled"
UNINSTALL
chmod 755 "$MODULE_DIR/uninstall.sh"
# =====================================================
# Copiar boot animation se existir
# =====================================================
if [ -f "../bootanimation.zip" ]; then
echo "- Incluindo boot animation customizada..."
cp "../bootanimation.zip" "$MODULE_DIR/"
else
echo "- Boot animation não encontrada."
echo " Execute ../scripts/create-bootanimation.sh primeiro."
fi
# =====================================================
# Copiar APK do BotOS se existir
# =====================================================
APK_PATH="../gen/android/app/build/outputs/apk/release/app-release.apk"
if [ -f "$APK_PATH" ]; then
echo "- Incluindo BotOS APK..."
cp "$APK_PATH" "$MODULE_DIR/BotOS.apk"
else
echo "- APK não encontrado."
echo " Compile com: cd .. && cargo tauri android build --release"
fi
# =====================================================
# Criar arquivo ZIP do módulo
# =====================================================
echo ""
echo "Criando $MODULE_ZIP..."
cd "$MODULE_DIR"
zip -r "../$MODULE_ZIP" . -x "*.DS_Store"
cd ..
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ Magisk Module criado com sucesso! ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
echo "Arquivo: $(pwd)/$MODULE_ZIP"
echo ""
echo "Para instalar:"
echo " 1. Copie para o dispositivo:"
echo " adb push $MODULE_ZIP /sdcard/"
echo ""
echo " 2. Abra o Magisk Manager"
echo " 3. Vá em 'Modules' → '+' → Selecione o ZIP"
echo " 4. Reinicie o dispositivo"
echo ""