一步步带你实现bugly异常上报、版本检测更新(应用升级)

一.异常上报

(1)在Bugly上的操作

1.bugly上注册账号:https://bugly.qq.com/

2.创建产品

3.查看App ID、App Key(项目中需要到)

 

4.设置WebHook(以钉钉群为例,如何创建钉钉群机器人:https://blog.csdn.net/weixin_40420578/article/details/103277359) 

 

 

 5.奔溃分析(是没有的,后面有了,就证明成功了)

(2)在Android Studio上的操作

1.build.gradle(Module:app)添加依赖、属性配置

android {
    defaultConfig {
        ndk {
            // 设置支持的SO库架构
            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
        }
    }
}

dependencies {
    api 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.1.9
    api 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0
}

2.AndroidManifest.xml(app)中添加权限

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<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.READ_LOGS" />

3.proguard-rules.pro(ProGuard Rules for app)添加混淆

-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}

4.BaseApplication(继承Application的类)

//BuildConfig.BuglyAppId替换成你的App ID
Bugly.init(getApplicationContext(),BuildConfig.BuglyAppId,BuildConfig.DEBUG);
Bugly.setIsDevelopmentDevice(this,BuildConfig.DEBUG);

(可忽略不看)补: BuildConfig.BuglyAppId的来由:

因为我的基础信息配置同一写在了config.gradle(自己建立的文件)里面,bugly的id、key也是:

ext {
bugly = [
            appId : 'App ID',
            appKey: 'App Key'
    ]
}

build.gradle(Module:app)中加如下代码,然后clean project(一次不行就多试几次)

android {
      
     buildTypes {
        //rootProject.ext.bugly.appId、rootProject.ext.bugly.appKey就是config.gradle中写的App ID、App Key
        debug{
            buildConfigField "String", "BuglyAppId", "\"${rootProject.ext.bugly.appId}\""
            buildConfigField "String", "BuglyAppKey", "\"${rootProject.ext.bugly.appKey}\""
        }
        release {  
            minifyEnabled false       
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField "String", "BuglyAppId", "\"${rootProject.ext.bugly.appId}\""
            buildConfigField "String", "BuglyAppKey", "\"${rootProject.ext.bugly.appKey}\""
        }
    }
}

5.写个bug闪退来验证一下(还没有登录就闪退,所以用户ID是unknown)

登录成功后Bugly.setUserId(context,userId),再次崩溃时用户ID就会有了

 (二)应用升级

(1)在Android studio上的操作(基于前面的基础上)

1.AndroidMainfest.xml(app)中activity配置、配置FileProvider

 <application
  <activity
            android:name="com.tencent.bugly.beta.ui.BetaActivity"
            android:configChanges="keyboardHidden|orientation|screenSize|locale"
            android:theme="@android:style/Theme.Translucent" />
    </application>

 <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>

//如果你使用的第三方库也配置了同样的FileProvider, 可以通过继承FileProvider类来解决合并冲突的问题,示例如下:
<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>

//这里要注意一下,FileProvider类是在support-v4包中的,检查你的工程是否引入该类库。
//在res目录新建xml文件夹,创建provider_paths.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- /storage/emulated/0/Download/${applicationId}/.beta/apk-->
    <external-path name="beta_external_path" path="Download/"/>
    <!--/storage/emulated/0/Android/data/${applicationId}/files/apk/-->
    <external-path name="beta_external_files_path" path="Android/data/"/>
</paths>
</application

2.proguard-rules.pro(ProGuard Rules for app)添加混淆

-keep class android.support.**{*;}

3.BaseApplication(继承Application的类)

 private void initBugly() {
        //BuildConfig.BuglyAppId替换成你的App ID
        Bugly.init(getApplicationContext(),BuildConfig.BuglyAppId,BuildConfig.DEBUG);
        Bugly.setIsDevelopmentDevice(this,BuildConfig.DEBUG);

        Beta.autoInit = true;

        /**
         * true表示初始化时自动检查升级
         * false表示不会自动检查升级,需要手动调用Beta.checkUpgrade()方法
         */
        Beta.autoCheckUpgrade = true;

        /**
         * 设置升级周期为60s(默认检查周期为0s),60s内SDK不重复向后天请求策略
         */
        Beta.initDelay = 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 = false;

        /**
         * 只允许在MainActivity上显示更新弹窗,其他activity上不显示弹窗;
         * 不设置会默认所有activity都可以显示弹窗;
         */
        Beta.canShowUpgradeActs.add(MainActivity.class);

        //CrashReport
        Bugly.init(getApplicationContext(), BuildConfig.BuglyAppId, BuildConfig.DEBUG);
        Bugly.setIsDevelopmentDevice(
                this, BuildConfig.DEBUG
        );
    }

4.版本检测更新(本地版本号跟bugly上“应用升级”的对比,我这里还没有上传)(手动的,点击按钮测试一下)

注:这个功能适合放在: 我的——关于——检测新版本(不过更好的交互是主动去检测,有新版本出现相应提示)

Beta.checkUpgrade();//检测版本更新方法

                 

5. 发布新升级(比本地版本高的)

 

 

 6.验证(本地装了个比1000低的版本)

发布了63 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_40420578/article/details/103663063