阿里熱修復之Sophix的集成詳解

前言

這幾天開始接觸熱修復模叙,體驗了一把阿里熱修復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工具來生成補丁包茬高。

該工具提供了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接入常見問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末争涌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辣恋,更是在濱河造成了極大的恐慌亮垫,老刑警劉巖模软,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饮潦,居然都是意外死亡燃异,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門继蜡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來回俐,“玉大人,你說我怎么就攤上這事稀并〗銎模” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵碘举,是天一觀的道長忘瓦。 經(jīng)常有香客問我,道長引颈,這世上最難降的妖魔是什么耕皮? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蝙场,結(jié)果婚禮上凌停,老公的妹妹穿的比我還像新娘。我一直安慰自己李丰,他們只是感情好苦锨,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趴泌,像睡著了一般舟舒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗜憔,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天秃励,我揣著相機與錄音,去河邊找鬼吉捶。 笑死夺鲜,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的呐舔。 我是一名探鬼主播币励,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼珊拼!你這毒婦竟也來了食呻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仅胞,沒想到半個月后每辟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡干旧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年渠欺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椎眯。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡挠将,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出编整,到底是詐尸還是另有隱情捐名,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布闹击,位于F島的核電站,受9級特大地震影響成艘,放射性物質(zhì)發(fā)生泄漏赏半。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一淆两、第九天 我趴在偏房一處隱蔽的房頂上張望断箫。 院中可真熱鬧,春花似錦秋冰、人聲如沸仲义。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埃撵。三九已至,卻和暖如春虽另,著一層夾襖步出監(jiān)牢的瞬間暂刘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工捂刺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谣拣,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓族展,卻偏偏與公主長得像森缠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子仪缸,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容