127 lines
4.0 KiB
Bash
127 lines
4.0 KiB
Bash
#!/bin/bash
|
|
# ============================================================
|
|
# 闲言APP — Linux打包脚本 (AppImage)
|
|
# 创建时间: 2026-05-18
|
|
# 更新时间: 2026-05-18
|
|
# 作用: 将Flutter Linux构建产物打包为AppImage通用安装包
|
|
# 上次更新: 初始创建
|
|
# ============================================================
|
|
|
|
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"
|
|
APPDIR="${OUTPUT_DIR}/appimage_staging/${APP_NAME}.AppDir"
|
|
|
|
echo "=========================================="
|
|
echo " ${APP_DISPLAY_NAME} — AppImage 打包"
|
|
echo "=========================================="
|
|
|
|
if [ ! -d "${BUILD_DIR}" ]; then
|
|
echo "❌ 构建产物不存在,请先运行: flutter build linux --release"
|
|
exit 1
|
|
fi
|
|
|
|
which appimagetool > /dev/null 2>&1 || {
|
|
echo "📥 下载 appimagetool..."
|
|
ARCH=$(uname -m)
|
|
wget -q "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-${ARCH}.AppImage" -O /tmp/appimagetool
|
|
chmod +x /tmp/appimagetool
|
|
APPIMAGETOOL="/tmp/appimagetool"
|
|
}
|
|
APPIMAGETOOL="${APPIMAGETOOL:-appimagetool}"
|
|
|
|
rm -rf "${APPDIR}"
|
|
mkdir -p "${APPDIR}/usr/bin"
|
|
mkdir -p "${APPDIR}/usr/lib"
|
|
mkdir -p "${APPDIR}/usr/share/applications"
|
|
mkdir -p "${APPDIR}/usr/share/metainfo"
|
|
mkdir -p "${APPDIR}/usr/share/icons/hicolor/scalable/apps"
|
|
mkdir -p "${APPDIR}/usr/share/icons/hicolor/256x256/apps"
|
|
|
|
echo "📦 复制构建产物..."
|
|
cp -r "${BUILD_DIR}"/* "${APPDIR}/usr/bin/"
|
|
chmod +x "${APPDIR}/usr/bin/${APP_NAME}"
|
|
|
|
echo "📝 创建AppRun入口..."
|
|
cat > "${APPDIR}/AppRun" << 'EOF'
|
|
#!/bin/bash
|
|
SELF=$(readlink -f "$0")
|
|
HERE=${SELF%/*}
|
|
export PATH="${HERE}/usr/bin:${PATH}"
|
|
export LD_LIBRARY_PATH="${HERE}/usr/lib:${HERE}/usr/bin/lib:${LD_LIBRARY_PATH}"
|
|
export XDG_DATA_DIRS="${HERE}/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
|
|
export GSETTINGS_SCHEMA_DIR="${HERE}/usr/share/glib-2.0/schemas:${GSETTINGS_SCHEMA_DIR}"
|
|
|
|
# GSTREAMER插件路径
|
|
export GST_PLUGIN_SYSTEM_PATH="${HERE}/usr/lib/gstreamer-1.0:${GST_PLUGIN_SYSTEM_PATH:-}"
|
|
|
|
exec "${HERE}/usr/bin/xianyan" "$@"
|
|
EOF
|
|
chmod +x "${APPDIR}/AppRun"
|
|
|
|
echo "🖥️ 创建desktop文件..."
|
|
if [ -f "linux/${APP_ID}.desktop" ]; then
|
|
cp "linux/${APP_ID}.desktop" "${APPDIR}/"
|
|
sed -i "s|Exec=xianyan|Exec=${APP_NAME}|g" "${APPDIR}/${APP_ID}.desktop"
|
|
sed -i "s|Icon=apps.xy.xianyan|Icon=${APP_ID}|g" "${APPDIR}/${APP_ID}.desktop"
|
|
else
|
|
cat > "${APPDIR}/${APP_ID}.desktop" << EOF
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Version=1.5
|
|
Name=${APP_DISPLAY_NAME}
|
|
Name[zh_CN]=${APP_DISPLAY_NAME}
|
|
Name[en]=Xianyan
|
|
Comment=文字阅读更纯粹
|
|
Icon=${APP_ID}
|
|
Exec=${APP_NAME}
|
|
Terminal=false
|
|
StartupNotify=true
|
|
Categories=Utility;Literature;Graphics;
|
|
StartupWMClass=${APP_NAME}
|
|
EOF
|
|
fi
|
|
|
|
echo "📋 复制AppStream元数据..."
|
|
if [ -f "linux/${APP_ID}.appdata.xml" ]; then
|
|
cp "linux/${APP_ID}.appdata.xml" "${APPDIR}/usr/share/metainfo/"
|
|
fi
|
|
|
|
echo "🎨 创建占位图标..."
|
|
SVG_ICON="${APPDIR}/usr/share/icons/hicolor/scalable/apps/${APP_ID}.svg"
|
|
cat > "${SVG_ICON}" << 'SVGEOF'
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256">
|
|
<defs>
|
|
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#1a1a2e"/>
|
|
<stop offset="100%" style="stop-color:#16213e"/>
|
|
</linearGradient>
|
|
</defs>
|
|
<rect width="256" height="256" rx="56" fill="url(#bg)"/>
|
|
<text x="128" y="160" text-anchor="middle" font-size="120" font-family="serif" fill="#e8e8e8">言</text>
|
|
</svg>
|
|
SVGEOF
|
|
|
|
mkdir -p "${APPDIR}/.DirIcon"
|
|
cp "${SVG_ICON}" "${APPDIR}/.DirIcon" 2>/dev/null || true
|
|
|
|
mkdir -p "${OUTPUT_DIR}"
|
|
APPIMAGE_FILE="${OUTPUT_DIR}/${APP_NAME}_${APP_VERSION}_x86_64.AppImage"
|
|
echo "🔨 构建AppImage..."
|
|
${APPIMAGETOOL} "${APPDIR}" "${APPIMAGE_FILE}"
|
|
|
|
APPIMAGE_SIZE=$(du -sh "${APPIMAGE_FILE}" | cut -f1)
|
|
echo ""
|
|
echo "✅ AppImage 打包完成!"
|
|
echo " 文件: ${APPIMAGE_FILE}"
|
|
echo " 大小: ${APPIMAGE_SIZE}"
|
|
echo ""
|
|
echo "运行命令: chmod +x ${APPIMAGE_FILE} && ./${APPIMAGE_FILE}"
|
|
|
|
rm -rf "${APPDIR}"
|