SDKHotfix(SDK ÈÈÐÞ¸´¹¤¾ß°ü)ÊÇÒ»¿îÈà SDK ¿ª·¢ÕßÄÜ¿ìËÙ¸³Óè SDK ÈÈÐÞ¸´µÄÄÜÁ¦.
SDKHotfix(SDK ÈÈÐÞ¸´¹¤¾ß°ü)ÌØµã
5 ·ÖÖÓ¼´¿ÉÈÃÄãµÄ SDK ÓµÓÐÈÈÐÞ¸´µÄÄÜÁ¦
½ÚÊ¡²È¿ÓºÍ¿ª·¢³É±¾
hook and create Gradle Task
Kotlin + groovy
ÈÈÐÞ¸´
·Ç¶Ô³Æ¼ÓÃÜ+¶Ô³Æ¼ÓÃÜ
À©Õ¹ÃÀÍÅ Robust ¿ªÔ´¿â£¬Ê¹Æä¾ßÓÐÆäËûÈȸü¿â²»¾ß±¸µÄ²¹¶¡»Ø¹ö¹¦ÄÜ
Êý¾ÝºÍ¼à¿ØË¼Î¬
Óŵã
ÎÞ¼æÈÝÎÊÌâ
ʵʱÉúЧ
ÐÞ¸´³É¹¦Âʸߴï99.9%
ÔÚÓû§¹æÄ£Ç§Íò¼¶±ðµÄappÖÐÑéÖ¤¹ý£¬¿ÉÐÅÀµ
Ö§³Ö²¹¶¡Òì³£×Ô¶¯Ê§Ð§£¬²»ÓÃÔÙµ£ÐIJ¹¶¡Ôì³ÉcrashÀ²~
´ý¸Ä½ø
ÔÚ±àÒë½×¶Î²å¼þÇÖÈëÁ˲úÆ·´úÂ룬¶ÔÔËÐÐЧÂÊ¡¢·½·¨Êý¡¢°üÌå»ý»¹ÊDzúÉúÁËһЩ¸±×÷Óᣣ¨¿ÉÖ¸¶¨Ä³Ð©classÎÞÐè²åÈë·½·¨£¬¼õÉÙ²å×®Êý£©
soºÍ×ÊÔ´µÄÌæ»»Ä¿Ç°ÔÝδʵÏÖ
¶ÔÓÚÖ»ÓÐ×ֶηÃÎʵĺ¯ÊýÎÞ·¨Ö±½ÓÐÞ¸´£¬¿Éͨ¹ýµ÷Óô¦¼ä½ÓÐÞ¸´
ÉÏ´«GradleTaskÉÐδÔÚMAC»·¾³Ï²âÊÔ
ÉÏ´«µÄ²¹¶¡Ö§³Ö°´°üÃû´æµµ
ÒªÉÌÓõÄС»ï°éҪעÒ⣬½¨Òé»»³É×Ô¼ºµÄºó¶Ë½Ó¿Ú»ò×Ô¼ºÐø·ÑÒ»¸öbmobÓ¦Óã¬ÒòΪbmobÔÆº¯Êý·þÎñ³¬¹ý40ÌìÐèÒªÊÕ·Ñ£¬ËùÒÔ±¾ÏîÄ¿ÐèÒª¶¨ÆÚ¸üÐÂÓ¦ÓÃÃØÔ¿¡£
ʹÓ÷½·¨
1. Ìí¼ÓÅäÖúͿª¹Ø
1.1 ÔÚÏîÄ¿gradle.propertiesÖÐÌí¼Ó¿ª¹ØºÍÅäÖÃ
# ½ÓÈëµÚÒ»²½£ºÌí¼ÓÅäÖúͿª¹Ø
# Applicationģʽ£¬RobustÐèÒªÊÇApplication²ÅÄܲåÈë´úÂëºÍ´ò²¹¶¡
isAppModule=false
# ApplicationģʽÏ¿ªÆôÕâ¸ö¾Í¿ÉÒÔ´ò²¹¶¡
isPatchModule=false
# ÄãµÄÒµÎñsdkµÄ°üÃû
sdkPackageName=com.feelschaotic.samplesdk
# ÊÇ·ñ¿ªÆô»ìÏý£¬Ò»°ãÇé¿öÏÂsdkĬÈϲ»»ìÏý
isProguard=false
# ÒµÎñsdk°æ±¾ºÅ£¬Çë±£³ÖÈý룬ÇÒÎÞºó׺£¬ÇÒÔÚ´ò°üǰ¾ÍҪȷ¶¨ºÃ°æ±¾£¬È·±£°æ±¾´òÔÚ°üÖÐ
SDK_VERSION=0.0.1
# ÒµÎñsdkµÄupload_artifact_id
SDK_ARTIFACT_ID=MY-SAMPLES-SDK
1.2 ÔÚ sdk build.gradle ÖмÓÈëÅäÖÃ Ìæ»»ÔÓÐµÄ apply plugin: 'com.android.library'
//×¢Ò⣡£¡Ò»¶¨Òª·ÅÔÚÎļþ×îÇ°Ãæ
// apply plugin±íʾ¸ÃÏîÄ¿»áʹÓÃÖ¸¶¨µÄ²å¼þ,sdk¶ÔÓ¦µÄÊÇcom.android.library
if (isAppModule.toBoolean()) {
apply plugin: 'com.android.application'
if (isPatchModule.toBoolean()) {
//ÖÆ×÷²¹¶¡Ê±½«Õâ¸ö´ò¿ª£¬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ʱµÄ´«ÈëµÄ°æ±¾ºÅÓÐÁíÍâµÄȡֵ·½Ê½£¬Ò²¿ÉÒÔ²»¼Ó´Ë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 ÅäÖûìÏý
¸´ÖÆÕ³ÌùÅäÖõ½ sdk build.gradle
android {
buildTypes {
innerTest {
//...
matchingFallbacks = ['debug', 'release']
}
release {
signingConfig signingConfigs.release
minifyEnabled isProguard.toBoolean()//´Ë´¦È¡µÄisProguard¾ÍÊÇ1.1ÔÚÏîÄ¿`gradle.properties`ÖÐÌí¼ÓµÄisProguard¿ª¹Ø
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'
}
}
}
}
¸´ÖÆÕ³ÌùʾÀýsdkµÄlib-proguard-rules.proµ½ÒµÎñSDK moduleĿ¼Ï£¬ÐÞ¸ÄÎļþÖеİüÃû
½Ó×ÅÅäÖúÃsdk×Ô¼ºµÄ»ìÏý¹æÔò
android {
defaultConfig {
consumerProguardFiles 'lib-proguard-rules.pro'
}
}
2. µ¼¿â
ÔÚ sdk µÄ build.gradle ÖÐÒýÈë¿â
implementation 'com.github.feelschaotic:SDKHotFix:XX-RELEASE'
XXΪ×îÐÂSDK°æ±¾ºÅ£¬ÀýÈçimplementation 'com.github.feelschaotic:SDKHotFix:1.3-RELEASE'
×¢£º×îа汾¼ûREADME±êÖ¾
ÔÚ¸ùÏîÄ¿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. ¸´ÖÆÊ¾ÀýÏîÄ¿µÄ½Å±¾ºÍÎļþ
4.1 ¸´ÖÆ MainActivity.java µ½ sdk module µÄ java\°üÃû Ŀ¼Ï£¨Ä¿µÄÊÇΪÁËapplication´ò°üÅäÖò»±¨´í£©
4.2 ¸´ÖÆ debug ºÍ release 2 ¸öÎļþ¼Ðµ½ main Ŀ¼Ï£¬ÐÞ¸ÄÀïÃæµÄ AndroidManifest.xml£¬¸ü¸ÄΪÄã×Ô¼ºÒµÎñSDKµÄ°üÃû
<manifest package="${packageName}"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
4.3 ¸´ÖÆ robust.xml µ½sdk module ¸ùĿ¼£¬¸ü¸ÄϰüÃû
4.4 ¸´ÖÆ packPlugin.gradle µ½ÏîÄ¿µÄ¸ùĿ¼
5. ³õʼ»¯Èȸü¿â
val config: HotfixConfig = HotfixConfig.Builder().debug(true)
.appVersion(BuildConfig.VERSION_NAME)
.packageName(BuildConfig.APPLICATION_ID)
.build()
HotfixManager.init(application, config)
6. Ìí¼ÓȨÏÞ
<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¹Ù·½°æ
- °²×¿¹Ù·½ÊÖ»ú°æ
- IOS¹Ù·½ÊÖ»ú°æ












uAPP Creator(°²×¿Èí¼þÖÆ×÷¹¤¾ß)1.0.1 ¹Ù·½°æ
Java SE Development Kit 8 (JDK)v8.0.341 ¹Ù·½°æ
x64dbg(³ÌÐòÄæÏò·´»ã±àÐÞ¸ÄÉñÆ÷)2022.07.27 ¼òÌåÖÐÎİæ
΢ÐÅ¿ª·¢Õß¹¤¾ßСÓÎÏ·°æ1.05.2204264 ¹Ù·½°æ
JetBrains DataGrip 2022 ÖÐÎÄÆÆ½â°æ221.5591.46 Ãâ·Ñ°æ
JetBrains CLion 2022 ÆÆ½â°æ221.5080.224 ÖÐÎÄÃâ·Ñ°æ
IntelliJ IDEA 2022.1 ÖÐÎÄÃâ·Ñ°æ221.5080.210 ÆÆ½â°æ
JetBrains PhpStorm 2022.1ÖÐÎÄÆÆ½â°æ221.5080.224 Ãâ·Ñ°æ
JetBrains Rider 2022.1.1 ÆÆ½â°æ221.5591.20 Ãâ·Ñ°æ
JetBrains RubyMine 2022.1 ÆÆ½â°æ221.5080.196 ÖÐÎÄÃâ·Ñ°æ
WebStorm2022ÆÆ½â°æ(WebStorm 2022.1)221.5080.193 Ãâ·Ñ°æ
goland2022ÆÆ½â°æ(GoLand 2022.1ÖÐÎİæ)221.5080.224 Ãâ·Ñ°æ
pycharm2022ÆÆ½â°æ221.5080.212 ÖÐÎÄÃâ·Ñ°æ
python3.10.4¹Ù·½°æ×îаæ
matlab r2022aÖÐÎÄÆÆ½â°æ9.12.0 Ãâ·Ñ°æ
MATLAB R2019bÆÆ½â°æ9.7.0.1190202 Ãâ·Ñ°æ
matlab r2020b ÆÆ½â°æÃâ·Ñ°æ
scalaÓïÑÔ¿ª·¢¹¤¾ß2.13.2 ¹Ù·½°æ
julia¿ª·¢»·¾³1.7.0 Ãâ·Ñ°æ
rust¿ª·¢»·¾³1.56.1 ¹Ù·½°æ
aardio×ÀÃæÈí¼þ¿ª·¢¹¤¾ß35.7.5 ÂÌÉ«×îаæ
»Û±à³ÌµçÄÔ°æ5.4.0 ×îаæ
±à³Ìè¶¨ÖÆ¿Î3.3.0 ¹Ù·½°æ
¾«Ò×±à³ÌÖúÊÖ3.98 ÂÌÉ«Ãâ·Ñ°æ
python3.8.5Îȶ¨°æÃâ·ÑÏÂÔØ
ulang(ľÀ¼±à³ÌÓïÑÔ)0.2.2¹Ù·½Ãâ·Ñ°æ
СÂ뾫Áé±à³ÌµçÄÔ¿Í»§¶Ë1.12.0¹Ù·½×îаæ
Ò×ÓïÑÔ5.9.0 Ãâ·Ñ°æ
KRobot±à³Ì¹¤¾ß0.8.5 ¹Ù·½64λ°æ


JetBrains PhpStorm 2018Ãâ·Ñ°æ2018.3.6 x6
sublime text 33.3126 ÖÐÎİæ64λÏÂÔØ
JetBrains CLion2021ÖÐÎİæ2021.1.2 x64Ãâ·Ñ
JetBrains Rider 2021Ãâ·Ñ°æ2021.1.3 x64ÖÐ
JetBrains WebStorm 2021Ãâ·Ñ°æ2021.1.1ÖÐÎÄ
¶ùͯ±à³ÌÈí¼þ(Scratch)3.9 ÖÐÎÄÃâ·Ñ°æ
JetBrains GoLand 2018¹Ù·½°æ2018.3.6 x64
APK¸ÄÖ®Àí(APK ide)3.3 ×îÐÂÈ¥¹ã¸æ°æ
eclipse helios°æ±¾(Eclipse IDE for Java
MyEclipse5.5.1ÆÆ½â°æÃâ·Ñ°æ¡¾¸½×¢²á»ú¡¿