Files
xianyan/linux/packaging/build_tarball.sh
Developer 27672343b8 520
2026-05-20 01:40:09 +08:00

147 lines
4.0 KiB
Bash

#!/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"