botdevice/rom/install.sh

313 lines
11 KiB
Bash
Executable file

#!/bin/bash
# BotOS Installation Script
# Escolha o nível de instalação baseado no seu dispositivo
#
# Uso: ./install.sh
set -e
cd "$(dirname "$0")"
# Cores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
clear
echo -e "${CYAN}"
cat << 'BANNER'
╔══════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ ██████╗ ████████╗ ██████╗ ███████╗ ║
║ ██╔══██╗██╔═══██╗╚══██╔══╝██╔═══██╗██╔════╝ ║
║ ██████╔╝██║ ██║ ██║ ██║ ██║███████╗ ║
║ ██╔══██╗██║ ██║ ██║ ██║ ██║╚════██║ ║
║ ██████╔╝╚██████╔╝ ██║ ╚██████╔╝███████║ ║
║ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝ ║
║ ║
║ Android OS by General Bots ║
║ Pragmatismo.io ║
║ ║
╚══════════════════════════════════════════════════════════════════════════════╝
BANNER
echo -e "${NC}"
# =====================================================
# Verificações
# =====================================================
check_adb() {
if ! command -v adb &> /dev/null; then
echo -e "${RED}ERRO: ADB não encontrado!${NC}"
echo "Instale com: sudo apt install adb"
return 1
fi
return 0
}
check_device() {
if ! adb devices | grep -q "device$"; then
echo -e "${YELLOW}Nenhum dispositivo conectado.${NC}"
echo ""
echo "Para conectar:"
echo " 1. Ative 'Opções do desenvolvedor' no celular"
echo " (Configurações → Sobre → Tocar 7x no 'Número da versão')"
echo " 2. Ative 'Depuração USB'"
echo " 3. Conecte o cabo USB"
echo " 4. Autorize no celular quando solicitado"
echo ""
return 1
fi
DEVICE=$(adb shell getprop ro.product.model 2>/dev/null | tr -d '\r')
BRAND=$(adb shell getprop ro.product.brand 2>/dev/null | tr -d '\r')
ANDROID=$(adb shell getprop ro.build.version.release 2>/dev/null | tr -d '\r')
echo -e "${GREEN}Dispositivo conectado: $BRAND $DEVICE (Android $ANDROID)${NC}"
return 0
}
check_root() {
if adb shell su -c "id" 2>/dev/null | grep -q "uid=0"; then
echo -e "${GREEN}Root detectado!${NC}"
return 0
else
echo -e "${YELLOW}Dispositivo NÃO tem root.${NC}"
return 1
fi
}
check_magisk() {
if adb shell pm list packages 2>/dev/null | grep -q "com.topjohnwu.magisk"; then
echo -e "${GREEN}Magisk detectado!${NC}"
return 0
else
return 1
fi
}
check_treble() {
local treble=$(adb shell getprop ro.treble.enabled 2>/dev/null | tr -d '\r')
if [ "$treble" == "true" ]; then
echo -e "${GREEN}Project Treble: Suportado${NC}"
return 0
else
echo -e "${YELLOW}Project Treble: NÃO suportado${NC}"
return 1
fi
}
check_bootloader() {
local unlocked=$(adb shell getprop ro.boot.flash.locked 2>/dev/null | tr -d '\r')
if [ "$unlocked" == "0" ]; then
echo -e "${GREEN}Bootloader: Desbloqueado${NC}"
return 0
else
echo -e "${YELLOW}Bootloader: Bloqueado${NC}"
return 1
fi
}
# =====================================================
# Instalação
# =====================================================
install_level_1() {
echo -e "\n${BLUE}=== Nível 1: Debloat + BotOS Launcher ===${NC}"
echo "Removendo bloatware e instalando BotOS como app..."
echo ""
# Executar debloat
bash scripts/debloat.sh
}
install_level_2() {
echo -e "\n${BLUE}=== Nível 2: Magisk Module ===${NC}"
echo "Instalando módulo Magisk com boot animation + BotOS system app..."
echo ""
# Verificar se tem APK compilado
if [ ! -f "../gen/android/app/build/outputs/apk/release/app-release.apk" ]; then
echo -e "${YELLOW}APK do BotOS não encontrado.${NC}"
echo "Compilando..."
cd ..
cargo tauri android build --release || {
echo -e "${RED}Erro na compilação. Configure o ambiente Tauri primeiro.${NC}"
return 1
}
cd rom
fi
# Gerar boot animation
if [ ! -f "../bootanimation.zip" ]; then
echo "Gerando boot animation..."
bash ../scripts/create-bootanimation.sh || true
fi
# Build Magisk module
bash scripts/build-magisk-module.sh
# Instalar
if [ -f "botos-magisk-v1.0.zip" ]; then
echo "Copiando módulo para dispositivo..."
adb push botos-magisk-v1.0.zip /sdcard/
echo ""
echo -e "${GREEN}Módulo copiado!${NC}"
echo ""
echo "Para completar a instalação:"
echo " 1. Abra o Magisk Manager no celular"
echo " 2. Vá em 'Modules' (Módulos)"
echo " 3. Toque em '+' e selecione 'botos-magisk-v1.0.zip'"
echo " 4. Reinicie o dispositivo"
fi
}
install_level_3() {
echo -e "\n${BLUE}=== Nível 3: GSI Flash ===${NC}"
echo "Instalando GSI completa com BotOS..."
echo ""
echo -e "${YELLOW}AVISO: Isso irá APAGAR todos os dados do dispositivo!${NC}"
echo ""
read -p "Tem certeza? Digite 'SIM' para continuar: " confirm
if [ "$confirm" != "SIM" ]; then
echo "Cancelado."
return 1
fi
# Verificar requisitos
check_treble || {
echo -e "${RED}Dispositivo não suporta Project Treble.${NC}"
return 1
}
check_bootloader || {
echo -e "${YELLOW}Bootloader precisa ser desbloqueado primeiro.${NC}"
echo ""
echo "Instruções:"
echo " 1. Habilite 'OEM unlocking' nas opções do desenvolvedor"
echo " 2. adb reboot bootloader"
echo " 3. fastboot flashing unlock"
echo " 4. Confirme no dispositivo"
return 1
fi
echo ""
echo "Para GSI, você precisa:"
echo " 1. Baixar uma GSI base (ex: phh-treble)"
echo " 2. Ou compilar AOSP com os arquivos em gsi/"
echo ""
echo "Veja gsi/README.md para instruções detalhadas."
}
show_device_info() {
echo -e "\n${BLUE}=== Informações do Dispositivo ===${NC}\n"
check_device || return 1
echo ""
check_root && HAS_ROOT=1 || HAS_ROOT=0
check_magisk && HAS_MAGISK=1 || HAS_MAGISK=0
check_treble && HAS_TREBLE=1 || HAS_TREBLE=0
check_bootloader && HAS_UNLOCKED=1 || HAS_UNLOCKED=0
echo ""
echo -e "${CYAN}Opções disponíveis para este dispositivo:${NC}"
echo ""
echo -e " ${GREEN}${NC} Nível 1 (Debloat + App) - Sempre disponível"
if [ "$HAS_MAGISK" == "1" ]; then
echo -e " ${GREEN}${NC} Nível 2 (Magisk Module) - Magisk detectado"
else
echo -e " ${YELLOW}?${NC} Nível 2 (Magisk Module) - Requer Magisk instalado"
fi
if [ "$HAS_TREBLE" == "1" ] && [ "$HAS_UNLOCKED" == "1" ]; then
echo -e " ${GREEN}${NC} Nível 3 (GSI) - Treble + Bootloader desbloqueado"
else
echo -e " ${RED}${NC} Nível 3 (GSI) - Requer Treble + bootloader desbloqueado"
fi
}
# =====================================================
# Menu Principal
# =====================================================
main_menu() {
while true; do
echo ""
echo -e "${CYAN}═══════════════════════════════════════════════════════════════${NC}"
echo -e "${CYAN} MENU DE INSTALAÇÃO ${NC}"
echo -e "${CYAN}═══════════════════════════════════════════════════════════════${NC}"
echo ""
echo " 1) Ver informações do dispositivo"
echo ""
echo " 2) Nível 1: Debloat + BotOS Launcher (SEM root)"
echo " Remove bloatware via ADB, instala BotOS como app"
echo ""
echo " 3) Nível 2: Magisk Module (COM root)"
echo " Boot animation GB, BotOS como system app, bloat removido"
echo ""
echo " 4) Nível 3: GSI Flash (Bootloader desbloqueado)"
echo " Substitui Android inteiro por BotOS"
echo ""
echo " 5) Compilar BotOS APK"
echo ""
echo " 6) Gerar Boot Animation"
echo ""
echo " 0) Sair"
echo ""
read -p "Escolha [0-6]: " choice
case $choice in
1)
check_adb && show_device_info
;;
2)
check_adb && check_device && install_level_1
;;
3)
check_adb && check_device && install_level_2
;;
4)
check_adb && check_device && install_level_3
;;
5)
echo -e "\n${BLUE}Compilando BotOS APK...${NC}\n"
cd ..
cargo tauri android build --release
cd rom
echo -e "${GREEN}APK gerado em gen/android/app/build/outputs/apk/${NC}"
;;
6)
echo -e "\n${BLUE}Gerando boot animation...${NC}\n"
bash ../scripts/create-bootanimation.sh
;;
0)
echo -e "\n${GREEN}Até logo!${NC}\n"
exit 0
;;
*)
echo -e "${RED}Opção inválida${NC}"
;;
esac
echo ""
read -p "Pressione ENTER para continuar..."
clear
done
}
# =====================================================
# Início
# =====================================================
# Verificar se ADB está disponível
check_adb || exit 1
# Mostrar menu
main_menu