新增 Android 版(Kotlin + Compose,CLI-only 工具鏈)

This commit is contained in:
Timmy
2026-04-17 12:45:13 +08:00
parent 1091f049ba
commit 0888c81007
11 changed files with 479 additions and 0 deletions

93
android/README.md Normal file
View File

@@ -0,0 +1,93 @@
# Android 版Kotlin + Jetpack Compose不需要 Android Studio
用 CLI`sdkmanager` + `gradle`)從零到 APK 全程在 terminal 完成。編輯用任何 editor / Claude Code 即可。
## 一次性環境設定
### 1. JDK 17 與 Gradle
```bash
brew install openjdk@17 gradle
# 讓系統找得到 openjdk@17
sudo ln -sfn "$(brew --prefix)/opt/openjdk@17/libexec/openjdk.jdk" \
/Library/Java/JavaVirtualMachines/openjdk-17.jdk
# 加到 ~/.zshrc
export JAVA_HOME="$(/usr/libexec/java_home -v 17)"
```
### 2. Android SDK只裝 cmdline-tools / platform-tools / build-tools不裝 IDE
```bash
brew install --cask android-commandlinetools
# 加到 ~/.zshrc
export ANDROID_HOME="/opt/homebrew/share/android-commandlinetools" # Apple Silicon
# 若是 Intel Macexport ANDROID_HOME="/usr/local/share/android-commandlinetools"
export PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools"
# 裝必要元件
sdkmanager --install "platform-tools" "platforms;android-34" "build-tools;34.0.0"
yes | sdkmanager --licenses
```
確認路徑被 Gradle 看得到,在 `android/` 下建一個 `local.properties`
```
sdk.dir=/opt/homebrew/share/android-commandlinetools
```
(或讓 `ANDROID_HOME` 環境變數生效也行Gradle 會自己找。)
### 3. 產生 Gradle wrapper只要做一次之後就都用 `./gradlew`
```bash
cd android
gradle wrapper --gradle-version 8.9 --distribution-type bin
```
## 編譯
```bash
cd android
./gradlew assembleDebug
# 產物app/build/outputs/apk/debug/app-debug.apk
```
Release build未簽章只能自己用
```bash
./gradlew assembleRelease
# 產物app/build/outputs/apk/release/app-release-unsigned.apk
```
## 安裝到手機
```bash
# 1. 手機開「開發人員選項」→「USB 偵錯」
# 2. USB 接上
adb devices # 應列出裝置
adb install -r app/build/outputs/apk/debug/app-debug.apk
```
## 程式結構
單一 Activity + Compose所有邏輯在 `app/src/main/java/tw/local/botrates/MainActivity.kt`
- `fetchRates()``HttpURLConnection` 抓台銀 CSV同樣用欄位索引 13即期賣出解析
- `App()`Compose UI每個幣別一列幣別+匯率 / 金額輸入 / TWD 結果 / 複製鈕
- 複製用 `ClipboardManager.setPrimaryClip`Toast 提示「已複製」
### 想改的地方
| 改什麼 | 位置 |
|--------|------|
| 新增幣別 | `MainActivity.kt` 頂端 `TARGETS` |
| 買入/賣出 | `fetchRates()` 內的 `cols[13]`(見根 `QUICKSTART.md` 的欄位表) |
| 視覺配色 | `RateRow()` 裡的 `Color(0xFF...)` 常數 |
| applicationId / 版本 | `app/build.gradle.kts``defaultConfig` |
## 為什麼不用 Android Studio
AS 整包 2GB+,但實際需要的只有 JDK + Android SDK platform + build-tools加起來 300MB 左右。Gradle 本身也是 CLI 工具。Compose 的開發體驗在純 editor 下唯一損失的是即時 Preview但寫完 `./gradlew installDebug` 直接跑在手機上看也沒差多少。