Skip to content

Building from Source

errorfg edited this page Nov 3, 2026 · 2 revisions

English | 中文

Building from source

Requirements

  • Flutter 3.44.8 (the version CI uses), Dart SDK 3.12 or later.
  • Android: JDK 17 and the Android SDK.
  • iOS: Xcode 27 and CocoaPods. CI builds with the iOS 27.1 SDK, as apps built with an earlier SDK are only shown centered on iPhone Duo; the minimum is iOS 15.0. The embedded JDK is built for devices only, so the complete app does not run on the iOS simulator.
  • macOS: Xcode and CocoaPods.
  • Windows and Linux: the desktop dependencies listed in the Flutter documentation. Running on Linux also needs webkit2gtk-4.1.

Entry point

The entry point is lib/src/main.dart, not Flutter's default lib/main.dart. Every build and run command needs -t lib/src/main.dart:

flutter pub get
flutter run -t lib/src/main.dart

Build commands

# Android (one APK per CPU architecture, as on the releases page)
flutter build apk -t lib/src/main.dart --release --split-per-abi

# iOS (unsigned; sign it yourself with AltStore, SideStore and the like)
cd ios && pod update && cd ..
flutter build ios -t lib/src/main.dart --release --no-codesign

# macOS
flutter build macos -t lib/src/main.dart --release

# Windows
flutter build windows -t lib/src/main.dart --release

# Linux
flutter build linux -t lib/src/main.dart --release

Where the results are:

  • Android: build/app/outputs/flutter-apk/ or build/app/outputs/apk/release/
  • iOS: build/ios/iphoneos/Runner.app. To make an IPA, put the .app into a folder named Payload and zip that folder as .ipa.
  • macOS: build/macos/Build/Products/Release/jhentai.app

Android signing

Release builds read their signing configuration from android/key.properties:

storeFile=/path/to/your.keystore
storePassword=...
keyAlias=...
keyPassword=...

Create your own key, see the Flutter documentation. For a build only you will try, the release signingConfig in android/app/build.gradle can also be set to signingConfigs.debug.

Note: an APK signed with another key cannot be installed over the app; it has to be uninstalled first, which deletes the app's data (logins, download records and so on). On a device that has the release from the releases page, keep using those APKs, or export your data and set up cloud sync first.

Translation

See Translation in the README. UI strings live in the six language files under lib/src/l18n/; a new string is added to all six.

Clone this wiki locally