feat(sample): 集成 Sentry 异常监控功能

- 添加 Sentry Android SDK 依赖 (版本 8.39.1)
- 在 sample-app 中集成 Sentry 监控插件
- 添加 Sentry 初始化配置到应用 Application 类
- 在 MainActivity 中添加异常上报测试按钮
- 添加闪退测试功能用于验证 Sentry 监控
- 更新 AndroidManifest.xml 配置应用入口点
- 添加新的 gradle wrapper 文件支持项目构建
- 创建 sdk-core、sdk-im、sdk-push、sdk-update 模块基础结构
- 配置各 SDK 模块的 build.gradle.kts 文件
- 更新 libs.versions.toml 添加 Sentry 版本定义
这个提交包含在:
XuqmGroup 2026-04-24 16:46:38 +08:00
父节点 598776eafa
当前提交 3e66380802
共有 15 个文件被更改,包括 12239 次插入12 次删除

12147
.gitignore vendored

文件差异内容过多而无法显示 加载差异

查看文件

@ -17,6 +17,7 @@ gson = "2.13.2"
jserialization = "1.9.0"
webkit = "1.14.0"
coil = "2.7.0"
sentryAndroid = "8.39.1"
junit4 = "4.13.2"
androidxJunit = "1.3.0"
espresso = "3.7.0"
@ -40,6 +41,7 @@ androidx-datastore-preferences = { group = "androidx.datastore", name = "datasto
kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "jserialization" }
androidx-webkit = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }
coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" }
sentry-android = { group = "io.sentry", name = "sentry-android", version.ref = "sentryAndroid" }
retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" }
retrofit-converter-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit" }
okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }

二进制
gradle/wrapper/gradle-wrapper.jar vendored 可执行文件

二进制文件未显示。

查看文件

@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

22
gradlew vendored 可执行文件
查看文件

@ -0,0 +1,22 @@
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
DIRNAME=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
APP_BASE_NAME=${0##*/}
JAVA_CMD=${JAVA_HOME:-}/bin/java
if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_CMD" ]; then
:
else
JAVA_CMD=java
fi
CLASSPATH=$DIRNAME/gradle/wrapper/gradle-wrapper.jar
exec "$JAVA_CMD" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

6
gradlew.bat vendored 普通文件
查看文件

@ -0,0 +1,6 @@
@echo off
set DIRNAME=%~dp0
set CLASSPATH=%DIRNAME%\gradle\wrapper\gradle-wrapper.jar
java -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*

8
local.properties 普通文件
查看文件

@ -0,0 +1,8 @@
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Wed Apr 22 12:00:36 CST 2026
sdk.dir=/Users/xuqinmin/Library/Android/sdk

查看文件

@ -1,7 +1,8 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.compose)
id("org.jetbrains.kotlin.android") version "2.3.10"
id("io.sentry.android.gradle") version "6.4.0"
}
android {
@ -27,7 +28,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions { jvmTarget = "11" }
buildFeatures { compose = true }
}
@ -36,6 +36,7 @@ dependencies {
implementation(project(":sdk-im"))
implementation(project(":sdk-push"))
implementation(project(":sdk-update"))
implementation(libs.sentry.android)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.bundles.compose)
implementation(libs.androidx.activity.compose)

查看文件

@ -7,7 +7,8 @@
<application
android:allowBackup="true"
android:label="XuqmSDK Demo"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
android:name=".XuqmSampleApp"
android:theme="@android:style/Theme.Material.Light.NoActionBar">
<activity
android:name=".MainActivity"
android:exported="true">
@ -25,5 +26,6 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>
</manifest>

查看文件

@ -20,6 +20,8 @@ import com.xuqm.sdk.im.model.ImMessage
import com.xuqm.sdk.im.model.MsgType
import com.xuqm.sdk.update.UpdateSDK
import kotlinx.coroutines.launch
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@ -112,6 +114,35 @@ fun SdkDemoScreen() {
}
}
Card {
Column(Modifier.padding(12.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
Text("Sentry 测试", style = MaterialTheme.typography.titleMedium)
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
Button(onClick = {
scope.launch {
val result = withContext(Dispatchers.IO) {
val eventId = Sentry.captureException(
IllegalStateException("This app uses Sentry! :)")
) { eventScope ->
eventScope.setTag("source", "main_activity_button")
eventScope.setLevel(SentryLevel.ERROR)
}
val flushed = Sentry.flush(5_000)
eventId to flushed
}
messages.add("[Sentry] 已发送: ${result.first}, flush=${result.second}")
}
}) { Text("上报异常") }
Button(onClick = {
throw RuntimeException("Uncaught crash test for Sentry")
}, colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.error)) {
Text("闪退测试")
}
}
}
}
Card {
Column(Modifier.padding(12.dp)) {
Text("消息日志", style = MaterialTheme.typography.titleMedium)

查看文件

@ -0,0 +1,9 @@
package com.xuqm.sdk.sample
import android.app.Application
class XuqmSampleApp : Application() {
override fun onCreate() {
super.onCreate()
}
}

查看文件

@ -1,7 +1,6 @@
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.serialization)
id("org.jetbrains.kotlin.android") version "2.3.10"
}
android {
@ -17,7 +16,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions { jvmTarget = "11" }
}
dependencies {

查看文件

@ -1,6 +1,5 @@
plugins {
alias(libs.plugins.android.library)
id("org.jetbrains.kotlin.android") version "2.3.10"
}
android {
@ -16,7 +15,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions { jvmTarget = "11" }
}
dependencies {

查看文件

@ -1,6 +1,5 @@
plugins {
alias(libs.plugins.android.library)
id("org.jetbrains.kotlin.android") version "2.3.10"
}
android {
@ -16,7 +15,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions { jvmTarget = "11" }
}
dependencies {

查看文件

@ -1,6 +1,5 @@
plugins {
alias(libs.plugins.android.library)
id("org.jetbrains.kotlin.android") version "2.3.10"
}
android {
@ -16,7 +15,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions { jvmTarget = "11" }
}
dependencies {