2025 iThome鐵人賽
「 Flutter :30天打造念佛App,跨平台從Mobile到VR,讓極樂世界在眼前實現 ! 」
Day 28
「 Flutter Android上架 實戰應用篇 — 生活在地球的勇者啊,哪邊可以找到阿彌陀佛呀?(1) 」
昨天我們已經實作了 Flutter UI 動畫實作 「 逐字填滿動畫 」,
如此一來念佛 App 初步的核心功能以及 UX & UI 就已經完成。
今天讓我們一起準備 「 上架 Play 商店的前置流程 」!
Day 28 文章目錄:
一、前置準備
二、開發人員帳號
三、應用程式設定
1. 建立上傳金鑰(upload key)
輸入金鑰儲存庫密碼:
重新輸入新密碼:
Enter the distinguished name. Provide a single dot (.) to leave a sub-component empty or press ENTER to use the default value in braces.
您的名字與姓氏為何?
[Unknown]:
您的組織單位名稱為何?
[Unknown]:
您的組織名稱為何?
[Unknown]:
您所在的城市或地區名稱為何?
[Unknown]:
您所在的州及省份名稱為何?
[Unknown]:
此單位的兩個字母國別代碼為何?
[Unknown]:
產生有效期 10,000 天的 2,048 位元 RSA 金鑰組以及自我簽署憑證 (SHA384withRSA)
[儲存 /Users/**/upload-keystore.jks]
2. 建立 android/key.properties
讓 Gradle 在 build release 時讀取金鑰與密碼
cat > android/key.properties << 'EOF'
storePassword=//你的密碼
keyPassword=//你的密碼
keyAlias=upload
storeFile=/Users/$USER/upload-keystore.jks
EOF
3. release build 綁定 upload key
//android/app/build.gradle.kts 常見寫法
signingConfigs {
create("release") {
val props = java.util.Properties()
val f = rootProject.file("android/key.properties")
props.load(java.io.FileInputStream(f))
storeFile = file(props["storeFile"] as String)
storePassword = props["storePassword"] as String
keyAlias = props["keyAlias"] as String
keyPassword = props["keyPassword"] as String
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = false
isShrinkResources = false
}
}
驗證
cd android
./gradlew signingReport
Variant: release
Store 指向 .jks
Alias 是 upload
4. 權限與顯示字串檢查
//android/app/src/main/AndroidManifest.xml
<manifest ...> //念佛App語音轉文字功能需要麥克風,權限依專案需求檢查
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<application
android:label="@string/app_name"
...>
</application>
</manifest>
5. 產出 aab ( 正式上架檔 )
flutter clean
flutter pub get
flutter build appbundle --release
//輸出:build/app/outputs/bundle/release/app-release.aab
NamoAmitabha ~/Desktop/Amitabha/amitabha flutter build appbundle --release
Font asset "MaterialIcons-Regular.otf" was tree-shaken, reducing it from 1645184 to 2572 bytes (99.8% reduction). Tree-shaking can be disabled by providing the --no-tree-shake-icons flag when building your app.
Running Gradle task 'bundleRelease'... 107.1s
//成功輸出
✓ Built build/app/outputs/bundle/release/app-release.aab (101.8MB)
重點 | 內容 |
---|---|
前置準備 | upload key、aab |
開發人員帳號 | 一次性 25 美金註冊費用、相關身分證明文件 |
應用程式設定 | App內容說明、Play 商店分類 |