Android 騰訊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
還有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——異常上報和應用更新