#!/bin/bash # ============================================================ # 闲言APP — Linux打包脚本 (tar.gz 便携包) # 创建时间: 2026-05-18 # 更新时间: 2026-05-18 # 作用: 将Flutter Linux构建产物打包为tar.gz便携压缩包 # 上次更新: 初始创建 # ============================================================ set -e APP_NAME="xianyan" APP_DISPLAY_NAME="闲言" APP_ID="apps.xy.xianyan" APP_VERSION="5.2.0" BUILD_DIR="build/linux/x64/release/bundle" OUTPUT_DIR="dist" TAR_ROOT="${OUTPUT_DIR}/tarball_staging/${APP_NAME}_${APP_VERSION}_linux_x64" echo "==========================================" echo " ${APP_DISPLAY_NAME} — tar.gz 便携包打包" echo "==========================================" if [ ! -d "${BUILD_DIR}" ]; then echo "❌ 构建产物不存在,请先运行: flutter build linux --release" exit 1 fi rm -rf "${TAR_ROOT}" mkdir -p "${TAR_ROOT}" echo "📦 复制构建产物..." cp -r "${BUILD_DIR}"/* "${TAR_ROOT}/" chmod +x "${TAR_ROOT}/${APP_NAME}" echo "📋 复制桌面集成文件..." if [ -f "linux/${APP_ID}.desktop" ]; then cp "linux/${APP_ID}.desktop" "${TAR_ROOT}/" fi if [ -f "linux/${APP_ID}.appdata.xml" ]; then cp "linux/${APP_ID}.appdata.xml" "${TAR_ROOT}/" fi echo "📝 创建启动脚本..." cat > "${TAR_ROOT}/run.sh" << 'EOF' #!/bin/bash SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" export LD_LIBRARY_PATH="${SCRIPT_DIR}/lib:${LD_LIBRARY_PATH}" export XDG_DATA_DIRS="${SCRIPT_DIR}/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" exec "${SCRIPT_DIR}/xianyan" "$@" EOF chmod +x "${TAR_ROOT}/run.sh" echo "📝 创建安装脚本..." cat > "${TAR_ROOT}/install.sh" << 'EOF' #!/bin/bash set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" INSTALL_DIR="/opt/xianyan" DESKTOP_FILE="/usr/share/applications/apps.xy.xianyan.desktop" echo "🔧 安装闲言到 ${INSTALL_DIR}..." sudo cp -r "${SCRIPT_DIR}" "${INSTALL_DIR}" sudo chmod +x "${INSTALL_DIR}/xianyan" echo "🖥️ 创建桌面快捷方式..." sudo tee "${DESKTOP_FILE}" > /dev/null << DESKTOP [Desktop Entry] Type=Application Version=1.5 Name=闲言 Name[zh_CN]=闲言 Name[en]=Xianyan Comment=文字阅读更纯粹 Icon=apps.xy.xianyan Exec=/opt/xianyan/xianyan Terminal=false StartupNotify=true Categories=Utility;Literature;Graphics; StartupWMClass=xianyan DESKTOP sudo update-desktop-database /usr/share/applications 2>/dev/null || true echo "✅ 安装完成! 可从应用菜单启动「闲言」" echo " 卸载: sudo rm -rf ${INSTALL_DIR} ${DESKTOP_FILE}" EOF chmod +x "${TAR_ROOT}/install.sh" echo "📝 创建卸载脚本..." cat > "${TAR_ROOT}/uninstall.sh" << 'EOF' #!/bin/bash set -e echo "🗑️ 卸载闲言..." sudo rm -rf /opt/xianyan sudo rm -f /usr/share/applications/apps.xy.xianyan.desktop sudo update-desktop-database /usr/share/applications 2>/dev/null || true echo "✅ 卸载完成" EOF chmod +x "${TAR_ROOT}/uninstall.sh" echo "📝 创建README..." cat > "${TAR_ROOT}/README.txt" << EOF ${APP_DISPLAY_NAME} v${APP_VERSION} — Linux 便携版 ======================================== 快速启动: ./run.sh 安装到系统: ./install.sh 从系统卸载: ./uninstall.sh 系统要求: - Linux x86_64 (Ubuntu 20.04+ / Debian 11+ / Fedora 35+) - GTK 3.24+ - GStreamer 1.14+ - ALSA / PulseAudio - 至少 2GB 内存 依赖安装 (Ubuntu/Debian): sudo apt install libgtk-3-0 libglib2.0-0 libgstreamer1.0-0 \\ libgstreamer-plugins-base1.0-0 libasound2 libsecret-1-0 \\ gstreamer1.0-plugins-good gstreamer1.0-libav fonts-noto-cjk EOF mkdir -p "${OUTPUT_DIR}" TAR_FILE="${OUTPUT_DIR}/${APP_NAME}_${APP_VERSION}_linux_x64.tar.gz" echo "🔨 压缩打包..." cd "${OUTPUT_DIR}/tarball_staging" tar -czf "../$(basename ${TAR_FILE})" "${APP_NAME}_${APP_VERSION}_linux_x64/" cd - > /dev/null TAR_SIZE=$(du -sh "${TAR_FILE}" | cut -f1) echo "" echo "✅ tar.gz 打包完成!" echo " 文件: ${TAR_FILE}" echo " 大小: ${TAR_SIZE}" echo "" echo "使用方法:" echo " 解压: tar -xzf $(basename ${TAR_FILE})" echo " 运行: cd ${APP_NAME}_${APP_VERSION}_linux_x64 && ./run.sh" rm -rf "${OUTPUT_DIR}/tarball_staging"