folder + ex (= index) — フォルダにインデックスを張って、ローカル/リモートを横断的にアクセスできる Android ファイラー。
Zero to Ship シリーズ第4弾。 広告なし・ローカルファースト・リモート全部入り。自分が日常使いするためのアプリ。
リポジトリ: https://github.com/orgsonai/foldex
git clone git@github.com:orgsonai/foldex.git
# または HTTPS
git clone https://github.com/orgsonai/foldex.git- 📁 ローカル — 内部ストレージ / SD / USB-OTG、
Android/dataも SAF 経由でアクセス。Termux のホームなど SAF tree も HOME に固定可 - ☁️ リモート — SMB / SFTP / FTP(S) / WebDAV
- 🏠 HOME 画面 — よく使うフォルダ・リモート接続・機能をタイル化。長押しでドラッグ並べ替え、改名、非表示
- 🔍 検索 / ソート / 隠しファイル切替 — フォルダごとに記憶
- 🗜️ ZIP — 圧縮 / 解凍 (AES-256 パスワード対応、ローカルは直接展開で高速・進捗表示)
- 🔄 共有受信 — 他アプリの「共有」から複数ファイルを受け取って保存
- 🖼️ 画像 — Coil + ピンチズーム + スワイプで前後の画像へ
- 📄 PDF — ページキャッシュ + スクロールバー
- 📝 テキストエディタ — Sora-editor (Canvas 描画、~8MB まで軽快、検索/折返し/行番号/Undo/Redo)
- 📐 Markdown / HTML — ソース ⇄ プレビュー切替 (Markwon + テーブル)
- 🎬 動画 — ExoPlayer + リモートストリーミング (seek 対応)
- 🎵 音声 — Media3 内蔵プレーヤー
- 🖥️ 自機サーバー — SFTP / FTP サーバーとして公開可能 (Argon2id 認証、Ed25519 ホスト鍵、FoldexFtpUserManager)
- 🔑 SFTP 公開鍵認証 — クライアント鍵を端末内で生成、サーバー側
authorized_keys用に公開鍵をコピー - 🚀 動画リモートストリーミング —
StorageManager.openProxyFileDescriptor経由で全 DL を待たず再生・シークバーで任意位置から再生 - 🔄 定期同期 — 双方向対応、競合解決ポリシー選択可、削除前バックアップ (世代管理)、実行状態チップ + 詳細実行ログ
- 🔒 プライバシー — トラッキングなし、認証情報は AndroidKeyStore + AES-GCM 暗号化
- 🎨 Material You — 動的カラー対応、日本語UIデフォルト
- 🔔 App Shortcuts — ランチャー長押しから Files / Connections / Servers / Trash へ
- 🔕 完了通知 — コピー・移動 / 解凍 / 同期 の完了をシステム通知 (設定で個別 ON/OFF)
- 📋 実行ログ — クラッシュ・サーバ起動失敗・同期サマリを集約 (設定→実行ログから確認・共有)
| 言語 | Kotlin |
| UI | Jetpack Compose + Material 3 |
| アーキ | マルチモジュール (11モジュール) + Hilt |
| DB | Room (v6) + DataStore + AndroidKeyStore |
| エディタ | sora-editor (Canvas 描画 + 仮想化) |
| 動画 | Media3 ExoPlayer (+ 自前 ContentProvider で seek 可能なリモートストリーミング) |
| サムネ / 画像 | Coil 3 |
| Markdown | Markwon (テーブル / strikethrough / tasklist / linkify) |
| SMB | smbj |
| SFTP | sshj |
| FTP | Apache Commons Net |
| WebDAV | OkHttp 直叩き |
| SFTP/FTP サーバー | Apache MINA SSHD / Apache FtpServer (NIO ベース FileSystemFactory) |
| 圧縮 | zip4j (AES-256 暗号化) |
| 暗号 | BouncyCastle (フル版・Application で Security.addProvider) |
| 文字コード判定 | juniversalchardet |
| ドラッグ並べ替え | sh.calvin.reorderable |
# debug (applicationIdSuffix=.debug、release と共存可)
./gradlew :app:assembleDebug
# release (リポ直下 keystore.properties があれば正式鍵、無ければ debug 鍵にフォールバック)
./gradlew :app:assembleRelease
# 出力
# app/build/outputs/apk/{debug,release}/app-{debug,release}.apk正式署名で配布する場合は keystore.properties (gitignore 済み) を以下の形式で用意する:
storeFile=release.keystore
storePassword=...
keyAlias=...
keyPassword=...
鍵ファイル本体 (*.jks / *.keystore) と keystore.properties は .gitignore で除外されるためコミットされない。署名確認は apksigner verify --print-certs <apk>。
MIT — Copyright (c) 2026 Zero to Ship。依存ライブラリ (smbj / Apache Commons / MINA SSHD / Apache FtpServer = Apache-2.0、xz = public domain) はいずれも MIT と互換。
Foldex は個人情報を一切収集・送信しない。動作はすべて端末内で完結し、ネットワーク通信はユーザーが設定した SMB/SFTP/FTP/WebDAV 接続先との直接通信のみ。広告 SDK や解析 SDK は組み込んでいない。詳細は docs/PRIVACY.md。