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去嘗試。 |