147 lines
4.0 KiB
Bash
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"
|