🔍
Главная Сообщения Модели FAQ Мультимедиа

MCU Huge

Штатное головное устройство в моделях Aeolus Huge с Android 9
DongFeng Aeolus » Мультимедиа системы Dongfeng » MCU Huge » Dongfeng Huge 2026 (Android 11): Устанавливаем ES File Explorer с флешки без ноутбука и паролей ADB
🚗 MCU Huge
👁 34 💬 9 ❤️ 0

Dongfeng Huge 2026 (Android 11): Устанавливаем ES File Explorer с флешки без ноутбука и паролей ADB

Talik
Администраторы
Давайте начистоту. Раньше у нас была красивая, отлаженная схема. Мы брали магнитолу, вводили заветный пароль ADB (привет тем, кто еще помнит статью №12), подключали ноутбук и ставили нужный софт. Это работало как швейцарские часы.

А потом вышел Dongfeng Aeolus HUGE 2026 года с Android 11 и оболочкой WindLink X 3.0.

Разработчики, видимо, решили, что мы слишком расслабились, и просто сменили все заводские пароли для активации ADB. Или забыли их записать. Или решили, что владельцу огромного кроссовера совершенно не нужно устанавливать сторонние приложения. Причина нам неизвестна, но результат один: старый метод умер.
Ну как умер... Скажем так, он ушел в глубокий андеграунд и отрастил бороду. Работать он все еще работает, но теперь требует прохождения небольшого квеста в лучших традициях бюрократии:

  1. Сначала запускаем скрипт, который автоматически открывает меню настроек Android (вот тут готовый скрипт).
  2. Дальше классика жанра: находим в настройках пункт «О телефоне» → «Номер сборки» и начинаем методично тыкать в него раз семь-десять, как будто вы пытаетесь сломать сенсорный экран.
  3. Появляется заветная надпись: «Вы стали разработчиком!» (поздравляем, вы только что прошли обряд посвящения).
  4. Возвращаемся в настройки, находим свежеразвеявшееся меню «Для разработчиков» и включаем там отладку по USB.
  5. Всё, миссия выполнена. Теперь пароль не нужен, кабель работает, и вы можете снова подключать ноутбук и устанавливать приложения по старинке.

По сути, китайские инженеры заменили пароль на процедуру, которая занимает минут пять вместо пяти секунд. Прогресс, что называется, налицо.

Хорошая новость в том, что нам больше не нужен ноутбук, пароли или танцы с бубном вокруг командной строки. Мы написали скрипт, который делает то же самое, что и наши решения для Shine GS и Box: находит файл на флешке и устанавливает его, используя встроенную функцию автозапуска магнитолы.

Просто теперь этот скрипт стал умнее, потому что Android 11 стал капризнее.

Dongfeng Huge 2026 (Android 11): Устанавливаем ES File Explorer с флешки без ноутбука и паролей ADB



В чем сложность установки на Android 11?

Если коротко: система защиты. В новых прошивках раздел /system по умолчанию жестко заблокирован для записи (Read-Only). Чтобы сделать приложение системным (а нам это нужно, чтобы ES File Explorer мог перехватывать подключение флешек и устанавливать другие APK в один клик), скрипт должен временно перемонтировать этот раздел в режим записи (Read-Write).

Проблема в том, что китайские инженеры любят называть системные разделы по-разному в зависимости от настроения (или партии железа). Поэтому наш скрипт не просто пробует один способ. Он методично перебирает пять разных вариантов монтирования, прежде чем сдаться или использовать запасной план.

Мысль вслух: Если с первого раза не получилось, попробуй еще четыре раза разными командами, а если и это не сработает — просто установи приложение как обычное, без прав суперпользователя. Примерно так мыслит этот скрипт. И это прекрасно.



Скрипт установки ES File Explorer (Версия 2.0 для Huge 2026)

Этот код делает всю грязную работу за вас. Он ищет флешку, находит APK, пытается получить права на запись в систему, копирует файл, выставляет правильные права доступа (SELinux) и, что самое важное, пишет подробный отчет прямо на вашу флешку.
#!/system/bin/sh
# ============================================================================
# УНИВЕРСАЛЬНЫЙ УСТАНОВЩИК ES FILE EXPLORER
# Версия: 3.0
# Поддержка: Android 8.1 (Shine, Shine GS, Box, Mage) + Android 10 (Huge)
# ============================================================================
# Проект: Автоматическая установка приложений на магнитолы Dongfeng Aeolus
# Форум: https://dongfeng-aeolus.ru/community/topicid/422/
# Телеграм: https://t.me/aeolusshinegs
# Репозиторий: https://github.com/tcse/dongfeng-aeolus.ru
# Лицензия: GNU GPLv3
# ============================================================================

# ========== ИНИЦИАЛИЗАЦИЯ ЛОГА (во внутренней памяти!) ==========
LOG_FILE="/data/local/tmp/es_install_$(date +%Y%m%d_%H%M%S).log"
USB_LOG=""
APK_PATH=""
USB_PATH=""
TARGET_DIR=""
INSTALL_SUCCESS=false

# Функция логирования (с актуальным временем)
log() {
    TS=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[$TS] $1" | tee -a "$LOG_FILE"
    [ -n "$USB_LOG" ] && echo "[$TS] $1" >> "$USB_LOG" 2>/dev/null
    return 0
}

# ============================================================================
# БЛОК 1: ПОИСК USB ФЛЕШКИ С APK
# ============================================================================
find_usb_apk() {
    log "Поиск USB флешки с es.apk..."

    # Приоритетные пути (в порядке вероятности)
    for base in /mnt/media_rw /storage /mnt; do
        [ -d "$base" ] || continue

        # Перебираем все подпапки в base
        for sub in "$base"/*; do
            [ -d "$sub" ] || continue

            # Пропускаем внутреннюю память и системные папки
            case "$sub" in
                */emulated*|*/self*|*/sdcard*|*/0) continue ;;
            esac

            # 1a. Приоритетный путь: update/soft/es.apk
            if [ -f "$sub/update/soft/es.apk" ]; then
                APK_PATH="$sub/update/soft/es.apk"
                USB_PATH="$sub"
                return 0
            fi

            # 1b. Просто es.apk в корне флешки
            if [ -f "$sub/es.apk" ]; then
                APK_PATH="$sub/es.apk"
                USB_PATH="$sub"
                return 0
            fi

            # 1c. Любой *.apk с "es" в имени (регистронезависимо)
            for f in "$sub"/*.apk "$sub"/*/*.apk; do
                [ -f "$f" ] || continue
                fname=$(basename "$f" | tr 'A-Z' 'a-z')
                case "$fname" in
                    *es*.apk)
                        APK_PATH="$f"
                        USB_PATH=$(dirname "$f")
                        return 0
                        ;;
                esac
            done
        done
    done
    return 1
}

# ============================================================================
# БЛОК 2: ПРОВЕРКА СТАТУСА МОНТИРОВАНИЯ
# ============================================================================
check_mount_status() {
    # Проверяем: либо overlay на /system, либо реальный rw-remount
    if mount | grep -qE "overlay on /system| /system .* rw,"; then
        return 0  # RW доступен
    fi
    # Дополнительная проверка — пробуем записать
    if touch /system/.rw_test 2>/dev/null; then
        rm -f /system/.rw_test 2>/dev/null
        return 0
    fi
    return 1
}

# ============================================================================
# БЛОК 3: МОНТИРОВАНИЕ /system В RW (overlay для Android 10 + fallbacks)
# ============================================================================
mount_system_rw() {
    log "Попытка монтирования /system в RW..."

    # Уже RW?
    if check_mount_status; then
        log "✅ /system уже доступен для записи"
        return 0
    fi

    # --- Способ 1: overlay (правильный для Android 10) ---
    log "Попытка 1: overlay lowerdir=/system,upperdir=/data/overlay/upper"
    mkdir -p /data/overlay/upper /data/overlay/work 2>/dev/null
    mount -t overlay overlay \
        -o lowerdir=/system,upperdir=/data/overlay/upper,workdir=/data/overlay/work \
        /system >> "$LOG_FILE" 2>&1
    if check_mount_status; then
        log "✅ overlay смонтирован"
        return 0
    fi
    log "✗ overlay не сработал"

    # --- Способ 2: remount по реальному блочному устройству ---
    SYS_DEV=$(mount | awk '$3=="/system"{print $1; exit}')
    [ -z "$SYS_DEV" ] && SYS_DEV=$(mount | awk '$3=="/"{print $1; exit}')

    if [ -n "$SYS_DEV" ]; then
        log "Попытка 2: mount -o rw,remount $SYS_DEV /"
        mount -o rw,remount "$SYS_DEV" / >> "$LOG_FILE" 2>&1
        if check_mount_status; then
            log "✅ remount удался через $SYS_DEV"
            return 0
        fi
        log "✗ remount через $SYS_DEV не сработал"
    fi

    # --- Способ 3: dm-3 (динамический раздел Android 10) ---
    for blk in /dev/block/dm-3 /dev/block/dm-2 /dev/block/dm-1; do
        [ -e "$blk" ] || continue
        log "Попытка 3: mount -o rw,remount $blk /"
        mount -o rw,remount "$blk" / >> "$LOG_FILE" 2>&1
        if check_mount_status; then
            log "✅ remount удался через $blk"
            return 0
        fi
    done

    # --- Способ 4: by-name/system ---
    for blk in /dev/block/by-name/system /dev/block/by-name/system_a /dev/block/by-name/system_b; do
        [ -e "$blk" ] || continue
        log "Попытка 4: mount -o rw,remount $blk /"
        mount -o rw,remount "$blk" / >> "$LOG_FILE" 2>&1
        if check_mount_status; then
            log "✅ remount удался через $blk"
            return 0
        fi
    done

    # --- Способ 5: классический /system ---
    log "Попытка 5: mount -o remount,rw /system"
    mount -o remount,rw /system >> "$LOG_FILE" 2>&1
    if check_mount_status; then
        log "✅ remount через /system удался"
        return 0
    fi

    # --- Способ 6: busybox ---
    log "Попытка 6: busybox mount -o remount,rw /system"
    busybox mount -o remount,rw /system >> "$LOG_FILE" 2>&1
    if check_mount_status; then
        log "✅ busybox remount удался"
        return 0
    fi

    # --- Способ 7: remount / ---
    log "Попытка 7: mount -o rw,remount /"
    mount -o rw,remount / >> "$LOG_FILE" 2>&1
    if check_mount_status; then
        log "✅ remount / удался"
        return 0
    fi

    log "❌ ВСЕ СПОСОБЫ МОНТИРОВАНИЯ НЕ СРАБОТАЛИ"
    log "Текущее состояние монтирования:"
    mount | grep -E " /system | / " >> "$LOG_FILE" 2>&1
    return 1
}

# ============================================================================
# ОСНОВНАЯ ПРОГРАММА
# ============================================================================

log "=================================================="
log "УСТАНОВКА ES FILE EXPLORER v3.0"
log "Время начала: $(date '+%Y-%m-%d %H:%M:%S')"
log "User: $(id)"
log "Скрипт запущен из: $0"
log "=================================================="

# ---------------------------------------------------------------------------
# ШАГ 1: ПОИСК USB ФЛЕШКИ
# ---------------------------------------------------------------------------
log ""
log "=== ШАГ 1: ПОИСК USB ФЛЕШКИ ==="

if ! find_usb_apk; then
    log "❌ КРИТИЧЕСКАЯ ОШИБКА: es.apk не найден на USB!"
    log ""
    log "ДИАГНОСТИКА:"
    log "1. Подключенные устройства хранения:"
    df -h 2>&1 | grep -E "/storage|/mnt|/udisk|/media" >> "$LOG_FILE"
    log "2. Содержимое /storage:"
    ls -la /storage/ >> "$LOG_FILE" 2>&1
    log "3. Содержимое /mnt:"
    ls -la /mnt/ >> "$LOG_FILE" 2>&1
    log "4. Содержимое /mnt/media_rw:"
    ls -la /mnt/media_rw/ >> "$LOG_FILE" 2>&1
    log ""
    log "РЕКОМЕНДАЦИИ:"
    log "  - Убедитесь, что USB флешка подключена"
    log "  - Файл должен быть: /update/soft/es.apk или /es.apk"
    log "  - Проверьте, что флешка не смонтирована как /storage/emulated"
    exit 1
fi

# Флешка найдена — теперь можно создать лог на ней
USB_LOG="$USB_PATH/es_install_$(date +%Y%m%d_%H%M%S).log"
cp "$LOG_FILE" "$USB_LOG" 2>/dev/null

log ""
log "✅ USB ФЛЕШКА ОБНАРУЖЕНА!"
log "  Путь к флешке: $USB_PATH"
log "  Файл APK: $APK_PATH"

if [ -f "$APK_PATH" ]; then
    FILE_INFO=$(ls -lh "$APK_PATH" 2>/dev/null)
    FILE_SIZE=$(echo "$FILE_INFO" | awk '{print $5}')
    FILE_PERM=$(echo "$FILE_INFO" | awk '{print $1}')
    log "  Размер: $FILE_SIZE"
    log "  Права: $FILE_PERM"
fi

# ---------------------------------------------------------------------------
# ШАГ 2: АНАЛИЗ СИСТЕМЫ
# ---------------------------------------------------------------------------
log ""
log "=== ШАГ 2: АНАЛИЗ СИСТЕМЫ ==="

if [ -d "/system/priv-app" ]; then
    PRIVAPP_COUNT=$(ls -d /system/priv-app/* 2>/dev/null | wc -l)
    log "  /system/priv-app: существует ($PRIVAPP_COUNT приложений)"
fi
if [ -d "/system/app" ]; then
    APP_COUNT=$(ls -d /system/app/* 2>/dev/null | wc -l)
    log "  /system/app: существует ($APP_COUNT приложений)"
fi
if [ -d "/system/product/app" ]; then
    log "  /system/product/app: существует"
fi

# Выбор целевой директории
if [ -d "/system/priv-app" ]; then
    TARGET_DIR="/system/priv-app/ESFileExplorer"
    log "  Выбрано: /system/priv-app (привилегированные права)"
elif [ -d "/system/app" ]; then
    TARGET_DIR="/system/app/ESFileExplorer"
    log "  Выбрано: /system/app"
else
    log "❌ Нет доступных системных директорий!"
    exit 1
fi
log "  Целевая папка: $TARGET_DIR"

# Проверка существующей установки
log ""
log "Проверка существующей установки:"
EXISTING_PATHS=(
    "/system/priv-app/ESFileExplorer"
    "/system/priv-app/ES"
    "/system/priv-app/es"
    "/system/priv-app/com.estrongs.android.pop"
    "/system/app/ESFileExplorer"
    "/system/app/ES"
    "/system/app/es"
    "/system/app/com.estrongs.android.pop"
    "/system/product/app/ESFileExplorer"
    "/system/product/app/com.estrongs.android.pop"
)
FOUND_EXISTING=false
for ep in "${EXISTING_PATHS[@]}"; do
    if [ -d "$ep" ]; then
        log "  ⚠ Найдена установка: $ep"
        FOUND_EXISTING=true
    fi
done
[ "$FOUND_EXISTING" = false ] && log "  Существующая установка не обнаружена"

# ---------------------------------------------------------------------------
# ШАГ 3: УСТАНОВКА
# ---------------------------------------------------------------------------
log ""
log "=== ШАГ 3: УСТАНОВКА ==="

# --- 3.1. Сначала пробуем обычную установку через pm install ---
log ""
log "Попытка 1: pm install (не требует RW на /system)"
pm install -r "$APK_PATH" >> "$LOG_FILE" 2>&1
PM_RESULT=$?

if [ $PM_RESULT -eq 0 ]; then
    log "✅ ES установлен через pm install!"
    log "   Пакет: $(pm list packages 2>/dev/null | grep estrongs)"
    INSTALL_SUCCESS=true

    # Дополнительно: пробуем сделать системным (если получится — отлично)
    log ""
    log "Попытка сделать приложение системным (опционально)..."
    if mount_system_rw; then
        mkdir -p "$TARGET_DIR" 2>/dev/null
        cp "$APK_PATH" "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null
        if [ -f "$TARGET_DIR/ESFileExplorer.apk" ]; then
            chmod 755 "$TARGET_DIR" 2>/dev/null
            chmod 644 "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null
            chown system:system "$TARGET_DIR" 2>/dev/null
            chown system:system "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null
            chcon u:object_r:system_file:s0 "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null || true
            log "✅ APK также скопирован в $TARGET_DIR"
        fi
        mount -o remount,ro /system 2>/dev/null
    else
        log "ℹ️ Системная установка не удалась — оставляем как пользовательское"
    fi
else
    log "⚠️ pm install не сработал (код: $PM_RESULT)"
    log "Переходим к системной установке..."

    # --- 3.2. Системная установка ---
    if ! mount_system_rw; then
        log "❌ Система не монтируется в RW. Установка невозможна."
        log ""
        log "ВОЗМОЖНЫЕ РЕШЕНИЯ:"
        log "  1. Устройство с Magisk — установите модуль 'System RW'"
        log "  2. Перезагрузите устройство и запустите скрипт снова"
        log "  3. Используйте pm install (установка как пользовательское)"
        cp "$LOG_FILE" "$USB_LOG" 2>/dev/null
        sync
        exit 1
    fi

    # Финальная проверка записи
    if ! touch /system/.rw_test 2>/dev/null; then
        log "❌ /system всё ещё только для чтения. Отмена."
        cp "$LOG_FILE" "$USB_LOG" 2>/dev/null
        sync
        exit 1
    fi
    rm -f /system/.rw_test 2>/dev/null

    # Удаление старых версий
    log "Очистка предыдущих установок..."
    for ep in "${EXISTING_PATHS[@]}"; do
        if [ -d "$ep" ]; then
            log "  Удаляю: $ep"
            rm -rf "$ep" >> "$LOG_FILE" 2>&1
        fi
    done

    # Создание структуры
    log "Создание: $TARGET_DIR"
    mkdir -p "$TARGET_DIR" 2>/dev/null
    if [ ! -d "$TARGET_DIR" ]; then
        log "❌ Не удалось создать $TARGET_DIR"
        cp "$LOG_FILE" "$USB_LOG" 2>/dev/null
        sync
        exit 1
    fi

    # OAT-директории
    for arch in arm arm64 x86 x86_64; do
        mkdir -p "$TARGET_DIR/oat/$arch" 2>/dev/null
    done

    # Копирование APK
    log "Копирование APK..."
    cp "$APK_PATH" "$TARGET_DIR/ESFileExplorer.apk" >> "$LOG_FILE" 2>&1
    if [ ! -f "$TARGET_DIR/ESFileExplorer.apk" ]; then
        log "❌ Ошибка копирования APK"
        mount -o remount,ro /system 2>/dev/null
        cp "$LOG_FILE" "$USB_LOG" 2>/dev/null
        sync
        exit 1
    fi
    log "✅ APK скопирован ($(ls -lh "$TARGET_DIR/ESFileExplorer.apk" | awk '{print $5}'))"

    # Права
    log "Установка прав..."
    chmod 755 "$TARGET_DIR" 2>/dev/null
    chmod 644 "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null
    for arch in arm arm64 x86 x86_64; do
        chmod 755 "$TARGET_DIR/oat" 2>/dev/null
        chmod 755 "$TARGET_DIR/oat/$arch" 2>/dev/null
    done

    # Владелец
    if [[ "$TARGET_DIR" == "/system/priv-app/"* ]]; then
        chown system:system "$TARGET_DIR" 2>/dev/null
        chown system:system "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null
        chown system:system "$TARGET_DIR/oat" 2>/dev/null
        log "  Владелец: system:system"
    else
        chown root:root "$TARGET_DIR" 2>/dev/null
        chown root:root "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null
        chown root:root "$TARGET_DIR/oat" 2>/dev/null
        log "  Владелец: root:root"
    fi

    # SELinux контекст
    chcon u:object_r:system_file:s0 "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null || true
    chcon u:object_r:system_file:s0 "$TARGET_DIR" 2>/dev/null || true

    # Регистрация через pm
    log "Регистрация пакета через pm install..."
    pm install -r "$TARGET_DIR/ESFileExplorer.apk" >> "$LOG_FILE" 2>&1
    if [ $? -eq 0 ]; then
        log "✅ Пакет зарегистрирован"
        INSTALL_SUCCESS=true
    else
        log "⚠️ pm install не сработал — потребуется перезагрузка"
        INSTALL_SUCCESS=true  # всё равно считаем успехом, т.к. файл на месте
    fi

    # Возврат в RO
    log "Возврат /system в RO..."
    sync
    mount -o remount,ro /system 2>/dev/null
    if mount | grep -q " /system .* rw,"; then
        busybox mount -o remount,ro /system 2>/dev/null
    fi
    if mount | grep -q " /system .* rw,"; then
        log "⚠️ /system остался в RW — рекомендуется перезагрузка"
    else
        log "✅ /system возвращён в RO"
    fi
fi

# ---------------------------------------------------------------------------
# ШАГ 4: ПРОВЕРКА УСТАНОВКИ
# ---------------------------------------------------------------------------
log ""
log "=== ШАГ 4: ПРОВЕРКА ==="

if [ -f "$TARGET_DIR/ESFileExplorer.apk" ]; then
    FINAL_SIZE=$(ls -lh "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null | awk '{print $5}')
    FINAL_PERM=$(ls -la "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null | awk '{print $1}')
    FINAL_OWNER=$(ls -la "$TARGET_DIR/ESFileExplorer.apk" 2>/dev/null | awk '{print $3":"$4}')
    log "  ✅ Файл на месте: $TARGET_DIR/ESFileExplorer.apk"
    log "     Размер: $FINAL_SIZE | Права: $FINAL_PERM | Владелец: $FINAL_OWNER"
fi

PKG_CHECK=$(pm list packages 2>/dev/null | grep estrongs)
if [ -n "$PKG_CHECK" ]; then
    log "  ✅ Пакет зарегистрирован: $PKG_CHECK"
else
    log "  ⚠️ Пакет пока не виден — появится после перезагрузки"
fi

# ---------------------------------------------------------------------------
# ШАГ 5: ЗАВЕРШЕНИЕ
# ---------------------------------------------------------------------------
log ""
log "=== ШАГ 5: ЗАВЕРШЕНИЕ ==="

if [ "$INSTALL_SUCCESS" = true ]; then
    log "🎉 УСТАНОВКА ВЫПОЛНЕНА УСПЕШНО!"
else
    log "⚠️ УСТАНОВКА ЗАВЕРШИЛАСЬ С ПРОБЛЕМАМИ"
fi

log ""
log "📋 СВОДКА:"
log "  • Время: $(date '+%Y-%m-%d %H:%M:%S')"
log "  • USB: $USB_PATH"
log "  • APK: $(basename "$APK_PATH")"
log "  • Цель: $TARGET_DIR"
log "  • Статус: $(if [ "$INSTALL_SUCCESS" = true ]; then echo 'УСПЕХ'; else echo 'ПРОБЛЕМЫ'; fi)"

# Скрипт автозапуска
STARTUP_SCRIPT="/data/local/tmp/start_es.sh"
cat > "$STARTUP_SCRIPT" << 'STARTUP'
#!/system/bin/sh
echo "Запуск ES File Explorer..."
sleep 10
am start -n com.estrongs.android.pop/.view.FileExplorerActivity 2>/dev/null
sleep 2
am start -n com.estrongs.android.pop/.MainActivity 2>/dev/null
sleep 2
am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER \
    -n com.estrongs.android.pop/.view.FileExplorerActivity 2>/dev/null
sleep 15
am start -n com.estrongs.android.pop/.view.FileExplorerActivity 2>/dev/null
echo "ES File Explorer должен быть запущен"
STARTUP
chmod 755 "$STARTUP_SCRIPT" 2>/dev/null
log "  Скрипт автозапуска: $STARTUP_SCRIPT"

# Финальное сохранение лога
log ""
log "Сохранение лога на USB..."
cp "$LOG_FILE" "$USB_LOG" 2>/dev/null && log "✅ Лог сохранён: $USB_LOG" || log "⚠️ Не удалось сохранить лог на USB"

sync

log ""
log "🔄 ПОДГОТОВКА К ПЕРЕЗАГРУЗКЕ..."
log "⚠️ ВЫТАЩИТЕ ФЛЕШКУ во время перезагрузки, иначе скрипт запустится снова!"
log "Перезагрузка через 5 секунд..."

for i in 5 4 3 2 1; do
    log "  $i..."
    sleep 1
done

log "🚀 ПЕРЕЗАГРУЗКА..."
cp "$LOG_FILE" "$USB_LOG" 2>/dev/null
sync
reboot

Инструкция: как не накосячить (пошагово)


  1. Подготовьте флешку. Формат FAT32. Никаких экзотических файловых систем, магнитола их не поймет.
  2. Создайте структуру папок. На флешке должна быть папка update, а внутри нее — папка soft.
  3. Положите файлы.
    • Скачайте APK-файл ES File Explorer (или другой версии, если хотите, но в имени должно быть сочетание "es", например es.apk или es_file_explorer.apk). Положите его в папку update/soft/.
    • Создайте в папке update текстовый файл, назовите его custom_rep.sh и вставьте в него код, приведенный выше.
  4. Действуйте. Вставьте флешку в работающую магнитолу Dongfeng Huge.
  5. Ждите. Экран может моргнуть или на секунду зависнуть. Это нормально: система выполняет команды.
  6. Перезагрузитесь. После завершения скрипта обязательно перезагрузите мультимедиа (зажмите кнопку питания на 10-15 секунд), чтобы система увидела новое приложение в разделе /system.



Честное признание граблей: что делать, если не взлетело?

Мы живем в мире, где идеальных прошивок не существует. Если после перезагрузки ES File Explorer не появился, не спешите винить скрипт или себя.

  1. Откройте флешку на компьютере. Там будет файл с именем вида es_installation_20260910_153000.log.
  2. Прочитайте его. Там черным по белому написано, на каком шаге все пошло не так.
    • Если видите ❌ НЕ УДАЛОСЬ смонтировать систему в RW, значит, конкретная сборка WindLink X 3.0 в вашем Huge заблокировала разделы намертво. В этом случае скрипт автоматически попытается установить приложение как обычное (через pm install). Оно будет работать, но может не перехватывать USB-события так же агрессивно, как системное.
    • Если видите ❌ Файл не найден, проверьте, правильно ли вы назвали папки и файл. Регистр букв имеет значение.

Вместо заключения

Смена паролей ADB и усложнение структуры Android 11 — это не конец света, а просто новые вводные данные. Мы не продаем вам "волшебную таблетку", мы даем вам рабочий инструмент. Он проверяет, логирует и пробует разные пути, потому что мы знаем: на заводе могли собрать магнитолу в среду, а могли в пятницу после обеда, и вести себя они будут по-разному.

Используйте скрипт, читайте логи, и пусть ваш Dongfeng слушается вас, а не наоборот.

Копия скрипта доступна по ссылке https://github.com/tcse/dongfeng-aeolus.ru/blob/main/Others/Dongfeng_Huge2026_install_ES-custom_rep.sh

Скачать скрипт можно с сайта
Скачать файл: custom_rep.sh Установка ES Проводник на Huge 2026 [8.72 Kb] (cкачиваний: 3)
💡 Хотите обсудить материал?

Присоединяйтесь к нашему Telegram-каналу:

https://t.me/aeolusshinegs

Нажмите кнопку ниже — и вы сразу попадёте в чат с комментариями

Channel_Bot Гости

Хорошая новость в том, что нам больше не нужен ноутбук, пароли или танцы с бубном вокруг командной строки. Мы написали скрипт, который делает то же самое, что и наши решения для Shine GS и Box: находит файл на флешке и устанавливает его, используя встроенную функцию автозапуска магнитолы.

Просто теперь этот скрипт стал умнее, потому что Android 11 стал капризнее.

✉️ Из Telegram: оригинал

GoncharovSergeyA Гости

Здесь в седьмой строке явно задано имя флешки. Мне кажется это не будет работать

✉️ Из Telegram: оригинал

Channel_Bot Гости

ага...
полностью согласен - полинился DEMOLISHER поправить ID своей флешки на поиск как было в исходнике

✉️ Из Telegram: оригинал

anonymous Гости

Да, я только потом обратил внимание. К сожалению сегодня день загружен, думал посижу на работе со скриптом

✉️ Из Telegram: оригинал

Channel_Bot Гости

надо проверить вот такой вариант

#!/system/bin/sh
# ==================================================
# ES FILE EXPLORER INSTALLER v2.1 (Android 10, Huge)
# ==================================================

# --- ГЛАВНОЕ ИСПРАВЛЕНИЕ: лог пишем во внутреннюю память, а не на флешку ---
LOG_FILE="/data/local/tmp/es_install_$(date +%Y%m%d_%H%M%S).log"
USB_LOG="" # заполнится, когда найдём флешку
APK_PATH=""
USB_PATH=""
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")

log() {
echo "[$TIMESTAMP] $1" | tee -a "$LOG_FILE"
# если уже знаем флешку — дублируем и туда
[ -n "$USB_LOG" ] && echo "[$TIMESTAMP] $1" >> "$USB_LOG" 2>/dev/null
}

# --- Поиск USB: ищем сначала папку update/soft, потом любой *.apk с "es" ---
find_usb_apk() {
# 1. Приоритетный путь
for base in /mnt/media_rw /storage /mnt; do
[ -d "$base" ] || continue
# Пропускаем внутреннюю память
case "$base" in
*/emulated*|*/self*) continue ;;
esac

# 1a. update/soft/es.apk
for d in "$base"/*/update/soft "$base"/update/soft; do
if [ -f "$d/es.apk" ]; then
APK_PATH="$d/es.apk"
USB_PATH=$(echo "$d" | sed 's|/update/soft.*||')
return 0
fi
done

# 1b. любой *.apk в корне, где в имени есть "es"
for f in "$base"/*.apk "$base"/*/*.apk; do
[ -f "$f" ] || continue
case "$(basename "$f" | tr 'A-Z' 'a-z')" in
*es*.apk)
APK_PATH="$f"
USB_PATH=$(dirname "$f")
return 0
;;
esac
done
done
return 1
}

log "=================================================="
log "ES INSTALLER v2.1 — Android 10 (Huge)"
log "User: $(id)"
log "=================================================="

log ""
log "=== ШАГ 1: ПОИСК USB ==="
if ! find_usb_apk; then
log "❌ es.apk не найден ни на одной флешке"
log "Проверьте: /mnt/media_rw/*/update/soft/es.apk"
exit 1
fi

# Теперь, когда флешка найдена — задаём USB_LOG
USB_LOG="$USB_PATH/es_install_$(date +%Y%m%d_%H%M%S).log"
cp "$LOG_FILE" "$USB_LOG" 2>/dev/null

log "✅ Найден APK: $APK_PATH"
log " Размер: $(ls -lh "$APK_PATH" | awk '{print $5}')"
log " Лог на USB: $USB_LOG"

✉️ Из Telegram: оригинал

Channel_Bot Гости

так и есть.

Это работает только если флешка имеет UUID B4FE-5315. На другой флешке скрипт упадёт в первой же строке — tee -a "$LOG_FILE" не сможет создать файл, а весь лог потеряется.

✉️ Из Telegram: оригинал

Channel_Bot Гости

Что это даёт:

✅ Лог создаётся сразу во внутренней памяти — не зависит от UUID флешки.
✅ USB_LOG создаётся только после того, как флешка найдена.
✅ Поиск идёт по update/soft/es.apk (как в оригинале), а не по всему storage.
✅ Регистронезависимая проверка *es*.apk.

Что осталось неисправным: функция mount_system_rw() — на Android 10 она всё ещё не заработает. См. вариант №2.

✉️ Из Telegram: оригинал

Channel_Bot Гости

надо бы проверить обновленную версию

https://github.com/tcse/dongfeng-aeolus.ru/blob/main/Others/Dongfeng_Huge2026_install_ES-custom_rep.sh

✉️ Из Telegram: оригинал

Channel_Bot Гости

📄 как обычно переименовать в custom_rep.sh (Dongfeng_Huge2026_install_ES-custom_rep.sh)

✉️ Из Telegram: оригинал

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Похожие записи

Работа сайта и приложений

🧪 Эксперимент: сколько на самом деле стоит слово «бесплатно»?

В мире IT существует устоявшаяся, довольно циничная, но статистически обоснованная аксиома: «Бесплатный софт не ценится». Профессиональные разработчики часто говорят, что раздача бесплатных

Приложения для автомагнитол / MCU Shine GS и Shine / MCU Nammi 01 Box

DFM Sidebar by TCSE - боковая панель приложений для Dongfeng Shine GS и Box

Представляю вам DFM Sidebar — небольшое, но очень удобное приложение для вашей магнитолы Dongfeng Box и других моделей на базе Android. Зачем это нужно? Штатный интерфейс магнитолы не всегда удобен

Мультимедиа системы Dongfeng / Частые вопросы и ответы

Картинка в картинке и кнопки на руле: как заставить магнитолу Dongfeng слушаться (Shine, Shine GS, Mage, Box)

Помните, как мы недавно учили магнитолу автоматически запускать DFM-Sidebar после обновления, избавляя вас от необходимости тыкать в экран, как в первый раз? (Ссылка на предыдущую статью: Забыл

Приложения для автомагнитол

Android Auto для магнитолы Dongfeng

Headunit Revived — это приложение с открытым исходным кодом, разработанное для того, чтобы превратить любое Android-устройство (планшет, смартфон или автомобильный экран) в полноценный ресивер

Мультимедиа системы Dongfeng / FAQ: Shine GS

Забыл перезапустить сайдбар после обновления? Не беда. Или как одна флешка спасает нервную систему владельца Dongfeng

Представьте классическую ситуацию. Вы, счастливый обладатель платной версии DFM-Sidebar (да-да, той самой, что стоит примерно как пара чашек хорошего кофе, но экономит вам часы бессмысленного тыкания