Bugly - Bugly 基本使用( App 质量追踪平台)
Bugly1、基本介绍Bugly 是腾讯推出的 App 质量追踪平台专门帮开发者发现、定位、解决线上 App 的崩溃、卡顿等问题1. 官方网址https://bugly.qq.com/v2/ 2. 开发文档https://bugly.qq.com/docs/user-guide/instruction-manual-android/?v1.0.0Bugly 优势在于免费、接入简单适合中小团队快速搭建质量监控体系2、场景实例以前用户反馈“点了一下就闪退了”开发者复现不了无从下手现在Bugly 后台直接看到崩溃堆栈、机型、系统版本、操作路径精准定位到某行代码3、演示1Setting项目级 build.gradleandroid{defaultConfig{ndk{abiFiltersarmeabi}}}...dependencies{implementationcom.tencent.bugly:crashreport:latest.release}AndroidManifest.xmluses-permissionandroid:nameandroid.permission.INTERNET/uses-permissionandroid:nameandroid.permission.ACCESS_NETWORK_STATE/uses-permissionandroid:nameandroid.permission.ACCESS_WIFI_STATE/proguard-rules.pro避免混淆 Bugly-dontwarn com.tencent.bugly.** -keep public class com.tencent.bugly.**{*;}2Activity?xml version1.0 encodingutf-8?androidx.constraintlayout.widget.ConstraintLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:idid/mainandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityTextViewandroid:idid/textViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textMainActivityapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent/Buttonandroid:idid/btn_simulateandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text模拟一个异常app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/textView//androidx.constraintlayout.widget.ConstraintLayoutpublicclassMainActivityextendsAppCompatActivity{publicstaticfinalStringTAGMainActivity.class.getSimpleName();privatefinalString[]permissions{Manifest.permission.INTERNET,Manifest.permission.ACCESS_NETWORK_STATE,Manifest.permission.ACCESS_WIFI_STATE};OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main),(v,insets)-{InsetssystemBarsinsets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left,systemBars.top,systemBars.right,systemBars.bottom);returninsets;});booleanneedRequestfalse;for(Stringpermission:permissions){intrecheckSelfPermission(permission);Log.i(TAG,check ---------- 权限permission授权结果re);if(re!PackageManager.PERMISSION_GRANTED){needRequesttrue;break;}}if(!needRequest){next();return;}ActivityResultLauncherString[]activityResultLauncherregisterForActivityResult(newActivityResultContracts.RequestMultiplePermissions(),o-{for(Map.EntryString,BooleanstringBooleanEntry:o.entrySet()){Log.i(TAG,request ---------- 权限stringBooleanEntry.getKey()授权结果stringBooleanEntry.getValue());}for(booleangranted:o.values()){if(!granted){Toast.makeText(this,未授权权限,Toast.LENGTH_SHORT).show();finish();return;}}next();});activityResultLauncher.launch(permissions);}privatevoidnext(){CrashReport.initCrashReport(getApplicationContext(),【App ID】,false);ButtonbtnSimulatefindViewById(R.id.btn_simulate);btnSimulate.setOnClickListener(v-{inti10/0;});}}