應用開發過程中,常會有更換應用環境信息或多套環境(即工作空間,Workspace)并行研發的需求。
mPaaS 提供的工具可幫助您在開發過程中方便地進行環境切換。根據切換環境的需求不同,分為以下兩種方式:
靜態環境切換
前置條件
您已有基于 mPaaS 框架開發的 App。更多信息參見 基于 mPaaS 框架 > 快速開始。
在進行靜態環境切換時,需要使用到 easyconfig
,easyconfig
的工作原理如下:
能夠修改
AndroidManifest workspace
相關的meta
屬性。修改
assets
下的mpaas.properties
文件。如果
mPaaS
工程配置文件中包涵base64
屬性且屬性不為空,會生成無線保鏢加密圖片yw_1222.jpg
。
公有云
在公有云環境中,切換工作空間的步驟如下:
確保工程根目錄
build.gradle
文件中,有如下依賴:說明因功能迭代,以下依賴的版本可能會不斷增大。
classpath 'com.alipay.android:android-gradle-plugin:3.0.0.9.13' // 版本號必須大于 2.8.4 classpath 'com.android.boost.easyconfig:easyconfig:2.8.4'
確保主工程(
android main module
)的build.gradle
中有如下配置(請注意順序):apply plugin: 'com.alipay.portal' //位于 com.alipay.portal 之后即可 apply plugin: 'com.alipay.apollo.baseline.update'
從控制臺下載對應工作空間(Workspace)的
.config
配置文件。更多信息,請參考 在控制臺創建應用 > 下載配置文件。將下載的
.config
配置文件添加到主工程(android main module
)路徑下。如下圖所示:重要僅保留對應工作空間的配置文件即可。
專有云
在專有環境中,切換工作空間的步驟如下:
確保工程根目錄
build.gradle
文件中,有如下依賴:說明因功能迭代,以下依賴的版本可能會不斷增大。
classpath 'com.alipay.android:android-gradle-plugin:3.0.0.9.13' // 版本號必須大于 2.8.4 classpath 'com.android.boost.easyconfig:easyconfig:2.8.4'
確保主工程(
android main module
) 的build.gradle
中有如下配置(需注意順序):apply plugin: 'com.alipay.portal' //位于 com.alipay.portal 之后即可 apply plugin: 'com.alipay.apollo.baseline.update'
從控制臺下載對應工作空間的
.config
配置文件。更多信息參考 在控制臺創建應用 > 下載配置文件。將下載的
.config
配置文件添加到主工程(android main module
)路徑下。如下圖所示:重要僅保留對應工作空間的配置文件即可。
使用 mPaaS 插件生成
yw_1222.jpg
加密圖片。更多信息參見 加密圖片(專有云)。
動態環境切換
動態環境切換指客戶端不重新打包的情況下,通過修改手機設置中環境選項,動態修改應用的環境信息。
動態環境切換功能僅支持在專有云環境下使用。
動態環境切換適用于開發階段多套環境并存且頻繁切換的場景。
采用動態環境切換時需要向應用寫入新環境的環境配置文件。因此在采用該方式時,您需要為應用申請文件存儲權限。
由于 mPaaS 安全驗簽機制的限制,更新環境配置信息會修改無線保鏢驗簽 yw_1222.jpg
圖片,因此動態切換環境有兩個限制:
僅適用于開發階段,上線前請注意刪除對應的配置,否則 Release 包會報
RuntimeException
異常。mPaaS 控制臺需關閉網絡請求驗簽開關,否則會因驗簽圖片信息不對導致請求失敗。
添加動態環境切換 SDK
添加依賴。
原生 AAR 接入方式下,在工程主 module 下面的
build.gradle
配置文件中的dependencies
中添加以下依賴:dependencies { ··· implementation 'com.mpaas.mocksettings:mocksettings-build:10.1.60a.1575@aar' ··· }
Portal&Bundle 接入方式下,在 Portal 工程主 module 下面的
build.gradle
配置文件中的dependencies
中添加以下依賴:dependencies { ··· bundle 'com.mpaas.mocksettings:mocksettings-build:1.0.0.200421111458@jar' manifest 'com.mpaas.mocksettings:mocksettings-build:1.0.0.200421111458:AndroidManifest@xml' ··· }
使用 SDK。
原生 AAR 接入方式下,重寫 Application 的
getPackageManager
方法,替換PackageManager
為MockSettingsPackageManager
。private MockSettingsPackageManager mockSettingsPackageManager; @Override public PackageManager getPackageManager() { if (mockSettingsPackageManager == null) { mockSettingsPackageManager = new MockSettingsPackageManager(this, super.getPackageManager()); } return mockSettingsPackageManager; }
Portal&Bundle 接入方式下,將 Portal 工程主 module 下的
AndroidManifest.xml
中的application
修改為:<application android:name="com.alipay.mobile.quinox.MockSettingsLauncherApplication" ··· > ··· </application>
添加以下權限并確保運行時已動態申請:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
編譯 debug 包或在
AndroidManifest.xml
中打開 debug 設置:<application android:debuggable="true" ··· > ··· </application>
動態切換
掃描二維碼下載 mPaaS 設置 App。
安裝完成后,顯示 mPaaS 設置 App 的圖標如下:
將 mPaaS 控制臺下載的
config
文件放入手機 SD 卡或內部存儲中。添加環境。通過 mPaaS 設置 App 將
config
文件添加到列表中。打開 mPaaS 設置 App。
點擊 環境列表 頁面底部的 添加環境配置文件。
找到要添加的環境配置文件。
依次將兩個文件(正式環境和測試環境)添加至環境列表。
切換環境。
選擇上圖中的一個環境,點擊 切換,將其選中為當前環境。
然后啟動該環境所對應的 App,測試請求可正常發送,說明環境切換成功。
此時若切換到另一個環境,再重啟前一個環境所對應的 App,由于新的環境內沒有對應的 operationType,所以系統會報 3000 異常,這是已成功切換到另一個環境后的正常結果。