From 5c4c4204773bd934025321cd35735470816a390e Mon Sep 17 00:00:00 2001 From: s_petrovskiy Date: Fri, 12 Jun 2026 00:25:38 +0300 Subject: [PATCH] cut off all unnecessary stuff to make it possible to add it as subproject --- ndk/Makefile | 21 --- ndk/README.md | 75 --------- ndk/build.gradle.kts | 143 +----------------- ndk/gradle.properties | 43 +----- ndk/gradle/wrapper/gradle-wrapper.properties | 2 +- ndk/lib/api/sentry-native-ndk.api | 119 --------------- ndk/lib/build.gradle.kts | 64 +------- ndk/sample/CMakeLists.txt | 20 --- ndk/sample/build.gradle.kts | 79 ---------- ndk/sample/proguard-rules.pro | 34 ----- ndk/sample/src/main/AndroidManifest.xml | 18 --- ndk/sample/src/main/cpp/ndk-sample.cpp | 56 ------- .../io/sentry/ndk/sample/MainActivity.java | 55 ------- .../java/io/sentry/ndk/sample/NdkSample.java | 13 -- .../src/main/res/layout/activity_main.xml | 43 ------ ndk/settings.gradle | 6 +- 16 files changed, 11 insertions(+), 780 deletions(-) delete mode 100644 ndk/Makefile delete mode 100644 ndk/README.md delete mode 100644 ndk/lib/api/sentry-native-ndk.api delete mode 100644 ndk/sample/CMakeLists.txt delete mode 100644 ndk/sample/build.gradle.kts delete mode 100644 ndk/sample/proguard-rules.pro delete mode 100644 ndk/sample/src/main/AndroidManifest.xml delete mode 100644 ndk/sample/src/main/cpp/ndk-sample.cpp delete mode 100644 ndk/sample/src/main/java/io/sentry/ndk/sample/MainActivity.java delete mode 100644 ndk/sample/src/main/java/io/sentry/ndk/sample/NdkSample.java delete mode 100644 ndk/sample/src/main/res/layout/activity_main.xml diff --git a/ndk/Makefile b/ndk/Makefile deleted file mode 100644 index fbb03eb1aa..0000000000 --- a/ndk/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -.PHONY: all clean compile format api check - -all: clean format compile api check - -clean: - ./gradlew clean - -compile: - ./gradlew build - -# Format code using the spotless gradle plugin -format: - ./gradlew spotlessApply - -# Creates the .api dump file -api: - ./gradlew :sentry-native-ndk:apiDump - -# Run tests and lint -check: - ./gradlew :sentry-native-ndk:check diff --git a/ndk/README.md b/ndk/README.md deleted file mode 100644 index 90b8abcfd2..0000000000 --- a/ndk/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Android NDK support for sentry-native - -| Package | Maven Central | Minimum Android API Level | Supported ABIs | -|-------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|---------------------------------------------| -| `io.sentry:sentry-native-ndk` | [![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.sentry/sentry-native-ndk/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.sentry/sentry-native-ndk) | 19 | "x86", "armeabi-v7a", "x86_64", "arm64-v8a" | - -## Resources - -- [SDK Documentation](https://docs.sentry.io/platforms/native/) -- [Discord](https://discord.gg/sentry) server for project discussions -- Follow [@getsentry](https://x.com/sentry) on X for updates - -## About - -The subproject aims to automatically bundle pre-built `sentry-native` binaries together with a Java JNI layer into an Android friendly `.aar` package. - -The `.aar` package also provides [prefab](https://developer.android.com/build/native-dependencies?buildsystem=cmake) support, giving you the possibility to consume the native `sentry.h` APIs from your native app code. - -If you're using the [Sentry Android SDK](https://docs.sentry.io/platforms/android/), this package is included by default already. - -Besides the main package in `ndk/lib`, a simple Android app for testing purposes is provided in the `ndk/sample` folder. - -## Building and Installation - -The `ndk` project uses the Gradle build system in combination with CMake. You can either use a suitable IDE (e.g. Android Studio) or the command line to build it. - -## Testing and consuming a local package version - -1. Set a custom `versionName` in the `ndk/gradle.properties` file -2. Publish the package locally - - ```shell - cd ndk - ./gradlew :sentry-native-ndk:publishToMavenLocal - ``` - -3. Consume the build in your app - - ``` - // usually settings.gradle - allprojects { - repositories { - mavenLocal() - } - } - - // usually app/build.gradle - android { - buildFeatures { - prefab = true - } - } - - dependencies { - implementation("io.sentry:sentry-native-ndk:") - } - ``` - -4. Link the pre-built packages with your native code - - ```cmake - # usually app/CMakeLists.txt - - find_package(sentry-native-ndk REQUIRED CONFIG) - - target_link_libraries( PRIVATE - ${LOG_LIB} - sentry-native-ndk::sentry-android - sentry-native-ndk::sentry - ) - ``` - -## Development - -Please see the [contribution guide](../CONTRIBUTING.md). diff --git a/ndk/build.gradle.kts b/ndk/build.gradle.kts index 63e111349e..3d39559b31 100644 --- a/ndk/build.gradle.kts +++ b/ndk/build.gradle.kts @@ -1,9 +1,5 @@ import com.diffplug.gradle.spotless.SpotlessPlugin import com.diffplug.spotless.LineEnding -import com.vanniktech.maven.publish.MavenPublishBaseExtension -import com.vanniktech.maven.publish.MavenPublishPlugin -import com.vanniktech.maven.publish.MavenPublishPluginExtension -import groovy.util.Node import io.gitlab.arturbosch.detekt.extensions.DetektExtension import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.api.tasks.testing.logging.TestLogEvent @@ -12,8 +8,6 @@ plugins { `java-library` id("com.diffplug.spotless") version "6.25.0" apply true id("io.gitlab.arturbosch.detekt") version "1.19.0" - `maven-publish` - id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.13.0" } buildscript { @@ -21,16 +15,9 @@ buildscript { google() } dependencies { - classpath("com.android.tools.build:gradle:8.7.3") - classpath(kotlin("gradle-plugin", version = "1.8.0")) - classpath("com.vanniktech:gradle-maven-publish-plugin:0.18.0") - // dokka is required by gradle-maven-publish-plugin. - classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.7.10") - classpath("net.ltgt.gradle:gradle-errorprone-plugin:3.0.1") - - // legacy pre-prefab support - // https://github.com/howardpang/androidNativeBundle - classpath("io.github.howardpang:androidNativeBundle:1.1.4") + classpath("com.android.tools.build:gradle:9.2.0") + classpath(kotlin("gradle-plugin", version = "2.3.10")) + classpath("net.ltgt.gradle:gradle-errorprone-plugin:4.1.0") } } @@ -74,62 +61,6 @@ subprojects { } } - if (!name.contains("sample")) { - apply() - - val sep = File.separator - - configure { - getByName("main").contents { - // non android modules - from("build${sep}libs") - from("build${sep}publications${sep}maven") - // android modules - from("build${sep}outputs${sep}aar") { - include("*-release*") - } - from("build${sep}publications${sep}release") - } - - // craft only uses zip archives - forEach { dist -> - if (dist.name == DistributionPlugin.MAIN_DISTRIBUTION_NAME) { - tasks.getByName("distTar").enabled = false - } else { - tasks.getByName(dist.name + "DistTar").enabled = false - } - } - } - - val distZipProvider = - project.layout.buildDirectory - .dir("distributions").map { it.file("${project.name}-${project.version}.zip") } - - tasks.named("distZip").configure { - dependsOn("publishToMavenLocal") - doLast { - val distZip = distZipProvider.get().asFile - require(distZip.exists()) { "Distribution file does not exist: ${distZip.absolutePath}" } - require(distZip.length() > 0L) { "Distribution file is empty: ${distZip.absolutePath}" } - } - } - - afterEvaluate { - apply() - - configure { - // signing is done when uploading files to MC - // via gpg:sign-and-deploy-file (release.kts) - releaseSigningEnabled = false - } - - @Suppress("UnstableApiUsage") - configure { - assignAarTypes() - } - } - } - apply() } @@ -152,71 +83,3 @@ spotless { ktlint() } } - -private val androidLibs = - setOf( - "lib", - ) - -private val androidXLibs = - listOf( - "androidx.core:core", - ) - -/* - * Adapted from https://github.com/androidx/androidx/blob/c799cba927a71f01ea6b421a8f83c181682633fb/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt#L524-L549 - * - * Copyright 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Workaround for https://github.com/gradle/gradle/issues/3170 -@Suppress("UnstableApiUsage") -fun MavenPublishBaseExtension.assignAarTypes() { - pom { - withXml { - val dependencies = - asNode().children().find { - it is Node && it.name().toString().endsWith("dependencies") - } as Node? - - dependencies?.children()?.forEach { dep -> - if (dep !is Node) { - return@forEach - } - val group = - dep.children().firstOrNull { - it is Node && it.name().toString().endsWith("groupId") - } as? Node - val groupValue = group?.children()?.firstOrNull() as? String - - val artifactId = - dep.children().firstOrNull { - it is Node && it.name().toString().endsWith("artifactId") - } as? Node - val artifactIdValue = artifactId?.children()?.firstOrNull() as? String - - if (artifactIdValue in androidLibs) { - dep.appendNode("type", "aar") - } else if ("$groupValue:$artifactIdValue" in androidXLibs) { - dep.appendNode("type", "aar") - } - } - } - } -} - -apiValidation { - ignoredProjects.addAll(listOf("sample")) -} diff --git a/ndk/gradle.properties b/ndk/gradle.properties index d372383200..976f87eed1 100644 --- a/ndk/gradle.properties +++ b/ndk/gradle.properties @@ -6,47 +6,8 @@ org.gradle.parallel=true # AndroidX required by AGP >= 3.6.x android.useAndroidX=true -# Release information, used for maven publishing +# Release information versionName=0.14.2 -# disable renderscript, it's enabled by default -android.defaults.buildfeatures.renderscript=false - -# disable shader compilation, it's enabled by default -android.defaults.buildfeatures.shaders=false - -# disable aidl files, it's enabled by default -android.defaults.buildfeatures.aidl=false - -# disable Resource Values generation -android.defaults.buildfeatures.resvalues=false - -# disable automatically adding Kotlin stdlib to compile dependencies -kotlin.stdlib.default.dependency=false - -# TODO: Enable Prefab https://android-developers.googleblog.com/2020/02/native-dependencies-in-android-studio-40.html -# android.enablePrefab=true -# android.prefabVersion=1.0.0 - -# publication pom properties -POM_NAME=Sentry SDK -POM_DESCRIPTION=SDK for sentry.io -POM_URL=https://github.com/getsentry/sentry-native -POM_SCM_URL=https://github.com/getsentry/sentry-native -POM_SCM_CONNECTION=scm:git:git://github.com/getsentry/sentry-native.git -POM_SCM_DEV_CONNECTION=scm:git:ssh://git@github.com/getsentry/sentry-native.git - -POM_LICENCE_NAME=MIT -POM_LICENCE_URL=http://www.opensource.org/licenses/mit-license.php - -POM_DEVELOPER_ID=getsentry -POM_DEVELOPER_NAME=Sentry Team and Contributors -POM_DEVELOPER_URL=https://github.com/getsentry/ - -POM_ARTIFACT_ID=sentry-native-ndk - -systemProp.org.gradle.internal.http.socketTimeout=120000 - android.nonTransitiveRClass=true - -android.suppressUnsupportedCompileSdk=34 +android.suppressUnsupportedCompileSdk=35 diff --git a/ndk/gradle/wrapper/gradle-wrapper.properties b/ndk/gradle/wrapper/gradle-wrapper.properties index 09523c0e54..5dd3c0121b 100644 --- a/ndk/gradle/wrapper/gradle-wrapper.properties +++ b/ndk/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/ndk/lib/api/sentry-native-ndk.api b/ndk/lib/api/sentry-native-ndk.api deleted file mode 100644 index 9d6c41fc3a..0000000000 --- a/ndk/lib/api/sentry-native-ndk.api +++ /dev/null @@ -1,119 +0,0 @@ -public final class io/sentry/ndk/BuildConfig { - public static final field BUILD_TYPE Ljava/lang/String; - public static final field DEBUG Z - public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String; - public fun ()V -} - -public final class io/sentry/ndk/DebugImage { - public fun ()V - public fun getArch ()Ljava/lang/String; - public fun getCodeFile ()Ljava/lang/String; - public fun getCodeId ()Ljava/lang/String; - public fun getDebugFile ()Ljava/lang/String; - public fun getDebugId ()Ljava/lang/String; - public fun getImageAddr ()Ljava/lang/String; - public fun getImageSize ()Ljava/lang/Long; - public fun getType ()Ljava/lang/String; - public fun getUuid ()Ljava/lang/String; - public fun setArch (Ljava/lang/String;)V - public fun setCodeFile (Ljava/lang/String;)V - public fun setCodeId (Ljava/lang/String;)V - public fun setDebugFile (Ljava/lang/String;)V - public fun setDebugId (Ljava/lang/String;)V - public fun setImageAddr (Ljava/lang/String;)V - public fun setImageSize (J)V - public fun setImageSize (Ljava/lang/Long;)V - public fun setType (Ljava/lang/String;)V - public fun setUuid (Ljava/lang/String;)V -} - -public abstract interface class io/sentry/ndk/INativeScope { - public abstract fun addAttachment (Ljava/lang/String;)V - public abstract fun addAttachmentBytes ([BLjava/lang/String;)V - public abstract fun addBreadcrumb (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public abstract fun clearAttachments ()V - public abstract fun removeExtra (Ljava/lang/String;)V - public abstract fun removeTag (Ljava/lang/String;)V - public abstract fun removeUser ()V - public abstract fun setExtra (Ljava/lang/String;Ljava/lang/String;)V - public abstract fun setTag (Ljava/lang/String;Ljava/lang/String;)V - public abstract fun setTrace (Ljava/lang/String;Ljava/lang/String;)V - public abstract fun setUser (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -} - -public final class io/sentry/ndk/NativeModuleListLoader { - public fun ()V - public fun clearModuleList ()V - public fun loadModuleList ()[Lio/sentry/ndk/DebugImage; - public static fun nativeClearModuleList ()V - public static fun nativeLoadModuleList ()[Lio/sentry/ndk/DebugImage; -} - -public final class io/sentry/ndk/NativeScope : io/sentry/ndk/INativeScope { - public fun ()V - public fun addAttachment (Ljava/lang/String;)V - public fun addAttachmentBytes ([BLjava/lang/String;)V - public fun addBreadcrumb (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public fun clearAttachments ()V - public static fun nativeAddAttachment (Ljava/lang/String;)V - public static fun nativeAddAttachmentBytes ([BLjava/lang/String;)V - public static fun nativeAddBreadcrumb (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public static fun nativeClearAttachments ()V - public static fun nativeRemoveExtra (Ljava/lang/String;)V - public static fun nativeRemoveTag (Ljava/lang/String;)V - public static fun nativeRemoveUser ()V - public static fun nativeSetExtra (Ljava/lang/String;Ljava/lang/String;)V - public static fun nativeSetTag (Ljava/lang/String;Ljava/lang/String;)V - public static fun nativeSetTrace (Ljava/lang/String;Ljava/lang/String;)V - public static fun nativeSetUser (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - public fun removeExtra (Ljava/lang/String;)V - public fun removeTag (Ljava/lang/String;)V - public fun removeUser ()V - public fun setExtra (Ljava/lang/String;Ljava/lang/String;)V - public fun setTag (Ljava/lang/String;Ljava/lang/String;)V - public fun setTrace (Ljava/lang/String;Ljava/lang/String;)V - public fun setUser (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -} - -public final class io/sentry/ndk/NdkHandlerStrategy : java/lang/Enum { - public static final field SENTRY_HANDLER_STRATEGY_CHAIN_AT_START Lio/sentry/ndk/NdkHandlerStrategy; - public static final field SENTRY_HANDLER_STRATEGY_DEFAULT Lio/sentry/ndk/NdkHandlerStrategy; - public fun getValue ()I - public static fun valueOf (Ljava/lang/String;)Lio/sentry/ndk/NdkHandlerStrategy; - public static fun values ()[Lio/sentry/ndk/NdkHandlerStrategy; -} - -public final class io/sentry/ndk/NdkOptions { - public fun (Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V - public fun getDist ()Ljava/lang/String; - public fun getDsn ()Ljava/lang/String; - public fun getEnvironment ()Ljava/lang/String; - public fun getMaxBreadcrumbs ()I - public fun getNdkHandlerStrategy ()I - public fun getOutboxPath ()Ljava/lang/String; - public fun getRelease ()Ljava/lang/String; - public fun getSdkName ()Ljava/lang/String; - public fun getTracesSampleRate ()F - public fun isDebug ()Z - public fun setNdkHandlerStrategy (Lio/sentry/ndk/NdkHandlerStrategy;)V - public fun setTracesSampleRate (F)V -} - -public final class io/sentry/ndk/SentryNdk { - public static fun close ()V - public static fun init (Lio/sentry/ndk/NdkOptions;)V - public static fun loadNativeLibraries ()V - public static fun preload ()V -} - -public final class io/sentry/ndk/SentryNdkPreloadProvider : android/content/ContentProvider { - public fun ()V - public fun delete (Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I - public fun getType (Landroid/net/Uri;)Ljava/lang/String; - public fun insert (Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri; - public fun onCreate ()Z - public fun query (Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; - public fun update (Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I -} - diff --git a/ndk/lib/build.gradle.kts b/ndk/lib/build.gradle.kts index 73708d9dc7..a743e17b8a 100644 --- a/ndk/lib/build.gradle.kts +++ b/ndk/lib/build.gradle.kts @@ -1,7 +1,5 @@ plugins { id("com.android.library") - kotlin("android") - id("com.ydq.android.gradle.native-aar.export") } var sentryNativeSrc: String = "${project.projectDir}/../.." @@ -51,31 +49,13 @@ android { } buildFeatures { - prefabPublishing = true buildConfig = true } - // creates - // lib.aar/prefab/modules/sentry-android/libs//.so - // lib.aar/prefab/modules/sentry-android/include/sentry.h - prefab { - create("sentry-android") {} - create("sentry") { - headers = "../../include" - } - } - - // legacy pre-prefab support - // https://github.com/howardpang/androidNativeBundle - // creates - // lib.aar/jni//.so - // lib.aar/jni/include/sentry.h - nativeBundleExport { - headerDir = "../../include" - } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8.toString() + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } testOptions { @@ -109,41 +89,3 @@ dependencies { androidTestImplementation("androidx.test:rules:1.7.0") } -/* - * Prefab doesn't support c++_static, so we need to change it to none. - * This should be fine, as we don't expose any conflicting symbols. - * Based on: https://github.com/bugsnag/bugsnag-android/blob/59460018551750dfcce4fd4e9f612eae7826559e/bugsnag-plugin-android-ndk/build.gradle.kts - * - * Copyright (c) 2012 Bugsnag - - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ -afterEvaluate { - tasks.getByName("prefabReleasePackage") { - doLast { - project.fileTree("build/intermediates/prefab_package/") { - include("**/abi.json") - }.forEach { file -> - file.writeText(file.readText().replace("c++_static", "none")) - } - } - } -} diff --git a/ndk/sample/CMakeLists.txt b/ndk/sample/CMakeLists.txt deleted file mode 100644 index 4cdf8d8dc9..0000000000 --- a/ndk/sample/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -cmake_minimum_required(VERSION 3.10) -project(sentry-native-ndk-sample LANGUAGES C CXX) - -set(BUILD_SHARED_LIBS ON) -set(SENTRY_BUILD_SHARED_LIBS ON) - -add_library(ndk-sample SHARED src/main/cpp/ndk-sample.cpp) - -# Adding sentry-native project -add_subdirectory(${SENTRY_NATIVE_SRC} sentry_build) - -# Android logging library -find_library(LOG_LIB log) - -target_link_libraries(ndk-sample PRIVATE - ${LOG_LIB} - $ -) -# Support 16KB page sizes -target_link_options(ndk-sample PRIVATE "-Wl,-z,max-page-size=16384") diff --git a/ndk/sample/build.gradle.kts b/ndk/sample/build.gradle.kts deleted file mode 100644 index d9bd35d893..0000000000 --- a/ndk/sample/build.gradle.kts +++ /dev/null @@ -1,79 +0,0 @@ -plugins { - id("com.android.application") - kotlin("android") -} - -var sentryNativeSrc: String = "${project.projectDir}/../.." - -android { - compileSdk = 35 - namespace = "io.sentry.ndk.sample" - buildFeatures.buildConfig = true - - defaultConfig { - applicationId = "io.sentry.ndk.sample" - minSdk = 21 - targetSdk = 34 - versionCode = 2 - versionName = project.version.toString() - - externalNativeBuild { - cmake { - arguments.add(0, "-DANDROID_STL=c++_shared") - arguments.add(0, "-DSENTRY_NATIVE_SRC=$sentryNativeSrc") - } - } - - ndk { - abiFilters.addAll(listOf("x86", "armeabi-v7a", "x86_64", "arm64-v8a")) - } - } - - externalNativeBuild { - cmake { - path("CMakeLists.txt") - } - } - - signingConfigs { - getByName("debug") { - storeFile = rootProject.file("debug.keystore") - storePassword = "android" - keyAlias = "androiddebugkey" - keyPassword = "android" - } - } - - buildTypes { - getByName("release") { - isMinifyEnabled = true - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro", - ) - signingConfig = signingConfigs.getByName("debug") // to be able to run release mode - isShrinkResources = true - - addManifestPlaceholders( - mapOf( - "sentryDebug" to false, - "sentryEnvironment" to "release", - ), - ) - } - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8.toString() - } - packaging { - jniLibs { - useLegacyPackaging = true - } - } - ndkVersion = "27.0.12077973" -} - -dependencies { - implementation(project(":sentry-native-ndk")) -} diff --git a/ndk/sample/proguard-rules.pro b/ndk/sample/proguard-rules.pro deleted file mode 100644 index f6433ba1a9..0000000000 --- a/ndk/sample/proguard-rules.pro +++ /dev/null @@ -1,34 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# To ensure that stack traces is unambiguous -# https://developer.android.com/studio/build/shrink-code#decode-stack-trace --keepattributes LineNumberTable,SourceFile - -# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native --keepclasseswithmembernames,includedescriptorclasses class io.sentry.ndk.sample.** { - native ; -} - -# Please add these rules to your existing keep rules in order to suppress warnings. -# This is generated automatically by the Android Gradle plugin. --dontwarn org.bouncycastle.jsse.BCSSLParameters --dontwarn org.bouncycastle.jsse.BCSSLSocket --dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider --dontwarn org.conscrypt.Conscrypt$Version --dontwarn org.conscrypt.Conscrypt --dontwarn org.conscrypt.ConscryptHostnameVerifier --dontwarn org.openjsse.javax.net.ssl.SSLParameters --dontwarn org.openjsse.javax.net.ssl.SSLSocket --dontwarn org.openjsse.net.ssl.OpenJSSE diff --git a/ndk/sample/src/main/AndroidManifest.xml b/ndk/sample/src/main/AndroidManifest.xml deleted file mode 100644 index 882d9c1e80..0000000000 --- a/ndk/sample/src/main/AndroidManifest.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/ndk/sample/src/main/cpp/ndk-sample.cpp b/ndk/sample/src/main/cpp/ndk-sample.cpp deleted file mode 100644 index 273eb20d62..0000000000 --- a/ndk/sample/src/main/cpp/ndk-sample.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include -#include -#include - -#define TAG "ndk-sample" - -extern "C" { - -JNIEXPORT void JNICALL Java_io_sentry_ndk_sample_NdkSample_crash(JNIEnv *env, jclass cls) { - __android_log_print(ANDROID_LOG_WARN, TAG, "About to crash."); - char *ptr = 0; - *ptr += 1; -} - -JNIEXPORT void JNICALL Java_io_sentry_ndk_sample_NdkSample_message(JNIEnv *env, jclass cls) { - __android_log_print(ANDROID_LOG_INFO, TAG, "Sending message."); - sentry_value_t event = sentry_value_new_message_event( - /* level */ SENTRY_LEVEL_INFO, - /* logger */ "custom", - /* message */ "It works!" - ); - sentry_capture_event(event); -} - -JNIEXPORT void JNICALL Java_io_sentry_ndk_sample_NdkSample_transaction(JNIEnv *env, jclass cls) { - __android_log_print(ANDROID_LOG_INFO, TAG, "Sending transaction."); - - sentry_transaction_context_t *tx_ctx - = sentry_transaction_context_new("little.teapot", - "Short and stout here is my handle and here is my spout"); - sentry_value_t custom_sampling_ctx = sentry_value_new_object(); - sentry_value_set_by_key( - custom_sampling_ctx, "b", sentry_value_new_int32(42)); - sentry_transaction_t *tx - = sentry_transaction_start(tx_ctx, custom_sampling_ctx); - sentry_transaction_set_data( - tx, "url", sentry_value_new_string("https://example.com")); - sentry_span_t *child - = sentry_transaction_start_child(tx, "littler.teapot", NULL); - sentry_span_t *grandchild - = sentry_span_start_child(child, "littlest.teapot", NULL); - - sentry_span_set_data( - child, "span_data_says", sentry_value_new_string("hi!")); - sentry_span_finish(grandchild); - sentry_span_finish(child); - sentry_uuid_s uuid = sentry_transaction_finish(tx); - if(sentry_uuid_is_nil(&uuid)) { - __android_log_print(ANDROID_LOG_WARN, TAG, "Transaction was not sent."); - } else { - __android_log_print(ANDROID_LOG_INFO, TAG, "Transaction sent."); - - } - -} -} diff --git a/ndk/sample/src/main/java/io/sentry/ndk/sample/MainActivity.java b/ndk/sample/src/main/java/io/sentry/ndk/sample/MainActivity.java deleted file mode 100644 index fdef19d5aa..0000000000 --- a/ndk/sample/src/main/java/io/sentry/ndk/sample/MainActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package io.sentry.ndk.sample; - -import android.app.Activity; -import android.os.Bundle; -import io.sentry.ndk.NdkOptions; -import io.sentry.ndk.SentryNdk; -import java.io.File; - -public class MainActivity extends Activity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - findViewById(R.id.init_ndk_button).setOnClickListener(v -> initNdk()); - findViewById(R.id.trigger_native_crash_button).setOnClickListener(v -> NdkSample.crash()); - findViewById(R.id.capture_message_button).setOnClickListener(v -> NdkSample.message()); - findViewById(R.id.capture_transaction_button).setOnClickListener(v -> NdkSample.transaction()); - } - - private void initNdk() { - final File outboxFolder = setupOutboxFolder(); - final NdkOptions options = - new NdkOptions( - "https://1053864c67cc410aa1ffc9701bd6f93d@o447951.ingest.sentry.io/5428559", - BuildConfig.DEBUG, - outboxFolder.getAbsolutePath(), - "1.0.0", - "production", - BuildConfig.VERSION_NAME, - 100, - "sentry-native-jni"); - // set tracesSampleRate to 1 - options.setTracesSampleRate(1); - SentryNdk.init(options); - } - - private File setupOutboxFolder() { - // ensure we have a proper outbox directory - final File outboxDir = new File(getFilesDir(), "outbox"); - if (outboxDir.isFile()) { - final boolean deleteOk = outboxDir.delete(); - if (!deleteOk) { - throw new IllegalStateException("Failed to delete outbox file: " + outboxDir); - } - } - if (!outboxDir.exists()) { - final boolean mkdirOk = outboxDir.mkdirs(); - if (!mkdirOk) { - throw new IllegalStateException("Failed to create outbox directory: " + outboxDir); - } - } - return outboxDir; - } -} diff --git a/ndk/sample/src/main/java/io/sentry/ndk/sample/NdkSample.java b/ndk/sample/src/main/java/io/sentry/ndk/sample/NdkSample.java deleted file mode 100644 index 78c154d182..0000000000 --- a/ndk/sample/src/main/java/io/sentry/ndk/sample/NdkSample.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.sentry.ndk.sample; - -public class NdkSample { - static { - System.loadLibrary("ndk-sample"); - } - - public static native void crash(); - - public static native void message(); - - public static native void transaction(); -} diff --git a/ndk/sample/src/main/res/layout/activity_main.xml b/ndk/sample/src/main/res/layout/activity_main.xml deleted file mode 100644 index 460091277d..0000000000 --- a/ndk/sample/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - -