一、使用场景
提供纯Flutter项目的Dart代码及资源文件的热修支持。
二、热修原理
Flutter项目并不具备热修功能,其生成的so库也无法使用Tinker加载,但是TInker生成的差分包里是包含Flutter模块所生成的补丁包的。所以我们只需要想办法将生成的Flutter补丁包加载进去,在Flutter的so库加载流程中,FlutterLoader类里是可以通过反射字段aotSharedLibraryName把so库set进去的,从而实现我们加载补丁so文件的过程。
三、代码接入
1、首先我们需要在Flutter项目下android工程中引入Tinker和hannibal:
//项目根build.gradle文件
dependencies {
classpath 'com.android.tools.build:gradle:4.1.3'
classpath 'com.tencent.bugly:tinker-support:1.2.3'
classpath 'com.github.magicbaby810:HannibalX:0.2'
}
///app路径下的build.gradle文件
...
apply plugin: 'hannibal'
apply from: 'tinker-support.gradle'
android {
compileSdkVersion 29
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
...
}
signingConfigs {
release {
...
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.debug
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.tencent.tinker:tinker-android-lib:1.9.14.19'
implementation 'androidx.multidex:multidex:2.0.0'
implementation files("libs/flutterpatch.aar")
implementation 'com.tencent.bugly:crashreport_upgrade:latest.release'
implementation 'com.tencent.bugly:nativecrashreport:latest.release'
}
flutter {
source '../..'
}
2、创建AppApplication继承于FlutterApplication
public class AppApplication extends FlutterApplication {
// 测试sophix时,请注掉attachBaseContext
@Override