一.配置依赖环境
参考BuglyAndroid热更新使用指南https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/
第一步:添加插件依赖
工程根目录下“build.gradle”文件中添加:
classpath"com.tencent.bugly:tinker-support:latest.release"
此处注意,指南上的latest.release拼写有误,要用最新版本的注意一下。
第二步:集成SDK
1.gradle配置
在app module的“build.gradle”文件中添加(示例配置)中:
注意注释掉原有bugly的仓库。如果你的项目中原先有应用过Bugly仓库,记得注释掉。
2.在app module的“build.gradle”文件中添加:
// 依赖插件脚本
apply from:'tinker-support.gradle'
3.tinker-support.gradle内容如下所示(示例配置):
注:您需要在同级目录下创建tinker-support.gradle这个文件。即是app->new->file(名为:tinker-support.gradle)
注意事项:
(1)// 此处填写每次构建生成的基准包目录
def baseApkDir = "app-0307-17-26-48"
实现基准包时可以不用修改,生成的基准包格式会是“app-月日-时-分-秒”
第三步:初始化SDK
参考网站https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/,直接对照着写就好,注意enableProxyApplication = false/true的匹配
第四步:AndroidManifest.xml配置
1. 权限配置
2. Activity配置
3. 配置FileProvider
如果您想兼容Android N或者以上的设备,必须要在AndroidManifest.xml文件中配置FileProvider来访问共享路径的文件。
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
第一次使用则直接在res中加入xml包。再在这个xml包中新建资源provider_paths.xml 文件,照着填写即可。
若是使用第三方库
<provider
android:name=".utils.BuglyFileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="name,authorities,exported,grantUriPermissions">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"
tools:replace="name,resource"/>
</provider>
注意:
(1) tool如果报错,则需要在manifest中加入:
xmlns:tools="http://schemas.android.com/tools"
(2)provider_paths:将FileProvider按照以下的方式合并:
<?xml version="1.0"encoding="utf-8"?>
<resource>
<paths>
<!-- 配置1 -->
</paths>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 这里配置的两个外部存储路径是升级SDK下载的文件可能存在的路径 -->
<!--/storage/emulated/0/Download/com.bugly.upgrade.demo/.beta/apk-->
<external-path name="beta_external_path"path="Download/"/>
<!--/storage/emulated/0/Android/data/com.bugly.upgrade.demo/files/apk/-->
<external-path name="beta_external_files_path"path="Android/data/"/>
</paths>
</resource>
第五步:混淆配置
在app的proguard-rules.pro中添加
二.生成基准包,补丁包,以及发布补丁
参考:https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix-demo/?v=20180119105842
注意事项:
1.设置tinker-support.gradle文件中的thinkId, 打包时的thinkId,唯一标识一个apk.
// 构建基准包和补丁包都要指定不同的tinkerId,并且必须保证唯一性
tinkerId = "1.0.0-base"
// tinkerId = "1.0.0-patch"
在此处设置thinkId时,基准包一般设置为base,补丁包一般设置为patch;前面的版本号一定与当前项目的版本号相同
例如:我的当前项目versionName : '1.0.0',,所以我的基准包为1.0.0-base。
设置完成后,
2.要先运行基线版本的基准包,才能成功上传补丁,补丁发布时可能会有点耗时,请耐心等待一下。
3.想要生成的apk可以运行,需要在打包时进行数字签名:bulid->Generate Signed APK->填写完整。此时有签名文件就直接引用,没有就创建,此处可参考:
http://blog.csdn.net/Monas/article/details/51452691
http://blog.csdn.net/west_key/article/details/53731117
生成签名文件之后,需要在“project structure”(找不到就搜索)中设置已有的签名文件。
设置完之后会在app的build.gradle文件中出现如下签名配置:
// 签名配置
signingConfigs {
release {
keyAlias '…'
keyPassword '…'
storeFile file('…')
storePassword '…'
}
debug {
keyAlias '…'
keyPassword '…'
storeFile file('…')
storePassword ‘…'
}
}
然后另外设置构建类型:
// 构建类型
buildTypes {
release { //构建release包
minifyEnabled false //是否开启混淆
signingConfig signingConfigs.release//使用signingConfigs中配置的签名文件
proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
minifyEnabled false
signingConfig signingConfigs.debug
}
}
备注发布到开发设备à在Application的onCreate()方法中加入如下代码:
public void onCreate() {
super.onCreate();
//发布补丁时:选择为开发设备
//设置为开发设备,注意这个必须在初始化Bugly之前设置为开发设备
Bugly.setIsDevelopmentDevice(this,true);
//这里实现SDK初始化,appId替换成你在Bugly平台申请的appId
//调试时,将第三个参数改为true,这是打印Log的开关
Bugly.init(this,"申请的appId",false);
//异常展示的时候,建议设置为手机号码,方便后期的bug修复
CrashReport.setUserId(this,"你需要作为UseId的参数");
}