Files
bot-rates/android/README.md

94 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 直接跑在手機上看也沒差多少。