android {
defaultConfig {
ndk {
//设置支持的SO库架构
abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
}
}
dependencies {
//注释掉原有bugly的仓库
//implementation 'com.tencent.bugly:crashreport:latest.release'//其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.3.2
implementation 'com.tencent.bugly:crashreport_upgrade:latest.release'//其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.2.0
implementation 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.2.0
}
权限配置
activity配置
配置FileProvider
在res目录新建xml文件夹,创建provider_paths.xml文件如下:
混淆配置
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
-keep class android.support.**{*;}
运行后注释掉
CrashReport.initCrashReport(getApplicationContext(), "注册时申请的APPID", false);
初始化
Bugly.init(getApplicationContext(), "注册时申请的APPID", false);
进入Bugly进行发布新应用即可
自定义activity更新界面
高级设置
/**
* true表示app启动自动初始化升级模块;
* false不自动初始化
*/
Beta.autoInit = true;
/**
* true表示初始化时自动检查升级
* false表示不会自动检查升级,需要手动调用Beta.checkUpgrade()方法
*/Beta.autoCheckUpgrade = true; /**
* 设置升级周期为60s(默认检查周期为0s),60s内SDK不重复向后天请求策略
*/Beta.initDelay = 1 * 1000; /**
* 设置通知栏大图标,largeIconId为项目中的图片资源;
*/Beta.largeIconId = R.mipmap.ic_launcher; /**
* 设置状态栏小图标,smallIconId为项目中的图片资源id;
*/Beta.smallIconId = R.mipmap.ic_launcher; /**
* 设置更新弹窗默认展示的banner,defaultBannerId为项目中的图片资源Id;
* 当后台配置的banner拉取失败时显示此banner,默认不设置则展示“loading“;
*/Beta.defaultBannerId = R.mipmap.ic_launcher; /**
* 设置sd卡的Download为更新资源保存目录;
* 后续更新资源会保存在此目录,需要在manifest中添加WRITE_EXTERNAL_STORAGE权限;
*/
Beta.storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); /**
* 点击过确认的弹窗在APP下次启动自动检查更新时会再次显示;
*/Beta.showInterruptedStrategy = true; /**
* 设置是否显示消息通知
*/Beta.enableNotification = true; /**
* 使用默认弹窗
*/Beta.canShowApkInfo = true; /**
* 关闭或开启热更新能力,默认开启
*/Beta.enableHotfix = false; /**
* 只允许在MainActivity上显示更新弹窗,其他activity上不显示弹窗;
* 不设置会默认所有activity都可以显示弹窗;
*/ //
Beta.canShowUpgradeActs.add(MainActivity.class);
在application中初始化时设置监听,监听策略的收取
Beta.upgradeListener = new UpgradeListener() {
@Override
public void onUpgrade(int ret,UpgradeInfo strategy, boolean isManual, boolean isSilence) {
if (strategy != null) {
Intent i = new Intent();
i.setClass(getApplicationContext(), UpgradeActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
} else {
Toast.makeText(BaseApplication.this, "没有更新", Toast.LENGTH_LONG).show();
}
}
};
设置更新状态回调接口
Beta.upgradeStateListener = new UpgradeStateListener() {
//升级成功
@Override
public void onUpgradeSuccess(boolean isManual) {
}
//升级失败
@Override
public void onUpgradeFailed(boolean isManual) {
}
//升级检查
@Override
public void onUpgrading(boolean isManual) {
}
//下载完成
@Override
public void onDownloadCompleted(boolean b) {
}
//没有新版本
@Override
public void onUpgradeNoVersion(boolean isManual) {
}
};
新建一个UpgradeActivity
/*获取策略信息,初始化界面信息*/
title.setText(title.getText().toString() + Beta.getUpgradeInfo().title);
version.setText(version.getText().toString() +Beta.getUpgradeInfo().versionName);
content.setText(Beta.getUpgradeInfo().newFeature);
String s = size.getText().toString();
//将字节转换成M或KB或G
String l = FormatUtil.sizeFormatString(Beta.getUpgradeInfo().fileSize);
size.setText(s+l);
/*为下载按钮设置监听*/
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DownloadTask task = Beta.startDownload();
updateBtn(task);
if (task.getStatus() == DownloadTask.DOWNLOADING) {
finish();
}
}
});
/*为取消按钮设置监听*/
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Beta.cancelDownload();
finish();
}
});
/根据下载任务状态设置按钮/
public void updateBtn(DownloadTask task) {
switch (task.getStatus()) {
case DownloadTask.INIT:
case DownloadTask.DELETED:
case DownloadTask.FAILED: {
start.setText("开始下载");
}
break;
case DownloadTask.COMPLETE: {
start.setText("安装");
}
break;
case DownloadTask.DOWNLOADING: {
start.setText("暂停");
}
break;
case DownloadTask.PAUSED: {
start.setText("继续下载");
}
break;
}
}
public T getView(int id) {
return (T) findViewById(id);
}
将字节转换为M
public static double pers = 1048576; //1024*1024
public static String sizeFormatString(long size) {
String s = "";
if(size>1024*1024)
s=String.format("%.2f", (double)size/pers)+"M";
else
s=String.format("%.2f", (double)size/(1024))+"KB";
return s;
}