前言
這幾天開始接觸熱修復模叙,體驗了一把阿里熱修復Sophix的傻瓜式接入歇拆。雖說是傻瓜式接入,但實際操作起來還是遇到不少坑向楼,而且Sophix的官方文檔有些地方有點難理解查吊,部分圖片也跟現(xiàn)在的不一樣,所以今天我整理了一下我接入Sophix的過程湖蜕,希望對大家有所幫助逻卖。當然,如果你對熱修復并不了解昭抒,可以先去了解下Android的熱修復评也,再來看這個文章。
一灭返、Sophix是什么
Sophix提供了一套更加完美的客戶端服務(wù)端一體的熱更新方案盗迟,做到了圖形界面一鍵打包、加密傳輸熙含、簽名校驗和服務(wù)端控制發(fā)布與灰度功能罚缕,讓你用最少的時間實現(xiàn)最強大可靠的全方位熱更新。
二怎静、接入步驟
1.AndroidStudio集成
gradle遠程倉庫依賴, 打開項目找到app的build.gradle文件邮弹,添加maven倉庫地址:
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
}
添加gradle坐標版本依賴:
compile 'com.aliyun.ams:alicloud-android-hotfix:3.2.2'
2.配置AndroidManifest文件
在AndroidManifest.xml文件中的application節(jié)點添加:
將上述value中的值分別改為通過阿里平臺HotFix服務(wù)申請得到的APP ID、App Secret和RSA密鑰(這三個東西是在阿里云平臺創(chuàng)建應(yīng)用后才能看到蚓聘,可以等注冊平臺創(chuàng)建應(yīng)用后腌乡,再來填寫),出于安全考慮夜牡,也可以使用setSecretMetaData這個方法進行設(shè)置与纽,后續(xù)配置會講到這個方法。
添加權(quán)限:
<! -- 網(wǎng)絡(luò)權(quán)限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<! -- 外部存儲讀權(quán)限塘装,調(diào)試工具加載本地補丁需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
3.接入方式
目前急迂,Sophix提供兩種接入方式:快速接入 和 穩(wěn)健接入,這部分大家可以直接點擊進去看官方文檔蹦肴,這部分文檔還是寫得比較詳細的袋毙,前文提到的setSecretMetaData方法也在快速接入中有詳細介紹。由于穩(wěn)健接入完美地兼容Android 8.0以后版本冗尤,且初始化與應(yīng)用原先業(yè)務(wù)代碼完全隔離听盖,所以我直接使用了穩(wěn)健接入。
使用穩(wěn)健接入時要注意不要忘記添加這句代碼:
// queryAndLoadNewPatch不可放在attachBaseContext 中裂七,否則無網(wǎng)絡(luò)權(quán)限皆看,建議放在后面任意時刻,如onCreate中
SophixManager.getInstance().queryAndLoadNewPatch();//查詢是否有新的補丁
我當時就是直接看了穩(wěn)健接入的文檔背零,但是這文檔并沒有這句代碼(這句代碼在快速接入文檔里有)腰吟,結(jié)果導致我所有都配置好之后沒有實現(xiàn)熱修復功能。這句代碼的作用是查詢是否有新的補丁徙瓶,我是放在Application里的onCreate()中毛雇。
完成以上步驟后,不出意外的話侦镇,接入已經(jīng)成功灵疮。這個時候可以通過看log信息判斷是否接入成功,第一個紅框是初始化信息壳繁,第二震捣、三紅框是你調(diào)用了queryAndLoadNewPatch()返回的信息。大家可以等注冊好阿里云平臺創(chuàng)建好應(yīng)用獲取并填寫APP ID闹炉、App Secret和RSA密鑰這三個東西到配置文件后蒿赢,再來看log信息對不對。
三渣触、注冊平臺
Sophix熱修復是在阿里云移動研發(fā)平臺上的羡棵,他為用戶提供一個可視化控制臺,用起來比較直觀簡便嗅钻。由于官方文檔里有部分圖片與現(xiàn)在平臺呈現(xiàn)的不一致皂冰,所以我將創(chuàng)建應(yīng)用發(fā)布補丁等圖都截了下來。接下來內(nèi)容圖片有點多啊犬,看得懂官方文檔的可以跳過這一節(jié)灼擂。
1.注冊賬號開通服務(wù)
注冊就不說了,注冊完在產(chǎn)品中找到移動熱修復觉至,首次使用要開通服務(wù)剔应。
開通服務(wù)后,點擊添加產(chǎn)品语御,輸入產(chǎn)品名稱峻贮。
然后進入你添加的產(chǎn)品。
添加應(yīng)用应闯,輸入app名稱和包名疲迂,包名一定要跟項目的包名一致。
進入剛創(chuàng)建的應(yīng)用储耐,然后選擇左邊菜單欄的移動熱修復。
點擊右上角的應(yīng)用信息刻撒,就可以看到我們初始化時需要用到的三個參數(shù)了,把他配置到我們的項目代碼中耿导。
點擊左上角的功能声怔,然后點擊添加版本,這里輸入的版本號要跟你項目配置文件中的versionCode一樣舱呻,比如我的項目中versionCode為1醋火,那我就寫1.0。
添加完版本后箱吕,就可以開始上傳補丁進行熱修復了芥驳,在上傳補丁前,我們要用一個叫SophixPatchTool工具來生成補丁包茬高。
Mac版本打包工具地址:http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_macos.zip
Windows版本打包工具地址:http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_windows.zip
Linux版本打包工具地址:http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_linux.zip
該工具提供了Windows和macOS和Linux版本兆旬,Windows下運行SophixPatchTool.exe,macOS下運行SophixPatchTool.app雅采,Linux下(Ubuntu 16.04 64bit最佳)運行SophixPatchTool爵憎。并且需要安裝Java環(huán)境且在JDK7或以上才能正常使用。
我使用的是Windows版本的打包工具婚瓜,舊包就是存在bug的apk宝鼓,新包就是更新完bug要進行熱修復的包。
設(shè)置界面主要是設(shè)置補丁輸出路徑和一些其他配置巴刻,我只設(shè)置了輸出路徑愚铡。
- 補丁輸出路徑:<必填> 指定生成補丁之后補丁的存放位置,必須是已存在的目錄胡陪。
- Key Store Path:<選填>本地的簽名文件的路徑沥寥,不輸入則不做簽名。
- Key Store Password:<選填>證書文件的密碼柠座。
- Key Alias:<選填>Key的別名邑雅。
- Key Passwrod:<選填>Key的密碼。
- AES Key:<選填>自定義aes秘鑰, 必須是16位數(shù)字或字母的組合妈经。必須與setAesKey中設(shè)置的秘鑰一致淮野。
- Filter Class File:<選填>本地的白名單類列表文件的路徑,放進去的類不會再計算patch吹泡,文件格式: 一行一個類名骤星。
高級里我只去掉強制冷啟動,你們也可以不操作這里爆哑。
然后就可以點擊GO洞难,開始生成補丁了。這里要注意的是揭朝,如果你AndroidStudio中開著install run队贱,一定要關(guān)閉色冀,不然你生成補丁時他會一直顯示正在生成補丁,但是一直不會停止柱嫌。關(guān)閉install run方法為:File->Settings->install run->去掉勾
如果生成補丁前沒關(guān)install run的話呐伞,最好重新生成一下apk包再去生成一個名為sophix-patch的補丁文件。
補丁生成后慎式,我們就可以上傳補丁。在之前創(chuàng)建的版本上點擊上傳補丁趟径,上傳成功后瘪吏,發(fā)布狀態(tài)會變成已就緒。
點擊詳情蜗巧,可以看到右上角有個補丁驗證掌眠,在新建發(fā)布前,我們一定要先自己測試下熱修復是否成功幕屹。這里需要用官方提供的調(diào)試工具來測試蓝丙,具體操作可以看官方的調(diào)試補丁章節(jié)。
調(diào)試無誤后望拖,就可以新建發(fā)布了渺尘,發(fā)布主要有兩種類型:灰度發(fā)布和全量發(fā)布,灰度發(fā)布可以限定人數(shù)说敏。官方要求發(fā)布前請嚴格按照:掃碼內(nèi)測 => 灰度發(fā)布 => 全量發(fā)布的流程進行鸥跟,以保證補丁包能夠正常在所有Android版本的機型上生效。
選擇好發(fā)布類型盔沫,點擊發(fā)布后医咨,你的補丁就在服務(wù)器上了。此時你關(guān)掉你的app(殺掉后臺進程)重新打開架诞,你會發(fā)現(xiàn)你原來設(shè)置的bug已經(jīng)不存在了拟淮,說明熱修復成功。
寫到這里就結(jié)束啦谴忧,可能有些地方說的不太清楚很泊,大家有問題可以留言。不過Sophix并不支持修改AndroidManifest.xml文件俏蛮,不支持添加四大組件撑蚌,也不能改版本號(改了也不會生效),所以跟我一樣想用熱修復充當更新app功能的小伙伴可能要動下腦筋咯搏屑!
最后附上:Andorid接入常見問題