Tinker出來(lái)有一段時(shí)間了根穷,我也是第一時(shí)間開(kāi)始使用這個(gè)框架柏靶,感覺(jué)真的很好用物邑,而且支持動(dòng)態(tài)根性的類型也很多溜哮,當(dāng)然還有它的多平臺(tái)的兼容性,畢竟是在微信上使用的色解。
Tinker簡(jiǎn)介(官方文檔)
Tinker是微信官方的Android熱補(bǔ)丁解決方案茬射,它支持動(dòng)態(tài)下發(fā)代碼、So庫(kù)以及資源冒签,讓?xiě)?yīng)用能夠在不需要重新安裝的情況下實(shí)現(xiàn)更新在抛。
Tinker注意事項(xiàng)
Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大組件萧恕;
由于Google Play的開(kāi)發(fā)者條款限制刚梭,不建議在GP渠道動(dòng)態(tài)更新代碼;
由于apk-parser issue, TinkerId不能設(shè)置為非常短的數(shù)字票唆,例如“1.0”朴读;
在Android N上,補(bǔ)丁對(duì)應(yīng)用啟動(dòng)時(shí)間有輕微的影響走趋;
不支持部分三星android-19機(jī)型衅金,加載補(bǔ)丁時(shí)會(huì)主動(dòng)拋出"TinkerRuntimeException:checkDexInstall failed";
-
關(guān)于渠道包的問(wèn)題簿煌,若使用flavor編譯渠道包氮唯,會(huì)導(dǎo)致不同的渠道包由于BuildConfig變化導(dǎo)致classes.dex差異。這里建議的方式有:
- 將渠道信息寫(xiě)在AndroidManifest.xml中姨伟;
- 將渠道信息寫(xiě)在apk文件的zip comment中惩琉,這種是建議方式;
- 若不同渠道存在功能上的差異夺荒,建議將差異部分放于單獨(dú)的dex或采用相同代碼不同配置方式實(shí)現(xiàn)瞒渠。
運(yùn)行Tinker示例缺少TinkerId問(wèn)題解決
問(wèn)題描述:can't get git rev, you should add git to system path or just input test value, such as 'testTinkerId'
產(chǎn)生原因:由于tinker生成補(bǔ)丁的版本號(hào),用的是git的版本號(hào)技扼,如果你不是通過(guò)git下載的tinker源代碼伍玖,或者沒(méi)有配置系統(tǒng)的git路徑,或者沒(méi)有commit一次剿吻,都有可能出現(xiàn)呢上面的問(wèn)題窍箍。
解決辦法:
方法一:不使用git的版本號(hào)作為tinkerId,改為使用versionName
(圖2)修改gitSha方法返回值
- 方法二:使用git的版本號(hào),解決無(wú)法獲取到版本號(hào)的問(wèn)題仔燕。
- 下載和安裝git win64下載
- 配置AS的git路徑和系統(tǒng)git路徑
- AS配置:File-->Settings-->Version Control-->Git-->Path to Git executable
(圖3)AS配置git路徑
點(diǎn)擊Test造垛,出現(xiàn)當(dāng)前git版本號(hào),表示AS的git路徑配置成功晰搀。
(圖4)git配置成功
系統(tǒng)配置:系統(tǒng)環(huán)境變量和Java環(huán)境配置一樣五辽,在此就不贅述了。配置成功后外恕,在控制臺(tái)數(shù)據(jù) git --version,檢測(cè)是否配置成功杆逗。
(圖5)系統(tǒng)git配置
注意:配置完系統(tǒng)的git環(huán)境變量,如果你的AS處于開(kāi)啟的狀態(tài)鳞疲,請(qǐng)重啟后進(jìn)行g(shù)radle編譯罪郊。