From 8f3be438a1579f1ce88a33dc1500fb729f825e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=82=9F=E7=A9=BA=E7=9A=84=E6=97=A5=E5=B8=B8=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E4=BB=93=E5=BA=93?= Date: Sun, 8 Jun 2025 19:05:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20shells/tv.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shells/tv.sh | 77 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/shells/tv.sh b/shells/tv.sh index e5edd1c..3cf9c7d 100644 --- a/shells/tv.sh +++ b/shells/tv.sh @@ -25,8 +25,8 @@ cp -f "$0" /usr/local/bin/t chmod +x /usr/local/bin/t get_docker_version() { - VERSION=$(grep -E '^VERSION=' /etc/environment | cut -d '=' -f2) - echo $VERSION + VERSION=$(grep -E '^VERSION=' /etc/environment | cut -d '=' -f2) + echo $VERSION } # 使用get_docker_version函数 @@ -314,12 +314,12 @@ install_apk() { install_all_apks() { if check_adb_connected; then # 获取/tmp/upload目录下的apk文件列表 - apk_files=($(ls /tvhelper/shells/data/*.apk 2>/dev/null)) + apk_files=($(ls ${DATA_DIR}/*.apk 2>/dev/null)) total_files=${#apk_files[@]} # 检查是否有APK文件 if [ "$total_files" -eq "0" ]; then - echo -e "${RED}/tvhelper/shells/data/ 目录下不包含任何apk文件,请先拷贝apk文件到此目录.${NC}" + echo -e "${RED}${DATA_DIR}/ 目录下不包含任何apk文件,请先拷贝apk文件到此目录.${NC}" return 1 fi @@ -607,6 +607,61 @@ get_tvbox_timezone() { fi } +# 单个xapk安装函数,支持传入路径 +install_xapk() { + local xapk_local_path="$1" + local xapkname=$(basename "$xapk_local_path") + local timestamp=$(date +%H%M%S) # 比如 142315 表示 14:23:15 + local extract_to="/tmp/xapks/${timestamp}" + mkdir -p "$extract_to" + + if unzip -o "$xapk_local_path" -d "$extract_to"; then + echo "XAPK文件解压成功: $xapkname" + else + echo "XAPK文件解压失败: $xapkname" + return 1 + fi + + apk_files=$(find "$extract_to" -type f -name "*.apk") + echo -e "解压后的多个apk:\n$apk_files" + echo -ne "${YELLOW}正在安装: $xapkname${NC} ${GREEN}" + echo + + # 模拟安装进度 + while true; do + echo -n ".." + sleep 1 + done & + PROGRESS_PID=$! + + install_result=$(adb install-multiple $apk_files 2>&1) + + kill $PROGRESS_PID >/dev/null 2>&1 + wait $PROGRESS_PID 2>/dev/null + echo -e "${NC}\n安装结果: $install_result" + + if echo "$install_result" | grep -qi "Success"; then + echo -e "${GREEN} 安装成功: $xapkname ${NC}" + echo -e "${RED}正在删除临时文件...${NC}" + rm -rf "$extract_to" + else + echo -e "${RED}安装失败: $xapkname${NC}" + fi +} + +# ========================== +# 批量安装目录中的所有XAPK +# ========================== +do_install_all_xapks() { + + for xapk_file in "${DATA_DIR}"/*.xapk; do + if [ -f "$xapk_file" ]; then + echo -e "\n========== 处理文件: $(basename "$xapk_file") ==========" + install_xapk "$xapk_file" + fi + done +} + # 安装mix apps 用于显示全部app install_mixapps() { local xapk_local_path="${apk_path}mix.xapk" @@ -722,7 +777,8 @@ menu_options=( "安装Android原生TV必备精选Apps(含子菜单)" "一键修改NTP(限原生TV,需重启)" "安装Play商店图标(仅google tv使用)" - "自定义批量安装data目录下的所有apk" + "批量安装映射目录下的所有apk" + "批量安装映射目录下的所有xapk(适合流媒体app)" "替换系统桌面" "进入KODI助手" "进入TVBox安装助手" @@ -743,7 +799,8 @@ commands=( ["显示Netflix影片码率"]="show_nf_info" ["模拟菜单键"]="show_menu_keycode" ["安装Play商店图标(仅google tv使用)"]="show_playstore_icon" - ["自定义批量安装data目录下的所有apk"]="install_all_apks" + ["批量安装映射目录下的所有apk"]="install_all_apks" + ["批量安装映射目录下的所有xapk(适合流媒体app)"]="do_install_all_xapks" ["进入KODI助手"]="kodi_helper" ["进入TVBox安装助手"]="enter_tvbox_helper" ["进入Sony电视助手"]="enter_sonytv" @@ -917,7 +974,7 @@ replace_normal_androidtv_ui() { toggle_system_ui "${system_ui_package}" } -check_emotnui_installed(){ +check_emotnui_installed() { local package_name="com.oversea.aslauncher" local apk_path="/tvhelper/apks/ui.apk" @@ -945,7 +1002,7 @@ check_emotnui_installed(){ toggle_googletv_system_ui() { local system_ui_package="com.google.android.apps.tv.launcherx" local system_setup_package="com.google.android.tungsten.setupwraith" - #判断emotnui是否安装 + #判断emotnui是否安装 check_emotnui_installed # 检查系统桌面是否已被禁用 @@ -974,7 +1031,7 @@ toggle_googletv_system_ui() { # 替换或恢复系统桌面 toggle_system_ui() { local system_ui_package=$1 - #判断emotnui是否安装 + #判断emotnui是否安装 check_emotnui_installed # 检查系统桌面是否已被禁用 @@ -1033,7 +1090,7 @@ handle_choice() { } show_menu() { - mkdir -p /tvhelper/shells/data + mkdir -p ${DATA_DIR} clear echo "***********************************************************************" echo -e "* ${YELLOW}盒子助手Docker版 (v$(get_docker_version))${NC} "