1. 程式人生 > >Android 騰訊Bugly——異常上報和應用更新

Android 騰訊Bugly——異常上報和應用更新

schema err hidden eno xmlns 哈哈 map ant export

騰訊Bugly,為移動開發者提供專業的異常上報和運營統計,幫助開發者快速發現並解決異常,同時掌握產品運營動態,及時跟進用戶反饋。

首先Bugly有兩大優點,免費,不用審核

使用步驟如下:
1 。 創建產品
https://bugly.qq.com/v2/index,在這個網站註冊和登錄,然後點擊立即接入,再點擊新建產品,這個不用審核直接通過
技術分享圖片

2.異常上報
創建完成後,它提示你去選擇集成SDK能力,
(1)首先是異常上報配置環境

在module裏添加依賴
compile ‘com.tencent.bugly:crashreport:latest.release‘ //其中latest.release指代最新Bugly SDK版本號,也可以指定明確的版本號,例如2.1.9

compile ‘com.tencent.bugly:nativecrashreport:latest.release‘
還有NDK的配置
ndk {
// 設置支持的SO庫架構
abiFilters ‘armeabi‘ //, ‘x86‘, ‘armeabi-v7a‘, ‘x86_64‘, ‘arm64-v8a‘
}
在項目根目錄的gradle.properties文件中添加:

android.useDeprecatedNdk=true

(2)寫代碼
在AndroidManifest.xml中添加權限:

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

新建Application類,並設置為android:name的值,

原來可以在“AndroidManifest.xml”裏配置Bugly的參數,但是我統一在Application裏配置,我把自己Application類的代碼貼出供大家參考,還有就是appID在右上角的更多點擊後,再點擊產品設置可以看到


public class MyApplication extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();

        CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(this);
        strategy.setAppChannel("myChannel");  //設置渠道
        strategy.setAppVersion("1.0.1");      //App的版本
        strategy.setAppPackageName("zzw.buglytest");  //App的包名
//...在這裏設置strategy的屬性,在bugly初始化時傳入
//...
        CrashReport.initCrashReport(this, "自己的appID", false, strategy);
    }
}

然後我在程序裏放一個bug去運行引發崩潰,再去網站看崩潰分析,它可以告訴你代碼哪裏出錯,還有在異常概覽還可以看到一些崩潰的概率和分類排名之類的,自己去發掘吧年輕人
技術分享圖片

4.產品升級

(1)環境配置
添加依賴
compile ‘com.android.support:support-v4:26.+‘
添加一個權限就行了

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

對了,你們要記得動態請求權限,否則android6.0以上的可能使用不了這個

Activity配置

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

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

這裏要註意一下,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>

(2)寫代碼

將以下代碼註釋

CrashReport.initCrashReport(getApplicationContext(), "註冊時申請的APPID", false);

換成統一初始化方法:

Bugly.init(getApplicationContext(), "註冊時申請的APPID", false);

(3)控制臺操作
首先在module的build.gradle改版本號
defaultConfig {
applicationId "zzw.buglytest"
minSdkVersion 19
targetSdkVersion 26
versionCode 2
versionName "1.1"
ndk {
// 設置支持的SO庫架構
abiFilters ‘armeabi‘ //, ‘x86‘, ‘armeabi-v7a‘, ‘x86_64‘, ‘arm64-v8a‘
}
}
在網站點擊發布新升級
選項很多自己去發掘,需要註意的是創建策略之後還要記得將他啟動,以後再更新還要將之前的策略停止
技術分享圖片

就這樣還沒完,還要配置,官方文檔說這樣就好了,但是應用沒有更新提示,

dependencies {
//註釋掉原有bugly的倉庫
// compile ‘com.tencent.bugly:crashreport:latest.release‘ //其中latest.release指代最新版本號,也可以指定明確的版本號,例如1.2.9
compile ‘com.tencent.bugly:crashreport_upgrade:latest.release‘ // 其中latest.release指代最新版本號,也可以指定明確的版本號,例如1.0.0
}

把之前的加的BetaActivity刪除,在AndroidManifest.xml中添加以下Activity

<activity
    android:name="com.tencent.bugly.beta.ui.BetaActivity"
    android:theme="@android:style/Theme.Translucent" />

在Application添加代碼


        /**
         * 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);
        // 不在登錄activity上顯示彈窗
        Beta.canNotShowUpgradeActs.add(MainActivity.class);

然後把工程代碼的版本改低,並卸載原來的項目,再安裝低版本的apk,測試應用更新
技術分享圖片

Bugly的還有很多細節高級應用,需要自己去鉆研,還有熱修復我就不弄,挺復雜的哈哈。

Android 騰訊Bugly——異常上報和應用更新