Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## Unreleased

### Features

- Add experimental session replay capturing for Android ([#1386](https://github.com/getsentry/sentry-unreal/pull/1386))

### Dependencies

- Bump Native SDK from v0.14.1 to v0.14.2 ([#1387](https://github.com/getsentry/sentry-unreal/pull/1387))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ void FAndroidSentrySubsystem::InitWithSettings(const USentrySettings* settings,
SettingsJson->SetNumberField(TEXT("sampleRate"), settings->SampleRate);
SettingsJson->SetNumberField(TEXT("maxBreadcrumbs"), settings->MaxBreadcrumbs);
SettingsJson->SetBoolField(TEXT("attachScreenshot"), settings->AttachScreenshot);
SettingsJson->SetBoolField(TEXT("attachSessionReplay"), settings->AttachSessionReplay);
SettingsJson->SetArrayField(TEXT("inAppInclude"), FAndroidSentryConverters::StrinArrayToJsonArray(settings->InAppInclude));
SettingsJson->SetArrayField(TEXT("inAppExclude"), FAndroidSentryConverters::StrinArrayToJsonArray(settings->InAppExclude));
SettingsJson->SetBoolField(TEXT("sendDefaultPii"), settings->SendDefaultPii);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import io.sentry.SentryEvent;
import io.sentry.SentryLevel;
import io.sentry.SentryOptions;
import io.sentry.SentryReplayOptions;
import io.sentry.android.core.SentryAndroid;
import io.sentry.android.core.SentryAndroidOptions;
import io.sentry.exception.ExceptionMechanismException;
Expand Down Expand Up @@ -70,6 +71,10 @@ public void configure(SentryAndroidOptions options) {
options.setSampleRate(settingJson.getDouble("sampleRate"));
options.setMaxBreadcrumbs(settingJson.getInt("maxBreadcrumbs"));
options.setSendDefaultPii(settingJson.getBoolean("sendDefaultPii"));
if(settingJson.getBoolean("attachSessionReplay")) {
options.getSessionReplay().setSessionSampleRate(1.0);
options.getSessionReplay().setCaptureSurfaceViews(true);
}
JSONArray Includes = settingJson.getJSONArray("inAppInclude");
for (int i = 0; i < Includes.length(); i++) {
options.addInAppInclude(Includes.getString(i));
Expand Down
4 changes: 2 additions & 2 deletions plugin-dev/Source/Sentry/Public/SentrySettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -340,11 +340,11 @@ class SENTRY_API USentrySettings : public UObject
bool EnableOutOfProcessScreenshots;

UPROPERTY(Config, EditAnywhere, Category = "General|Attachments",
Meta = (DisplayName = "Attach session replay (for Xbox devkits only, experimental)", ToolTip = "When enabled, attaches a short retroactive video clip on crash, captured from the OS-managed game recording ring. Currently supported on Xbox development kits only."))
Meta = (DisplayName = "Attach session replay (experimental)", ToolTip = "Enables session replay capture. On Android, records a continuous video of the session and sends it with error events. On Xbox development kits, attaches a short retroactive video clip on crash, captured from the OS-managed game recording ring. Currently supported on Android and Xbox development kits only."))
bool AttachSessionReplay;

UPROPERTY(Config, EditAnywhere, Category = "General|Attachments",
Meta = (DisplayName = "Session replay duration (ms)", ToolTip = "Requested duration of the retroactive session replay clip. The resulting clip can be shorter than the requested duration if it hasn't accumulated enough buffered frames yet.",
Meta = (DisplayName = "Session replay duration (ms, Xbox only)", ToolTip = "Requested duration of the retroactive session replay clip on Xbox. The resulting clip can be shorter than the requested duration if it hasn't accumulated enough buffered frames yet. This setting is ignored on Android, where the replay duration is determined by the Sentry SDK.",
EditCondition = "AttachSessionReplay", ClampMin = "1000", ClampMax = "15000"))
uint32 SessionReplayDurationMs;

Expand Down
2 changes: 2 additions & 0 deletions plugin-dev/Source/Sentry/Sentry_Android_UPL.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
<copyFile src="$S(PluginDir)/../ThirdParty/Android/sentry.jar" dst="$S(BuildDir)/gradle/app/libs/sentry.jar" />
<copyFile src="$S(PluginDir)/../ThirdParty/Android/sentry-android-core-release.aar" dst="$S(BuildDir)/gradle/app/libs/sentry-android-core-release.aar" />
<copyFile src="$S(PluginDir)/../ThirdParty/Android/sentry-android-ndk-release.aar" dst="$S(BuildDir)/gradle/app/libs/sentry-android-ndk-release.aar" />
<copyFile src="$S(PluginDir)/../ThirdParty/Android/sentry-android-replay-release.aar" dst="$S(BuildDir)/gradle/app/libs/sentry-android-replay-release.aar" />
<copyFile src="$S(PluginDir)/../ThirdParty/Android/sentry-native-ndk-release.aar" dst="$S(BuildDir)/gradle/app/libs/sentry-native-ndk-release.aar" />
<if condition="bUploadSymbols">
<true>
Expand Down Expand Up @@ -114,6 +115,7 @@
dependencies {
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'])
implementation "com.abovevacant:epitaph:0.1.1"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.24"
}

repositories {
Expand Down
3 changes: 2 additions & 1 deletion scripts/build-android.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ rm -rf "${sentryArtifactsDestination}/"*

pushd ${sentryJavaRoot}
./gradlew -PsentryAndroidSdkName=sentry.native.android.unreal \
:sentry-android-core:assembleRelease :sentry-android-ndk:assembleRelease :sentry:jar \
:sentry-android-core:assembleRelease :sentry-android-ndk:assembleRelease :sentry-android-replay:assembleRelease :sentry:jar \
--no-daemon --stacktrace --warning-mode none
popd

cp "${sentryJavaRoot}/sentry-android-ndk/build/outputs/aar/sentry-android-ndk-release.aar" "${sentryArtifactsDestination}/sentry-android-ndk-release.aar"
cp "${sentryJavaRoot}/sentry-android-core/build/outputs/aar/sentry-android-core-release.aar" "${sentryArtifactsDestination}/sentry-android-core-release.aar"
cp "${sentryJavaRoot}/sentry-android-replay/build/outputs/aar/sentry-android-replay-release.aar" "${sentryArtifactsDestination}/sentry-android-replay-release.aar"

cp "${sentryJavaRoot}/sentry/build/libs/"sentry-*.jar "${sentryArtifactsDestination}/sentry.jar"

Expand Down
36 changes: 35 additions & 1 deletion scripts/build-deps.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ function buildSentryJava()
try
{
./gradlew -PsentryAndroidSdkName="sentry.native.android.unreal" `
:sentry-android-core:assembleRelease :sentry-android-ndk:assembleRelease :sentry:jar --no-daemon --stacktrace --warning-mode none
:sentry-android-core:assembleRelease :sentry-android-ndk:assembleRelease :sentry-android-replay:assembleRelease :sentry:jar --no-daemon --stacktrace --warning-mode none

if ($LASTEXITCODE -ne 0)
{
Expand All @@ -276,7 +276,41 @@ function buildSentryJava()

Copy-Item "$JavaPath/sentry-android-ndk/build/outputs/aar/sentry-android-ndk-release.aar" -Destination "$androidOutDir/sentry-android-ndk-release.aar"
Copy-Item "$JavaPath/sentry-android-core/build/outputs/aar/sentry-android-core-release.aar" -Destination "$androidOutDir/sentry-android-core-release.aar"
Copy-Item "$JavaPath/sentry-android-replay/build/outputs/aar/sentry-android-replay-release.aar" -Destination "$androidOutDir/sentry-android-replay-release.aar"
Copy-Item "$JavaPath/sentry/build/libs/$("sentry-*.jar")" -Destination "$androidOutDir/sentry.jar"

# With version v8 of the sentry-java the Native SDK NDK has to be downloaded separately from the sentry-native repo release page
$configFile = "$JavaPath/gradle/libs.versions.toml"
if (-not (Test-Path $configFile))
{
throw "libs.versions.toml file not found at $configFile"
}

$tomlContent = Get-Content $configFile -Raw
if ($tomlContent -notmatch 'sentry-native-ndk[^\n]*version\s*=\s*"([^"]+)"')
{
throw "Failed to extract Native SDK NDK version from $configFile"
}
$nativeNdkVersion = $Matches[1]
Write-Host "Extracted Sentry Native NDK version: $nativeNdkVersion"

$nativeNdkCache = "$JavaPath/native-ndk-cache"
if (-not (Test-Path $nativeNdkCache))
{
New-Item $nativeNdkCache -ItemType Directory > $null
}

$nativeNdkZip = "$nativeNdkCache/sentry-native-ndk-$nativeNdkVersion.zip"
$nativeNdkUrl = "https://github.com/getsentry/sentry-native/releases/download/$nativeNdkVersion/sentry-native-ndk-$nativeNdkVersion.zip"

if (-not (Test-Path $nativeNdkZip))
{
Invoke-WebRequest -Uri $nativeNdkUrl -OutFile $nativeNdkZip
}

Expand-Archive -Path $nativeNdkZip -DestinationPath $nativeNdkCache -Force

Copy-Item "$nativeNdkCache/sentry-native-ndk-$nativeNdkVersion/sentry-native-ndk-release.aar" -Destination "$androidOutDir/sentry-native-ndk-release.aar"
}

function buildSentryNative()
Expand Down
1 change: 1 addition & 0 deletions scripts/packaging/package.snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@ Source/SentryEditor/Public/SentrySymToolsDownloader.h
Source/SentryEditor/SentryEditor.Build.cs
Source/ThirdParty/Android/sentry-android-core-release.aar
Source/ThirdParty/Android/sentry-android-ndk-release.aar
Source/ThirdParty/Android/sentry-android-replay-release.aar
Source/ThirdParty/Android/sentry-native-ndk-release.aar
Source/ThirdParty/Android/sentry.jar
Source/ThirdParty/CLI/sentry-cli-Darwin-universal
Expand Down
Loading