開發者指南

EinkBro 以 Kotlin 與現代 Android 開發實踐建構。本指南涵蓋架構、建置流程與貢獻者的主要開發領域。

架構概觀

EinkBro 架構:app 模組(Activity、ViewModel、Repository、EBWebView、Koin、Services)與 ad-filter、adblock-client 模組

核心模式

模組結構

模組用途關鍵技術
app主瀏覽器應用程式Kotlin、Compose、Room、Koin、WebView
ad-filter廣告封鎖邏輯與 JS scriptletsJavaScript、FilterViewModel
adblock-client原生廣告封鎖實作C++、CMake、JNI

主要元件

元件說明
EinkBroApplication.ktApplication 類別;初始化 Koin DI 容器
BrowserActivity.kt主 Activity(singleInstance 啟動模式);處理所有瀏覽器 UI
EBWebView.kt為 E-Ink 最佳化的自訂 WebView(滾動行為、閱讀模式 CSS 注入、JS 介面)
GptActionsActivity.ktAI/ChatGPT 互動的 UI
OpenAiRepository.ktOpenAI、Gemini 與相容伺服器的 API 通訊層
ChatGptQuery.kt儲存 GPT 查詢結果的 Room 實體
ConfigManager.kt以 Kotlin property delegate 包裝的 SharedPreferences,統一處理所有設定
ToolbarAction.kt定義所有 43 個工具列動作(含圖示、標籤與狀態)的 Enum
MenuDialogFragment.kt以 Compose 實作、可收合分區的動作選單

建置設定

屬性
Min SDK24(Android 7.0)
Target SDK34(Android 14)
Compile SDK36
JVM TargetJava 17
Kotlin2.1.20 搭配 KSP
建置工具AGP 8.13.2、Gradle 8.14.5
ABI Splitsarm64-v8a、armeabi-v7a、x86、x86_64

建置指令

開發

# 建置 debug APK
./gradlew assembleDebug

# 建置 release APK
./gradlew assembleRelease

# 建置 releaseDebuggable 變體
./gradlew assembleReleaseDebuggable

# 安裝 debug 版本至已連接裝置
./gradlew installDebug

# 清除建置輸出
./gradlew clean

測試

# 執行單元測試
./gradlew test

# 執行儀表化測試
./gradlew connectedAndroidTest

# 執行 Lint 檢查
./gradlew lint

# 僅 debug 版的 Lint
./gradlew lintDebug

主要開發領域

WebView 客製化

E-Ink 專屬的 WebView 最佳化實作於 EBWebView.kt

AI 整合

ChatGPT/AI 功能橫跨多個元件:

EPUB 處理

使用 EPubLib 實作完整的 EPUB 讀取與寫入:

翻譯服務

多家提供者的翻譯整合,支援段落級、整頁與圖片翻譯。提供者包括 Google Translate、DeepL,以及透過 OpenAI/Gemini 的 AI 翻譯。

資料庫與 Schema

Room 資料庫 schema 存放於 app/schemas/。修改實體時請務必定義好遷移路徑。主要實體包括書籤、歷史紀錄、GPT 查詢與白名單。

國際化

本專案支援 25 種以上語言,透過 Crowdin 管理。翻譯檔使用標準 Android 格式,位於 res/values-*/strings.xml。請勿直接編輯翻譯檔 — 所有變更都應透過 Crowdin 進行。

ProGuard

Release 版本會透過 ProGuard 進行程式碼混淆與最佳化:

如何貢獻

  1. 於 GitHub 上 Fork 此儲存庫
  2. main 建立 feature branch
  3. 進行變更,並盡可能在 E-Ink 裝置上測試
  4. 送出 Pull Request 並清楚描述變更內容

本專案使用 Fastlane 進行部署自動化,並支援 F-Droid 發佈。