一、热修复技术的应用
热修复技术一般用来在线更新安装包,当热更新包发布后,会提示用户更新,重启应用,修复紧急Bug。下面的只是初级配置,使用的是集成了Tinker的腾讯的Bugly平台。
二、Bugly平台热更新配置步骤
1.第一步:
- 项目根目录下buildle的配置
dependencies {
//gradle版本最好设置在4.0以下,高版本可能会出现适配问题
classpath 'com.android.tools.build:gradle:3.2.0'
//引入bugly中的tinker支持
classpath "com.tencent.bugly:tinker-support:1.2.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
- 修改Project项目:gradle-wrapper.properties文件,这么做的目的是为了和gradle兼容。
gradle-wrapper配置.png
2.第二步 - 将Bugly官方的Demo中的tinker-surpport.gradle文件放在Project目录中的app目录下,以及将SampleApplication类和SampleApplicationLike类一同拷贝放到MainActivity对应的目录。
文件拷贝.png - 这里附上:Bugly官方地址
- Chorm浏览器左边能显示项目目录使用的是Octotree拓展插件:插件地址
下载并解压dist文件中的压缩文件 - 修改tinker-support.gradle文件中的配置:
// 编译补丁包时,必需指定基线版本的apk,默认值为空
// 如果为空,则表示不是进行补丁包的编译
// @{link tinkerPatch.oldApk }
//如果是debug版本就将所有release替换成debug
baseApk = "${bakPath}/${baseApkDir}/app-release.apk"
// 对应tinker插件applyMapping
baseApkProguardMapping = "${bakPath}/${baseApkDir}/app-release-mapping.txt"
// 对应tinker插件applyResourceMapping
baseApkResourceMapping = "${bakPath}/${baseApkDir}/app-release-R.txt"
- 修改sampleApplication类:第二个参数一定要修改为自己的SampleApplicationLike类的地址。
public class SampleApplication extends TinkerApplication {
public SampleApplication() {
//这里的第二个参数一定要修改为自己的SampleApplicationLike的路径
super(ShareConstants.TINKER_ENABLE_ALL, "com.bigzing.usehotfix2.SampleApplicationLike",
"com.tencent.tinker.loader.TinkerLoader", false, true);
}
}
- 修改SampleApplicationLike类:在onCreate函数最后一行,这一步很重要
// 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId
Bugly.init(getApplication(), "xxxxxxxxxx", true);
3.第三步:
- 在app目录下的build.gradle文件中添加以下配置:
apply plugin: 'com.android.application'
// 依赖插件脚本
apply from: 'tinker-support.gradle'
android {
compileSdkVersion 30
buildToolsVersion "28.0.3"
defaultConfig {
applicationId "com.bigzing.usehotfix2"
minSdkVersion 15
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// 开启multidex
multiDexEnabled true
ndk {
// 设置支持的SO库架构
abiFilters 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'//,'armeabi'
}
}
//签名配置
signingConfigs {
config {
keyAlias "android"
keyPassword "123456"
storeFile file('D:\\ASWorkSpace\\UseHotFix2\\app\\src\\android.jks')
storePassword "123456"
}
}
buildTypes {
release {
//签名配置
signingConfig signingConfigs.config
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
// 远程仓库集成方式(推荐)
implementation 'com.tencent.bugly:crashreport_upgrade:1.5.23'
//1. 指定tinker依赖版本(注:应用升级1.3.5版本起,不再内置tinker)
//2.为了便于解答问题,这里的tinker版本建议跟随此处demo设置,如果微信更新了tinker版本,bugly会定期同步更新
implementation 'com.tencent.tinker:tinker-android-lib:1.9.14.10'
implementation "com.android.support:multidex:1.0.3" // 多dex配置
}
- 签名获取建议直接使用AS自带的GnenerateSignApk生成密钥,也可以在jdk的bin目录下调用keytool,使用命令行的方式创建。(这里打的是release包)
4.第四步:添加用例,并在Activity中调用
public class Utils {
private static final String TAG = "Utils";
public static void test(){
//Log.i(TAG, "test: ");
throw new IllegalStateException("出错啦!!!");
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//button的onClick方法实现
public void UnitTest(View view) {
Utils.test();
}
}
5.第五步:
- 使用Gradle打包,打开Gradle编译
打开Gradle编译.png - 调用Gradle中app目录下的build文件夹下的assembleRelease或者assembleDebug,根据你的签名配置来定
开始编译.png - 编译打包完成后,会在app目录build文件下生成bakApk文件夹,找到对应的app-release.apk,在AS的Terminal终端使用adb install安装此文件即可。点击Button会发生闪退,接下来要进行修复
6.第六步:修复并发布补丁包
- 在tinker-support.gradle 修改基准包目录,使它们一致
修改基准包目录.png
- 屏蔽抛出的异常,变为正常状态
public class Utils {
private static final String TAG = "Utils";
public static void test(){
Log.i(TAG, "test: ");
//throw new IllegalStateException("出错啦!!!");
}
}
- 重复第五步,使用assembleRelease来打包,打包完成后,找到app-outputs-patch-release-patch_signed_7zip.apk文件
修复补丁包.png
7.发布补丁包: - 登录Bugly官网,进入设置
进入设置.png - 切换到应用升级,选择热更新,点击发布新补丁
- 上传相关文件发布后,重启应用,即可看到提示更新的消息,至此所有补丁包发布流程已完毕。
网友评论