#Github Action#Github#Flutter#APK#AAB#Android

使用原因


因為個人 Mac 是 M1 記憶體也只有 8G,空間又不足,每次 Build 都會跑到電腦很 Lag,所以轉用 Github Action 來 Build,避免電腦一堆垃圾與佔用記憶體。

Guthub 免費提供每月 2000 分鐘的額度,可以從 Actions Usage Metrics 觀看使用量。

Plan Artifact storage Minutes (per month) Cache storage
GitHub Free 500 MB 2,000 10 GB
GitHub Pro 1 GB 3,000 10 GB
GitHub Free for organizations 500 MB 2,000 10 GB
GitHub Team 2 GB 3,000 10 GB
GitHub Enterprise Cloud 50 GB 50,000 10 GB

Workflow


路徑

.github/workflows/xxx.yml ,一個 xxx.yml 檔,就是一個工作流程,一個專案可以一次設定多個 workflow。


GitHub Personal Access Token 設定

要使用 Action 上傳到 Github Release 就必須先設定一組 Token,產生方式為 右上角點你的頭像 > Settings > Developer settings > Personal access tokens > Tokens (classic) > Generate new token (classic),勾選 repowrite:packages 產生。


Secrets 設定

Secrets 是用來將 .jks、Token、等機敏資料加密存在 Github,使用到時再讀出來使用,避免把機敏資料上到 Git Commit。
一個 Secret 可從 GitHub Repository > Settings > Secrets and variables > Actions > New repository secret 新增即可在 .yml 內使用 ${{ secrets.KEY }} 替代。

Secret 名稱 用途說明
ID_RSA SFTP SSH Key
KEYSTORE_BASE64 Android keystore 的 Base64
KEY_ALIAS Keystore 的 Alias
KEY_PASSWORD Key 的密碼
STORE_PASSWORD Keystore 的密碼
PERSONAL_ACCESS_TOKEN GitHub Personal Access Token


#Android#Play App Signing#keytool

最近換了新 Mac,但忘記把上一台的 Android upload-keystore.jks 傳過來就格式化了,導致無法上傳更新 APP。

您的 Android App Bundle 使用的簽署金鑰錯誤。請務必使用正確的簽署金鑰簽署您的 App Bundle,然後再試一次。您的 App Bundle 應由具有以下指紋的憑證簽署:
SHA1: EB:4A:............:DA:9E
,而您為簽署 App Bundle 所上傳的憑證具有以下指紋:
SHA1: 79:61:............:11:F2

好在有參加 Google Play 應用程式簽署計畫,讓 Goolge 幫我保管真實的簽署金鑰,否則就要改套件名稱(bundle ID)並重新上架了。

Google Play 應用程式簽署計畫


只要您使用 Play 應用程式簽署功能,Google 就會為您管理及保護應用程式的簽署金鑰,並使用該金鑰簽署您要發布的 APK。此外,由於應用程式套件會延遲建立 Google Play 商店簽署及簽署 APK,因此您必須設定 Play 應用程式簽署功能,然後再上傳應用程式套件。



#Flutter#Flutter package#uni_links#APP Link#Universal Links#Xcode#iOS#Android

Android 的 App Link 與 iOS 的 Universal Links 是可以讓手機點擊 HTTP URL Scheme (http:// or https://) 就直接開啟 APP 導向到指定頁面,也可在 APP 之間做轉跳。有別於 Deep Links 的 Custom Url Scheme 是可以避免跟其他 APP 命名衝突、或是發生使用者沒裝 APP 開啟後網頁一片白的窘境。

For Android


修改你的 AndroidManifest.xml,將要開啟 APP 的 domain + path 放到 <activity> 之中。

  • android:scheme :通常只要輸入 https,除非你特別要支援 http。
  • android:host :輸入你的 domain,如有測試環境也可一併加上,有 www 與沒 www 的算兩個 domain。
  • android:pathPrefix :因為不會是遇到網域底下所有頁面都要開啟 APP,這裡就是讓你輸入你要開啟的 path。
<!-- App Links -->
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <!-- /download -->
    <data android:scheme="https" android:host="joymap.tw" android:pathPrefix="/download" />
    <data android:scheme="https" android:host="www.joymap.tw" android:pathPrefix="/download" />
    <!-- /member/news -->
    <data android:scheme="https" android:host="joymap.tw" android:pathPrefix="/member/news" />
    <data android:scheme="https" android:host="www.joymap.tw" android:pathPrefix="/member/news" />
    <!-- /store -->
    <data android:scheme="https" android:host="joymap.tw" android:pathPrefix="/store" />
    <data android:scheme="https" android:host="www.joymap.tw" android:pathPrefix="/store" />
</intent-filter>

將以下 json 放至網站 /.well-known/assetlinks.json (例如 https://joymap.tw/.well-known/assetlinks.json)
package_name 需修改成你的 package_name
sha256_cert_fingerprints 也是修改為你的指紋

[
   {
      "relation":[
         "delegate_permission/common.handle_all_urls"
      ],
      "target":{
         "namespace":"android_app",
         "package_name":"com.toby.joymap",
         "sha256_cert_fingerprints":[
            "c1:06:01:09:6c:e1:89:78:38:87:73:9a:34:1d:07:fe:bf:1b:b8:a2:e7:49:6e:11:70:d9:fb:67:22:e0:da:22"
         ]
      }
   }
]