Tinker整合和遇坑總結

2021-09-09 09:17:14 字數 3578 閱讀 7460

新增依賴

初始化生成補丁

下發補丁

新增project依賴:開啟專案project的gradle新增以下**

buildscript 

dependencies

}

新增model依賴:開啟model的gradle檔案,如下新增依賴,只需要新增注釋標明部分即可,這裡我是固定使用的1.9.8的tinker

android }

}buildtypes

}sourcesets

}dexoptions

lintoptions

}repositories

}dependencies

新增tinkerpatch.gradle:這個步驟就是建立上面gradle依賴的tinkerpatch.gradle檔案

第一步:新建乙個gradle檔案,名字叫做tinkerpatch.gradle,建立完成之後就是這樣子了

第二步寫入tinker配置。這裡直接照抄官方的配置就可以,下面是我自己修改過的,下面是我自己的配置

def bakpath = file("$/bakapk/")//這個是編譯基礎包的位置

tinkerpatchsupport "

/**bakapk目錄下的apk檔案

* 所謂基礎包,是你在生成補丁包時,那個拿來對比的安裝包,務必在出版本的時候保留,

**/baseapkfile = "放置基礎包的路徑"

* 當你的應用開啟混淆時會在bakapk和apk同乙個目錄下會生成這個檔案,不開啟混淆則不會生成

**//**bakapk目錄下的-r.txt檔案

* 在bakapk和apk同乙個目錄下會生成這個檔案

**/baseresourcerfile = "資源對映檔案"

}/**

* 用於使用者在**中判斷tinkerpatch是否被使能

*/android "

}}/**

* 一般來說,我們無需對下面的引數做任何的修改

* 對於各引數的詳細介紹請參考:

再貼出一下bakapk的目錄結構

// 每隔3個小時去訪問後台時候有更新,通過handler實現輪訓的效果

new fetchpatchhandler().fetchpatchwithinterval(3);}}

fetchpatchhandler的**,主要就是乙個定時器:

public class fetchpatchhandler extends handler 

@override

public void handlemessage(message msg)

}

這樣子,專案就配置好了tinker了,接下來是補丁生成和下發的部分。

生成基礎檔案(apk,r.txt,maping.txt)

對比生成補丁

生成基礎檔案:

這個步驟一般在實際專案中發生在出版本的時候,操作如下

執行完成之後會在bakapk目錄下生成乙個新的資料夾,裡面包含了三個或者兩個檔案,把這幾個檔案放置到你tinkerpatch.gradle中配置的那個檔案目錄下方,這個apk就是提供給使用者的apk

對比生成補丁,當我們發生bug之後,**修改後,此時需要生成補丁上去修復故障,在生成基礎檔案的時候我們已經將基礎檔案放置到對應目錄下了,那麼接下來直接這麼操作:

在編譯完成之後會列印出如下日誌

find the output 後面那個就是補丁包的生成路徑了,路徑下存在打好的補丁包了

這時候開啟tinker官網找到自己需要發布的應用,建立好對應版本,然後選擇檔案下發就可以了,這個版本是和tinkerpatch.gradle裡面配置的版本對應的。

1.tinker上傳補丁包顯示非法

2.tinker修復之後程式直接崩潰

這邊列舉一種我碰到的錯誤:在補丁下發並且合成之後,再次開啟程式,直接崩潰,顯示資源未找到異常,這時候請檢查你的補丁包資料夾是否有除了.apk之外的其他檔案,如果有恭喜,這個檔案通過充錢可以解決,首先說下產生原因:

tinker在生成補丁的時候會把設定的部分進行乙個對比,一旦發生改變就會新增到補丁包中,這個是可以配置的,例如你的資源檔案發生了改變,那麼會多出乙個resource.7z的資源補丁包,這時候在補丁包中指定的資源id就變了,就是r.id.***對應的那些r檔案的資源變了,這時候你需要上傳兩個補丁乙個是資源補丁,乙個是**補丁,不然會notfoundexception,在as3.0開啟了aapt2之後,莫名的所有資源都會檢測到修改,這個我也不知道為啥,所以會生成乙個巨大的資源補丁包,這時候官方免費的版本是不能上傳太大檔案的(所以如果想修改資源,建議使用付費版)。

重點來了:但是實際中如果你不需要替換資源,又想不交錢,那麼可以指定對比的資源,只修改**這時候也是能夠解決問題的

配置tinkerpatch.gradle如下:

/**

* 一般來說,我們無需對下面的引數做任何的修改

* 對於各引數的詳細介紹請參考:

* */tinkerpatch

lib

//修改此處,這邊是修改tinker打包資源時對比的資源選項,其中src是預設的,但是資源檔案可以按照需

//要自己配置,我這邊配置只對比androidmefest.xml的內容,所以我配置的tinker只能修改**,這裡按//照自己需要配置

res

packageconfig

sevenzip

buildconfig

}

其次在安卓8.0之後3小時一次的輪詢據說失效,我沒測試過,大家可以試試,且又聽說在最新版本的tinker中新增了定時輪詢,沒去了解,小夥伴們可以自己試試。

撒有啦啦!!!

記一次ES整合logstash所遇的坑

安裝與es版本的相同的logstash,例 es版本為6.2.1,那麼logstash的版本需保持一致。解壓安裝,結業完成後的目錄如下 驗證ruby是否安裝成功 ruby v安裝logstash input jdbc外掛程式,注意進入logstash的bin目錄,執行下列命令 logstash pl...

hibernate和spring整合總結

一 datasource基礎 1 jdbctemplate包裝了增刪改查方法 dao類繼承jdbcdaosupport,可以通過getjdbctemplate 方法獲得jdbctemplate,配置的時候需要引入datasource dao類繼承jdbctemplate,則可以直接使用增刪改查,配置...

Spring和Mybatis整合的踩坑之路

萬用字元的匹配很全面,但無法找到元素 context property placeholder 的宣告 在spring配置檔案中出現萬用字元的匹配很全面,但無法找到元素 context property placeholder 的宣告這個錯誤,其實主要是我們在引入命名空間時沒有正確引入它的dtd解析...