tinker接入

tinker參數配置說明:

 

參數 默認值 描述
tinkerPatch   全局信息相關的配置項
tinkerEnable true 是否打開tinker的功能。
oldApk null 基準apk包的路徑,必須輸入,否則會報錯。
newApk null 選填,用於編譯補丁apk路徑。如果路徑合法,即不再編譯新的安裝包,使用oldApk與newApk直接編譯。
outputFolder null 選填,設置編譯輸出路徑。默認在build/outputs/tinkerPatch  
ignoreWarning false 如果出現以下的情況,並且ignoreWarning爲false,我們將中斷編譯。因爲這些情況可能會導致編譯出來的patch包帶來風險:
1. minSdkVersion小於14,但是dexMode的值爲"raw";
2. 新編譯的安裝包出現新增的四大組件(Activity, BroadcastReceiver...);
3. 定義在dex.loader用於加載補丁的類不在main dex中;
4. 定義在dex.loader用於加載補丁的類出現修改;
5. resources.arsc改變,但沒有使用applyResourceMapping編譯。
useSign true 在運行過程中,我們需要驗證基準apk包與補丁包的簽名是否一致,我們是否需要爲你簽名。
buildConfig   編譯相關的配置項
applyMapping null 可選參數;在編譯新的apk時候,我們希望通過保持舊apk的proguard混淆方式,從而減少補丁包的大小。這個只是推薦設置,不設置applyMapping也不會影響任何的assemble編譯
applyResourceMapping null 可選參數;在編譯新的apk時候,我們希望通過舊apk的R.txt文件保持ResId的分配,這樣不僅可以減少補丁包的大小,同時也避免由於ResId改變導致remote view異常
tinkerId null 在運行過程中,我們需要驗證基準apk包的tinkerId是否等於補丁包的tinkerId。這個是決定補丁包能運行在哪些基準包上面,一般來說我們可以使用git版本號、versionName等等。
keepDexApply false 如果我們有多個dex,編譯補丁時可能會由於類的移動導致變更增多。若打開keepDexApply模式,補丁包將根據基準包的類分佈來編譯。
isProtectedApp false 是否使用加固模式,僅僅將變更的類合成補丁。注意,這種模式僅僅可以用於加固應用中。
supportHotplugComponent(added 1.9.0) false 是否支持新增非export的Activity
dex   dex相關的配置項
dexMode jar 只能是'raw'或者'jar'。 
對於'raw'模式,我們將會保持輸入dex的格式。
對於'jar'模式,我們將會把輸入dex重新壓縮封裝到jar。如果你的minSdkVersion小於14,你必須選擇‘jar’模式,而且它更省存儲空間,但是驗證md5時比'raw'模式耗時。默認我們並不會去校驗md5,一般情況下選擇jar模式即可。
pattern [] 需要處理dex路徑,支持*、?通配符,必須使用'/'分割。路徑是相對安裝包的,例如assets/...
loader [] 這一項非常重要,它定義了哪些類在加載補丁包的時候會用到。這些類是通過Tinker無法修改的類,也是一定要放在main dex的類。
這裏需要定義的類有:
1. 你自己定義的Application類;
2. Tinker庫中用於加載補丁包的部分類,即com.tencent.tinker.loader.*; 
3. 如果你自定義了TinkerLoader,需要將它以及它引用的所有類也加入loader中;
4. 其他一些你不希望被更改的類,例如Sample中的BaseBuildInfo類。這裏需要注意的是,這些類的直接引用類也需要加入到loader中。或者你需要將這個類變成非preverify。
5. 使用1.7.6版本之後的gradle版本,參數1、2會自動填寫。若使用newApk或者命令行版本編譯,1、2依然需要手動填寫
lib   lib相關的配置項
pattern [] 需要處理lib路徑,支持*、?通配符,必須使用'/'分割。與dex.pattern一致, 路徑是相對安裝包的,例如assets/...
res   res相關的配置項
pattern [] 需要處理res路徑,支持*、?通配符,必須使用'/'分割。與dex.pattern一致, 路徑是相對安裝包的,例如assets/...,務必注意的是,只有滿足pattern的資源纔會放到合成後的資源包。
ignoreChange [] 支持*、?通配符,必須使用'/'分割。若滿足ignoreChange的pattern,在編譯時會忽略該文件的新增、刪除與修改。 最極端的情況,ignoreChange與上面的pattern一致,即會完全忽略所有資源的修改。
largeModSize 100 對於修改的資源,如果大於largeModSize,我們將使用bsdiff算法。這可以降低補丁包的大小,但是會增加合成時的複雜度。默認大小爲100kb
packageConfig   用於生成補丁包中的'package_meta.txt'文件
configField TINKER_ID, NEW_TINKER_ID configField("key", "value"), 默認我們自動從基準安裝包與新安裝包的Manifest中讀取tinkerId,並自動寫入configField。在這裏,你可以定義其他的信息,在運行時可以通過TinkerLoadResult.getPackageConfigByName得到相應的數值。但是建議直接通過修改代碼來實現,例如BuildConfig。
sevenZip   7zip路徑配置項,執行前提是useSign爲true
zipArtifact null 例如"com.tencent.mm:SevenZip:1.1.10",將自動根據機器屬性獲得對應的7za運行文件,推薦使用。
path 7za 系統中的7za路徑,例如"/usr/local/bin/7za"。path設置會覆蓋zipArtifact,若都不設置,將直接使用7za去嘗試。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章