Android tinker熱修復——從執行demo開始

鋸齒流沙發表於2017-12-26

如今你不懂Android的熱修復和外掛化技術,都不好意思說自己Android開發的了。熱修復技術經過2015和2016年的發展、百花齊放,到2017年的沉澱,現在已經是非常成熟的Android技術,各個大廠也退出了自己的開源熱修復專案,本文我們將學習比較優秀的熱修復開源技術,騰訊系的tinker

tinker的githu地址:

https://github.com/Tencent/tinker

雖然在githut上有比較詳細的api文件和demo執行的教程,但是依然有讀書執行失敗,本文將更加詳細,手把手教你將tinker的demo執行起來。

clone

直接在GitHub上下載zip包,解壓,得到檔案,然後在AndroidStudio上執行sample

sample

或許會出現以下出錯:

tinker

需要在專案的gradle.properties新增:

android.injected.build.model.only.versioned=3

tinker

再次執行有可能會出現如下錯誤:

tinker

這個需要安裝git來解決,具體可以參考《Android 熱修復Tinker接入實戰 - CSDN部落格》這篇文章的第二個踩坑點。

那麼我是如何解決的呢,我直接安裝git,然後把專案clone下來。

tinker

tinker

重新匯入Sample,執行即可。不過還是會出現問題,如下:

tinker

解決辦法,在Instant Run的Enable中不需要打勾

tinker

如果還出現如此問題,解決如下:

tinker

開啟Run--->EditConfigurations,在Install Flags中新增 -t 即可

tinker

然後執行:

tinker

這就把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包的基準)。

tinker

tinkerPatchDebug

一切準備好之後,就需要tinkerPatchDebug了。

tinker

結果還是翻了車,出現如下錯誤

tinker

這個tinkerPatchDebug中斷,需要在build.gradle下的ignoreWarning改成true來解決,在tinker的gradle引數詳解中也有講到這個問題。

tinker

讀者也可以參考這篇文章《Tinker熱修復,配置時的坑》

配置好之後再tinkerPatchDebug一次,這次成功了,找到app---->build--->outputs--->apk---->tinkerPatch---->debug下面生成了一個patch_signed_7zip.apk。

然後將改patch_signed_7zip.apk包複製到手機的根目錄下,開啟app點選LoadPatch,修復成功,退出app,再一次開啟app。

tinker

tinker

至此,整個demo執行完成並且能夠實現熱修復的了,希望本文對你有幫助!!!

相關文章