The Rust core was already portable (caller-provided db paths, rustls rather than openssl) and the shell already had the mobile entry point, so this is mostly toolchain, provisioning, and platform-gating. Toolchain: - scripts/android-setup.sh installs what Android Studio doesn't: SDK cmdline-tools, a pinned stable NDK, and the Rust Android targets. The NDK is pinned rather than "latest" because sdkmanager's newest is often a beta (30.0.15729638 is r30-beta2) -- not something to compile SQLite with. Prefers Android Studio's bundled JDK 21, since Gradle rejects newer JDKs. - Track src-tauri/gen/android (excluding build output): AndroidManifest.xml is hand-edited and Android permissions have no tauri.conf.json equivalent. - vite: serve on TAURI_DEV_HOST so a device/emulator can reach the dev server. Card data: downloading streams ~740MB to build a ~73MB db, which is rough on a phone. Add import_reference_db to adopt a desktop-built file instead, validated by db::inspect_reference_db first so picking the wrong file is a clean error rather than a broken install. Installs via copy-then-rename so an interrupted copy can't leave a partial db. Ingest hardening (helps desktop too): - Give ureq connect/read timeouts. Cancellation is only polled per parsed record, so a stalled socket previously hung forever with no way to cancel. - Drop the remove_file before rename; POSIX rename already replaces atomically, and the delete-first window could leave no reference.db at all if the process was killed -- much likelier on Android. UI: hide Open/New Library on mobile (scoped storage has no arbitrary-path equivalent, and SQLite can't open a content:// URI), reported via a cfg!(mobile) flag on Status rather than user-agent sniffing. Use 100dvh so the soft keyboard doesn't break the shell. Verified: 70/70 core tests, desktop build clean, and the aarch64 APK builds (bundled SQLite C and ring both cross-compile under NDK 28). Not yet run on a device.
27 lines
942 B
TypeScript
27 lines
942 B
TypeScript
import { defineConfig } from "vite";
|
|
import react from "@vitejs/plugin-react";
|
|
|
|
// On mobile, the dev server has to be reachable from the phone/emulator rather
|
|
// than only from localhost. `tauri android dev` sets TAURI_DEV_HOST to the
|
|
// address the device should dial; when it's absent (desktop) we keep the
|
|
// localhost-only default.
|
|
const devHost = process.env.TAURI_DEV_HOST;
|
|
|
|
// Vite config tuned for Tauri: fixed port, no clearing the terminal Tauri owns.
|
|
export default defineConfig({
|
|
plugins: [react()],
|
|
clearScreen: false,
|
|
server: {
|
|
port: 1420,
|
|
strictPort: true,
|
|
host: devHost || false,
|
|
// HMR must also point at the reachable address, or the device loads the app
|
|
// but can never connect back for updates.
|
|
hmr: devHost ? { protocol: "ws", host: devHost, port: 1421 } : undefined,
|
|
watch: {
|
|
// Don't watch the Rust side; Tauri handles that.
|
|
ignored: ["**/src-tauri/**"],
|
|
},
|
|
},
|
|
});
|