最近開始厭煩,反覆安裝app的正式版與開發版
安裝好又要重新登入,只為了看一些小東西。
以前的解決方式是,用兩台手機(好野人),開發與正式分別安裝在不同台。
但一般做法如何? 最近因工作需求,稍微實作的一下。
OS:
因程式碼都相同,只是產不同版本的話,以前的我就只能傻傻的更換package name並更動很多配置。
更動後還要額外測試是否正確。說真的頗花時間的。
過了五年了,又碰到該議題,應該有更加便利的方式處理吧
目的: 在同一裝置上,同時安裝dev 開發版與product 正式版
關鍵字
applicationIdSuffix、manifestPlaceholders
就以概念來說好了,device os 如何判斷app的唯一性,
Anser:
android: package name
os: bundle id
藉由此概念,來找尋簡單方便調整 package name 的方式。以下我以android為例。
多版本
google 官方提出 使用uild.gradle 中的參數便可快速處理該問題
重要參數
applicationIdSuffix: 此參數代表在原本的package name 後面再加入字元。如:dev、alpha 、beta 等等字眼
android { defaultConfig { applicationId "com.example.myapp" } buildTypes { dev { applicationIdSuffix ".dev" } pro { applicationIdSuffix ".pro" } } }
更動後,便可以在同一裝置安裝多版本了。沒想要意外的簡單。
不過事情還沒完,還要加入差異,用來區別dev / product的app
最常見的就是, app name, app icon, versionName
動態 更動 App 名稱與 icon
大家都知道 Android 的 app name 與 app icon 會在AndroidManifest中做設定,定死了後面要調整不太容易
這邊只說官方提供的方式,manifestPlaceholders
1. 先在 buildTypes中新增參數
android { buildTypes { release { manifestPlaceholders = [ icon_paht:"@mipmap/ic_launcher", app_name:"@string/app_name", ] } dev { applicationIdSuffix ".dev" manifestPlaceholders = [ icon_paht:"@mipmap/ic_launcher_dev", app_name:"@string/app_name_dev", ] } } ... }
2. 調整 AndroidManifest 設定
<application android:icon="${icon_path}" android:label="${app_name}"
這樣就可以參考到對應值。
延伸問題
1. App 本身有用Deeplink/Applink。當使用deeplink時,若都有安裝的話,會開啟正式版的 (因為會先開啟沒有suffix的版本)。
建議如下:
domain 不調整,針對pathPrefix 路徑調整便可。這樣applink domain 不用更動, 也不會再想其他地方放assetlinks.json
參考方式
調整方式可用 manifestPlaceholders 方式處理
2. Firebase libs 找不到 dev 版本的package name
我個人覺得很好的方式為, 在Firebase 專案中 新增 app, 並更新 google-services.json 便可
這邊有種種好處
1. Remote config 設定方便, 可以用 condition 的方式指定特定app ,對於串接remote config 來說, app 就不需要針對不同版本做更動
2. FCM: 因專案相同,這樣一來後端也不需要針對不同版本搞不同專案(FCM 會根據 裝置中的 app 產生唯一的token )
3. Crashlytics: 針對不同的app 紀錄 crash, 避免資料交叉污染。 ga 也可用相同方式濾掉 開發者的行為
留言列表