如今你不懂Android的熱修復和外掛化技術,都不好意思說自己Android開發的了。熱修復技術經過2015和2016年的發展、百花齊放,到2017年的沉澱,現在已經是非常成熟的Android技術,各個大廠也退出了自己的開源熱修復專案,本文我們將學習比較優秀的熱修復開源技術,騰訊系的tinker。
tinker的githu地址:
https://github.com/Tencent/tinker
雖然在githut上有比較詳細的api文件和demo執行的教程,但是依然有讀書執行失敗,本文將更加詳細,手把手教你將tinker的demo執行起來。
clone
直接在GitHub上下載zip包,解壓,得到檔案,然後在AndroidStudio上執行sample
或許會出現以下出錯:
需要在專案的gradle.properties新增:
android.injected.build.model.only.versioned=3
再次執行有可能會出現如下錯誤:
這個需要安裝git來解決,具體可以參考《Android 熱修復Tinker接入實戰 - CSDN部落格》這篇文章的第二個踩坑點。
那麼我是如何解決的呢,我直接安裝git,然後把專案clone下來。
重新匯入Sample,執行即可。不過還是會出現問題,如下:
解決辦法,在Instant Run的Enable中不需要打勾
如果還出現如此問題,解決如下:
開啟Run--->EditConfigurations,在Install Flags中新增 -t
即可
然後執行:
這就把demo執行出來了。執行出來不是我們的目的,我們需要測試一下熱修復的情況,接下來就測試熱修復。
我們在MainActivity中新增如下程式碼
this.findViewById(R.id.hello).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"你好tinker",Toast.LENGTH_SHORT).show();
}
});
複製程式碼
對應的xml佈局檔案新增一個Button
<Button
android:id="@+id/hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/showInfo"
android:text="你好tinker"/>
複製程式碼
修改app的build.gradle檔案的tinkerOldApkPath和tinkerApplyResourcePath
在執行完專案之後,會在app-->build--->bakApk下面有生成的apk檔案,找到最新的apk和對應的txt檔案(這個apk是熱更新的達成的patch包的基準)。
tinkerPatchDebug
一切準備好之後,就需要tinkerPatchDebug了。
結果還是翻了車,出現如下錯誤
這個tinkerPatchDebug中斷,需要在build.gradle下的ignoreWarning改成true來解決,在tinker的gradle引數詳解中也有講到這個問題。
讀者也可以參考這篇文章《Tinker熱修復,配置時的坑》
配置好之後再tinkerPatchDebug一次,這次成功了,找到app---->build--->outputs--->apk---->tinkerPatch---->debug下面生成了一個patch_signed_7zip.apk。
然後將改patch_signed_7zip.apk包複製到手機的根目錄下,開啟app點選LoadPatch,修復成功,退出app,再一次開啟app。
至此,整個demo執行完成並且能夠實現熱修復的了,希望本文對你有幫助!!!