SDKHotfix(SDK 熱修復(fù)工具包)是一款讓 SDK 開發(fā)者能快速賦予 SDK 熱修復(fù)的能力.
SDKHotfix(SDK 熱修復(fù)工具包)特點(diǎn)
5 分鐘即可讓你的 SDK 擁有熱修復(fù)的能力
節(jié)省踩坑和開發(fā)成本
hook and create Gradle Task
Kotlin + groovy
熱修復(fù)
非對(duì)稱加密+對(duì)稱加密
擴(kuò)展美團(tuán) Robust 開源庫,使其具有其他熱更庫不具備的補(bǔ)丁回滾功能
數(shù)據(jù)和監(jiān)控思維
優(yōu)點(diǎn)
無兼容問題
實(shí)時(shí)生效
修復(fù)成功率高達(dá)99.9%
在用戶規(guī)模千萬級(jí)別的app中驗(yàn)證過,可信賴
支持補(bǔ)丁異常自動(dòng)失效,不用再擔(dān)心補(bǔ)丁造成crash啦~
待改進(jìn)
在編譯階段插件侵入了產(chǎn)品代碼,對(duì)運(yùn)行效率、方法數(shù)、包體積還是產(chǎn)生了一些副作用。(可指定某些class無需插入方法,減少插樁數(shù))
so和資源的替換目前暫未實(shí)現(xiàn)
對(duì)于只有字段訪問的函數(shù)無法直接修復(fù),可通過調(diào)用處間接修復(fù)
上傳GradleTask尚未在MAC環(huán)境下測(cè)試
上傳的補(bǔ)丁支持按包名存檔
要商用的小伙伴要注意,建議換成自己的后端接口或自己續(xù)費(fèi)一個(gè)bmob應(yīng)用,因?yàn)閎mob云函數(shù)服務(wù)超過40天需要收費(fèi),所以本項(xiàng)目需要定期更新應(yīng)用秘鑰。
使用方法
1. 添加配置和開關(guān)
1.1 在項(xiàng)目gradle.properties中添加開關(guān)和配置
# 接入第一步:添加配置和開關(guān)
# Application模式,Robust需要是Application才能插入代碼和打補(bǔ)丁
isAppModule=false
# Application模式下開啟這個(gè)就可以打補(bǔ)丁
isPatchModule=false
# 你的業(yè)務(wù)sdk的包名
sdkPackageName=com.feelschaotic.samplesdk
# 是否開啟混淆,一般情況下sdk默認(rèn)不混淆
isProguard=false
# 業(yè)務(wù)sdk版本號(hào),請(qǐng)保持三位,且無后綴,且在打包前就要確定好版本,確保版本打在包中
SDK_VERSION=0.0.1
# 業(yè)務(wù)sdk的upload_artifact_id
SDK_ARTIFACT_ID=MY-SAMPLES-SDK
1.2 在 sdk build.gradle 中加入配置 替換原有的 apply plugin: 'com.android.library'
//注意!一定要放在文件最前面
// apply plugin表示該項(xiàng)目會(huì)使用指定的插件,sdk對(duì)應(yīng)的是com.android.library
if (isAppModule.toBoolean()) {
apply plugin: 'com.android.application'
if (isPatchModule.toBoolean()) {
//制作補(bǔ)丁時(shí)將這個(gè)打開,auto-patch-plugin緊跟著com.android.application
apply plugin: 'auto-patch-plugin'
}
apply plugin: 'robust'
} else {
apply plugin: 'com.android.library'
}
apply from: rootProject.getRootDir().getAbsolutePath() + "/packPlugin.gradle"
1.3 加入 buildConfigField
// 視情況而定,如果你在初始化熱更sdk時(shí)的傳入的版本號(hào)有另外的取值方式,也可以不加此buildConfig
android {
defaultConfig {
buildConfigField "String", "SDK_VERSION", "\"${SDK_VERSION}\""
buildConfigField "String", "SDK_ARTIFACT_ID", "\"${SDK_ARTIFACT_ID}\""
}
}
1.4 在 sdk build.gradle 中配置簽名
android {
// 簽名的配置
signingConfigs {
debug {
}
// release版本的簽名
release {
// 簽名的一些信息
keyAlias 'key0'
keyPassword '123456'
storeFile file('./hotfix.jks')
storePassword '123456'
}
}
}
1.5 配置混淆
復(fù)制粘貼配置到 sdk build.gradle
android {
buildTypes {
innerTest {
//...
matchingFallbacks = ['debug', 'release']
}
release {
signingConfig signingConfigs.release
minifyEnabled isProguard.toBoolean()//此處取的isProguard就是1.1在項(xiàng)目`gradle.properties`中添加的isProguard開關(guān)
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
// Application和Library清單文件處理方式不同
if (isAppModule.toBoolean()) {
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/release/AndroidManifest.xml'
}
}
}
}
復(fù)制粘貼示例sdk的lib-proguard-rules.pro到業(yè)務(wù)SDK module目錄下,修改文件中的包名
接著配置好sdk自己的混淆規(guī)則
android {
defaultConfig {
consumerProguardFiles 'lib-proguard-rules.pro'
}
}
2. 導(dǎo)庫
在 sdk 的 build.gradle 中引入庫
implementation 'com.github.feelschaotic:SDKHotFix:XX-RELEASE'
XX為最新SDK版本號(hào),例如implementation 'com.github.feelschaotic:SDKHotFix:1.3-RELEASE'
注:最新版本見README標(biāo)志
在根項(xiàng)目build.gradle中加入maven配置
repositories {
//接入第二步:增加maven配置
maven { url "https://mvnrepository.com/" }
}
...
allprojects {
repositories {
maven { url "https://mvnrepository.com/" }
}
}
再添加classpath配置
// Application模式下引入Robust腳本插件
if (isAppModule.toBoolean()) {
classpath 'com.github.feelschaotic:Robust.gradle-plugin:0.4.87.5-RELEASE'
classpath 'com.github.feelschaotic:Robust.auto-patch-plugin:0.4.87.5-RELEASE'
}
4. 復(fù)制示例項(xiàng)目的腳本和文件
4.1 復(fù)制 MainActivity.java 到 sdk module 的 java\包名 目錄下(目的是為了application打包配置不報(bào)錯(cuò))
4.2 復(fù)制 debug 和 release 2 個(gè)文件夾到 main 目錄下,修改里面的 AndroidManifest.xml,更改為你自己業(yè)務(wù)SDK的包名
<manifest package="${packageName}"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
4.3 復(fù)制 robust.xml 到sdk module 根目錄,更改下包名
4.4 復(fù)制 packPlugin.gradle 到項(xiàng)目的根目錄
5. 初始化熱更庫
val config: HotfixConfig = HotfixConfig.Builder().debug(true)
.appVersion(BuildConfig.VERSION_NAME)
.packageName(BuildConfig.APPLICATION_ID)
.build()
HotfixManager.init(application, config)
6. 添加權(quán)限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
7. 加入混淆
-keep class com.alibaba.sdk.android.oss.** { *; }
-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版












uAPP Creator(安卓軟件制作工具)1.0.1 官方版
Java SE Development Kit 8 (JDK)v8.0.341 官方版
x64dbg(程序逆向反匯編修改神器)2022.07.27 簡(jiǎn)體中文版
微信開發(fā)者工具小游戲版1.05.2204264 官方版
JetBrains DataGrip 2022 中文破解版221.5591.46 免費(fèi)版
JetBrains CLion 2022 破解版221.5080.224 中文免費(fèi)版
IntelliJ IDEA 2022.1 中文免費(fèi)版221.5080.210 破解版
JetBrains PhpStorm 2022.1中文破解版221.5080.224 免費(fèi)版
JetBrains Rider 2022.1.1 破解版221.5591.20 免費(fèi)版
JetBrains RubyMine 2022.1 破解版221.5080.196 中文免費(fèi)版
WebStorm2022破解版(WebStorm 2022.1)221.5080.193 免費(fèi)版
goland2022破解版(GoLand 2022.1中文版)221.5080.224 免費(fèi)版
pycharm2022破解版221.5080.212 中文免費(fèi)版
python3.10.4官方版最新版
matlab r2022a中文破解版9.12.0 免費(fèi)版
scala語言開發(fā)工具2.13.2 官方版
julia開發(fā)環(huán)境1.7.0 免費(fèi)版
rust開發(fā)環(huán)境1.56.1 官方版
ruby編譯器(Ruby+Devkit)3.0.2 官方免費(fèi)版
Komodo IDE 12 官方版12.0.1 最新版
aardio桌面軟件開發(fā)工具35.7.5 綠色最新版
慧編程電腦版5.4.0 最新版
編程貓定制課3.3.0 官方版
精易編程助手3.98 綠色免費(fèi)版
python3.8.5穩(wěn)定版免費(fèi)下載
ulang(木蘭編程語言)0.2.2官方免費(fèi)版
小碼精靈編程電腦客戶端1.12.0官方最新版
易語言5.9.0 免費(fèi)版
KRobot編程工具0.8.5 官方64位版


java class反編譯工具(Class反編譯工具jd-g
JetBrains PhpStorm 2017官方版2017.3.7 x6
易語言6.5完美破解版綠色免費(fèi)版
visual studio 2010 精簡(jiǎn)版10.0.40219.1 sp
vb6.0 win10版(Visual Basic win10)中文企業(yè)
APPCode(附注冊(cè)碼)3.3 Windows破解版
Aqua Data Studio18中文最新版
delphi xe(Embarcadero Rad Studio XE)15.0
php一鍵安裝七件套(phpfind)1.4.5.2 官方安