#!/usr/bin/env bash # 构建 Linux .deb(Ubuntu / Debian / Deepin 25 amd64) set -euo pipefail cd "$(dirname "$0")/.." export PATH="/opt/flutter/bin:$PATH" export PUB_HOSTED_URL="${PUB_HOSTED_URL:-https://pub.dev}" export FLUTTER_STORAGE_BASE_URL="${FLUTTER_STORAGE_BASE_URL:-https://storage.googleapis.com}" APP_ID="com.fysxkj.fengying_oa" APP_NAME="风影办公" VERSION="${1:-3.1.10}" BUILD="${2:-324}" PKG="fengying-oa" DEB="${PKG}_${VERSION}-${BUILD}_amd64.deb" echo "== Flutter build linux ${VERSION}+${BUILD} ==" flutter pub get flutter build linux --release --build-name="$VERSION" --build-number="$BUILD" BUNDLE="build/linux/x64/release/bundle" STAGE="build/deb-stage" rm -rf "$STAGE" mkdir -p "$STAGE/DEBIAN" mkdir -p "$STAGE/opt/${PKG}" mkdir -p "$STAGE/usr/bin" mkdir -p "$STAGE/usr/share/applications" mkdir -p "$STAGE/usr/share/icons/hicolor/256x256/apps" cp -a "$BUNDLE/." "$STAGE/opt/${PKG}/" # 图标:优先用 bundle 内 icon,否则占位 if [ -f "$BUNDLE/data/flutter_assets/assets/icon.png" ]; then cp "$BUNDLE/data/flutter_assets/assets/icon.png" "$STAGE/usr/share/icons/hicolor/256x256/apps/${APP_ID}.png" elif [ -f "assets/icon.png" ]; then cp "assets/icon.png" "$STAGE/usr/share/icons/hicolor/256x256/apps/${APP_ID}.png" else convert -size 256x256 xc:'#07C160' -fill white -gravity center -pointsize 48 -annotate 0 '风影' \ "$STAGE/usr/share/icons/hicolor/256x256/apps/${APP_ID}.png" 2>/dev/null || \ cp "$BUNDLE/fengying_oa" "$STAGE/usr/share/icons/hicolor/256x256/apps/${APP_ID}.png" 2>/dev/null || true fi cat > "$STAGE/usr/share/applications/${APP_ID}.desktop" < "$STAGE/usr/bin/${PKG}" <<'EOF' #!/bin/sh APP_DIR="/opt/fengying-oa" export LD_LIBRARY_PATH="${APP_DIR}/lib:${LD_LIBRARY_PATH:-}" cd "$APP_DIR" || exit 1 exec "$APP_DIR/fengying_oa" "$@" EOF chmod 755 "$STAGE/usr/bin/${PKG}" cat > "$STAGE/DEBIAN/control" < Homepage: https://oa.fysxkj.com Depends: libgtk-3-0, libglib2.0-0, libgstreamer1.0-0, libgstreamer-plugins-base1.0-0, libsecret-1-0, libsqlite3-0, libstdc++6, ca-certificates, zenity | kdialog Description: 风影智慧办公综合平台 企业微信风格桌面客户端,支持消息、工作台、审批、考勤等。 适配 Ubuntu 22.04+、Debian 12+、Deepin 25 等 amd64 系统。 EOF cat > "$STAGE/DEBIAN/postinst" <<'EOF' #!/bin/sh set -e if command -v update-desktop-database >/dev/null 2>&1; then update-desktop-database /usr/share/applications || true fi if command -v gtk-update-icon-cache >/dev/null 2>&1; then gtk-update-icon-cache -f -t /usr/share/icons/hicolor 2>/dev/null || true fi EOF chmod 755 "$STAGE/DEBIAN/postinst" cat > "$STAGE/DEBIAN/prerm" <<'EOF' #!/bin/sh set -e exit 0 EOF chmod 755 "$STAGE/DEBIAN/prerm" mkdir -p build rm -f "build/${DEB}" dpkg-deb --root-owner-group --build "$STAGE" "build/${DEB}" cp "build/${DEB}" "build/fengying-oa_amd64.deb" echo "Built: build/${DEB}" echo "Stable URL copy: build/fengying-oa_amd64.deb" ls -lh "build/${DEB}" "build/fengying-oa_amd64.deb" # 同时保留 tar.gz 便于手动解压 tar -czf "build/fengying-oa-linux.tar.gz" -C "$BUNDLE" . echo "Also: build/fengying-oa-linux.tar.gz"