From 113e5ef6140010210ad55950283420f9fffec8db Mon Sep 17 00:00:00 2001 From: Bartosz Litwiniuk <> Date: Sun, 11 May 2025 14:13:49 +0200 Subject: [PATCH 1/6] Shadow gson from separate lib --- .github/workflows/uploadArchives.yml | 2 +- backtrace-library/build.gradle | 4 ++-- gson/.gitignore | 1 + gson/build.gradle | 19 +++++++++++++++++++ settings.gradle | 3 ++- 5 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 gson/.gitignore create mode 100644 gson/build.gradle diff --git a/.github/workflows/uploadArchives.yml b/.github/workflows/uploadArchives.yml index 3e223c189..6e2bc86b2 100644 --- a/.github/workflows/uploadArchives.yml +++ b/.github/workflows/uploadArchives.yml @@ -39,7 +39,7 @@ jobs: run: chmod +x gradlew - name: Upload archives - run: ./gradlew build publish + run: e publish env: ORG_GRADLE_PROJECT_signingKey: ${{ secrets.ASCII_ARMORED_GPG_KEY }} # ASCII-armored GPG key ORG_GRADLE_PROJECT_signingPassword: "" # Using empty password for GPG key diff --git a/backtrace-library/build.gradle b/backtrace-library/build.gradle index 8007fa126..c2ec4e726 100644 --- a/backtrace-library/build.gradle +++ b/backtrace-library/build.gradle @@ -75,9 +75,8 @@ android { } dependencies { - implementation 'com.google.code.gson:gson:2.12.1' - implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.squareup:tape:1.2.3' + implementation files('../gson/build/libs/gson-backtrace.jar') testImplementation 'junit:junit:4.13.2' testImplementation "org.mockito:mockito-core:5.16.0" testImplementation 'org.json:json:20240303' @@ -91,4 +90,5 @@ dependencies { androidTestImplementation "org.mockito:mockito-android:5.16.0" } +tasks.preBuild.dependsOn(':gson:shadowJar') apply from: 'publish.gradle' diff --git a/gson/.gitignore b/gson/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/gson/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/gson/build.gradle b/gson/build.gradle new file mode 100644 index 000000000..fc0eccf81 --- /dev/null +++ b/gson/build.gradle @@ -0,0 +1,19 @@ +plugins { + id 'java' + id 'com.github.johnrengelman.shadow' version '8.1.1' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'com.google.code.gson:gson:2.12.1' +} + +shadowJar { + relocate 'com.google.gson', 'backtraceio.gson' + archiveClassifier.set('backtrace') +} + +tasks.build.dependsOn(shadowJar) diff --git a/settings.gradle b/settings.gradle index ac7ddbbc4..b1ab7a36c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,2 @@ -include ':example-app', ':backtrace-library', ':coroner-client' \ No newline at end of file +include ':example-app', ':backtrace-library', ':coroner-client' +include ':gson' From 05f08288a3f8f3bb5afb949158d8ff2335bc8d26 Mon Sep 17 00:00:00 2001 From: Bartosz Litwiniuk <> Date: Sun, 11 May 2025 14:31:37 +0200 Subject: [PATCH 2/6] Reuse module --- .../library/BacktraceClientSerializationTest.java | 2 +- .../library/common/BacktraceSerializeHelper.java | 4 ++-- .../common/serialization/BacktraceGsonBuilder.java | 6 +++--- .../library/common/serialization/CustomGsonBuilder.java | 2 +- .../backtraceio/library/models/BacktraceApiResult.java | 4 ++-- .../java/backtraceio/library/models/BacktraceData.java | 4 ++-- .../java/backtraceio/library/models/BacktraceResult.java | 4 ++-- .../backtraceio/library/models/BacktraceStackFrame.java | 4 ++-- .../library/models/database/BacktraceDatabaseRecord.java | 4 ++-- .../java/backtraceio/library/models/json/SourceCode.java | 2 +- .../library/models/json/ThreadInformation.java | 2 +- .../java/backtraceio/library/models/metrics/Event.java | 2 +- .../library/models/metrics/EventsMetadata.java | 2 +- .../backtraceio/library/models/metrics/EventsPayload.java | 2 +- .../backtraceio/library/models/metrics/SummedEvent.java | 2 +- .../library/models/metrics/SummedEventsPayload.java | 2 +- .../backtraceio/library/models/metrics/UniqueEvent.java | 2 +- .../library/models/metrics/UniqueEventsPayload.java | 2 +- .../src/test/java/backtraceio/library/TestUtils.java | 8 ++++---- example-app/build.gradle | 2 +- example-app/proguard-rules.pro | 2 +- gson/build.gradle | 2 +- 22 files changed, 33 insertions(+), 33 deletions(-) diff --git a/backtrace-library/src/androidTest/java/backtraceio/library/BacktraceClientSerializationTest.java b/backtrace-library/src/androidTest/java/backtraceio/library/BacktraceClientSerializationTest.java index 53a581823..491f4dbc4 100644 --- a/backtrace-library/src/androidTest/java/backtraceio/library/BacktraceClientSerializationTest.java +++ b/backtrace-library/src/androidTest/java/backtraceio/library/BacktraceClientSerializationTest.java @@ -9,7 +9,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.platform.app.InstrumentationRegistry; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import net.jodah.concurrentunit.Waiter; diff --git a/backtrace-library/src/main/java/backtraceio/library/common/BacktraceSerializeHelper.java b/backtrace-library/src/main/java/backtraceio/library/common/BacktraceSerializeHelper.java index ad3a9ee40..d01819235 100644 --- a/backtrace-library/src/main/java/backtraceio/library/common/BacktraceSerializeHelper.java +++ b/backtrace-library/src/main/java/backtraceio/library/common/BacktraceSerializeHelper.java @@ -1,6 +1,6 @@ package backtraceio.library.common; -import com.google.gson.Gson; +import backtraceio.gson.Gson; import backtraceio.library.common.serialization.BacktraceGsonBuilder; @@ -31,4 +31,4 @@ public static T fromJson(Gson gson, String json, Class type) { return gson.fromJson(json, type); } -} \ No newline at end of file +} diff --git a/backtrace-library/src/main/java/backtraceio/library/common/serialization/BacktraceGsonBuilder.java b/backtrace-library/src/main/java/backtraceio/library/common/serialization/BacktraceGsonBuilder.java index 4b82160f0..359748778 100644 --- a/backtrace-library/src/main/java/backtraceio/library/common/serialization/BacktraceGsonBuilder.java +++ b/backtrace-library/src/main/java/backtraceio/library/common/serialization/BacktraceGsonBuilder.java @@ -1,8 +1,8 @@ package backtraceio.library.common.serialization; -import com.google.gson.FieldNamingPolicy; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import backtraceio.gson.FieldNamingPolicy; +import backtraceio.gson.Gson; +import backtraceio.gson.GsonBuilder; public class BacktraceGsonBuilder implements CustomGsonBuilder { diff --git a/backtrace-library/src/main/java/backtraceio/library/common/serialization/CustomGsonBuilder.java b/backtrace-library/src/main/java/backtraceio/library/common/serialization/CustomGsonBuilder.java index e991c96c8..5bc6a98b2 100644 --- a/backtrace-library/src/main/java/backtraceio/library/common/serialization/CustomGsonBuilder.java +++ b/backtrace-library/src/main/java/backtraceio/library/common/serialization/CustomGsonBuilder.java @@ -1,6 +1,6 @@ package backtraceio.library.common.serialization; -import com.google.gson.Gson; +import backtraceio.gson.Gson; public interface CustomGsonBuilder { Gson buildGson(); diff --git a/backtrace-library/src/main/java/backtraceio/library/models/BacktraceApiResult.java b/backtrace-library/src/main/java/backtraceio/library/models/BacktraceApiResult.java index 68aea851e..1c04e42ab 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/BacktraceApiResult.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/BacktraceApiResult.java @@ -1,6 +1,6 @@ package backtraceio.library.models; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; /** * Coroner API response @@ -31,4 +31,4 @@ public String getRxId() { public String getResponse() { return response; } -} \ No newline at end of file +} diff --git a/backtrace-library/src/main/java/backtraceio/library/models/BacktraceData.java b/backtrace-library/src/main/java/backtraceio/library/models/BacktraceData.java index bbdcc46dd..7c5c8a7f0 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/BacktraceData.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/BacktraceData.java @@ -2,7 +2,7 @@ import android.content.Context; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import java.util.List; import java.util.Map; @@ -331,4 +331,4 @@ private Builder setAnnotations(Map complexAttributes) { return this; } } -} \ No newline at end of file +} diff --git a/backtrace-library/src/main/java/backtraceio/library/models/BacktraceResult.java b/backtrace-library/src/main/java/backtraceio/library/models/BacktraceResult.java index 8e8924dfc..d1c8c0872 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/BacktraceResult.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/BacktraceResult.java @@ -1,6 +1,6 @@ package backtraceio.library.models; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import backtraceio.library.models.json.BacktraceReport; import backtraceio.library.models.types.BacktraceResultStatus; @@ -104,4 +104,4 @@ public BacktraceReport getBacktraceReport() { public void setBacktraceReport(BacktraceReport backtraceReport) { this.backtraceReport = backtraceReport; } -} \ No newline at end of file +} diff --git a/backtrace-library/src/main/java/backtraceio/library/models/BacktraceStackFrame.java b/backtrace-library/src/main/java/backtraceio/library/models/BacktraceStackFrame.java index bed1f1d9e..f5328b193 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/BacktraceStackFrame.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/BacktraceStackFrame.java @@ -1,7 +1,7 @@ package backtraceio.library.models; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import java.util.UUID; @@ -91,4 +91,4 @@ public BacktraceStackFrame(String functionName, String sourceCodeFileName, Integ this.sourceCode = sourceCodeUuid; this.line = line; } -} \ No newline at end of file +} diff --git a/backtrace-library/src/main/java/backtraceio/library/models/database/BacktraceDatabaseRecord.java b/backtrace-library/src/main/java/backtraceio/library/models/database/BacktraceDatabaseRecord.java index 3ffd74151..814fa6b34 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/database/BacktraceDatabaseRecord.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/database/BacktraceDatabaseRecord.java @@ -2,7 +2,7 @@ import android.content.Context; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import java.io.File; import java.nio.charset.StandardCharsets; @@ -274,4 +274,4 @@ public boolean close() { } return false; } -} \ No newline at end of file +} diff --git a/backtrace-library/src/main/java/backtraceio/library/models/json/SourceCode.java b/backtrace-library/src/main/java/backtraceio/library/models/json/SourceCode.java index 7ff04dce5..381ba9d03 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/json/SourceCode.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/json/SourceCode.java @@ -1,6 +1,6 @@ package backtraceio.library.models.json; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import backtraceio.library.models.BacktraceStackFrame; diff --git a/backtrace-library/src/main/java/backtraceio/library/models/json/ThreadInformation.java b/backtrace-library/src/main/java/backtraceio/library/models/json/ThreadInformation.java index 8dbf19443..5101b6cee 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/json/ThreadInformation.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/json/ThreadInformation.java @@ -1,6 +1,6 @@ package backtraceio.library.models.json; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import java.util.ArrayList; import java.util.List; diff --git a/backtrace-library/src/main/java/backtraceio/library/models/metrics/Event.java b/backtrace-library/src/main/java/backtraceio/library/models/metrics/Event.java index 6c475a5fd..592ae1182 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/metrics/Event.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/metrics/Event.java @@ -1,6 +1,6 @@ package backtraceio.library.models.metrics; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import java.util.HashMap; import java.util.Map; diff --git a/backtrace-library/src/main/java/backtraceio/library/models/metrics/EventsMetadata.java b/backtrace-library/src/main/java/backtraceio/library/models/metrics/EventsMetadata.java index f0284138d..e84b76886 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/metrics/EventsMetadata.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/metrics/EventsMetadata.java @@ -1,6 +1,6 @@ package backtraceio.library.models.metrics; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; public class EventsMetadata { diff --git a/backtrace-library/src/main/java/backtraceio/library/models/metrics/EventsPayload.java b/backtrace-library/src/main/java/backtraceio/library/models/metrics/EventsPayload.java index f07d9241c..0189f1f25 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/metrics/EventsPayload.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/metrics/EventsPayload.java @@ -1,6 +1,6 @@ package backtraceio.library.models.metrics; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import java.util.concurrent.ConcurrentLinkedDeque; diff --git a/backtrace-library/src/main/java/backtraceio/library/models/metrics/SummedEvent.java b/backtrace-library/src/main/java/backtraceio/library/models/metrics/SummedEvent.java index bcd8efb8c..a95989d8a 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/metrics/SummedEvent.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/metrics/SummedEvent.java @@ -1,6 +1,6 @@ package backtraceio.library.models.metrics; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import java.util.HashMap; import java.util.Map; diff --git a/backtrace-library/src/main/java/backtraceio/library/models/metrics/SummedEventsPayload.java b/backtrace-library/src/main/java/backtraceio/library/models/metrics/SummedEventsPayload.java index fe4838033..f520a0894 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/metrics/SummedEventsPayload.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/metrics/SummedEventsPayload.java @@ -1,6 +1,6 @@ package backtraceio.library.models.metrics; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import java.util.concurrent.ConcurrentLinkedDeque; diff --git a/backtrace-library/src/main/java/backtraceio/library/models/metrics/UniqueEvent.java b/backtrace-library/src/main/java/backtraceio/library/models/metrics/UniqueEvent.java index 151bbe930..c879a1423 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/metrics/UniqueEvent.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/metrics/UniqueEvent.java @@ -1,6 +1,6 @@ package backtraceio.library.models.metrics; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import java.util.ArrayList; import java.util.HashMap; diff --git a/backtrace-library/src/main/java/backtraceio/library/models/metrics/UniqueEventsPayload.java b/backtrace-library/src/main/java/backtraceio/library/models/metrics/UniqueEventsPayload.java index 1f1b06efc..012f93e82 100644 --- a/backtrace-library/src/main/java/backtraceio/library/models/metrics/UniqueEventsPayload.java +++ b/backtrace-library/src/main/java/backtraceio/library/models/metrics/UniqueEventsPayload.java @@ -1,6 +1,6 @@ package backtraceio.library.models.metrics; -import com.google.gson.annotations.SerializedName; +import backtraceio.gson.annotations.SerializedName; import java.util.concurrent.ConcurrentLinkedDeque; diff --git a/backtrace-library/src/test/java/backtraceio/library/TestUtils.java b/backtrace-library/src/test/java/backtraceio/library/TestUtils.java index 737d7e083..ae3886457 100644 --- a/backtrace-library/src/test/java/backtraceio/library/TestUtils.java +++ b/backtrace-library/src/test/java/backtraceio/library/TestUtils.java @@ -2,10 +2,10 @@ import com.google.common.collect.MapDifference; import com.google.common.collect.Maps; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; +import backtraceio.gson.Gson; +import backtraceio.gson.JsonElement; +import backtraceio.gson.JsonParser; +import backtraceio.gson.reflect.TypeToken; import org.json.JSONException; import org.json.JSONObject; diff --git a/example-app/build.gradle b/example-app/build.gradle index c06410d25..3fba70816 100644 --- a/example-app/build.gradle +++ b/example-app/build.gradle @@ -24,7 +24,7 @@ android { externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" - version "3.31.6" + version "3.22.1" } } diff --git a/example-app/proguard-rules.pro b/example-app/proguard-rules.pro index ccf4699cc..335d88673 100644 --- a/example-app/proguard-rules.pro +++ b/example-app/proguard-rules.pro @@ -21,5 +21,5 @@ #-renamesourcefileattribute SourceFile #These are needed since Proguard breaks some Backtrace libraries --keep class com.google.gson.**.* { *; } +-keep class backtraceio.gson.**.* { *; } -keep class backtraceio.library.**.* { *; } diff --git a/gson/build.gradle b/gson/build.gradle index fc0eccf81..5e036b0fc 100644 --- a/gson/build.gradle +++ b/gson/build.gradle @@ -12,7 +12,7 @@ dependencies { } shadowJar { - relocate 'com.google.gson', 'backtraceio.gson' + relocate 'backtraceio.gson', 'backtraceio.gson' archiveClassifier.set('backtrace') } From 71a4ce3b69bd75cb54dca57ce25065cd819a96c6 Mon Sep 17 00:00:00 2001 From: Bartosz Litwiniuk <> Date: Sun, 11 May 2025 14:32:37 +0200 Subject: [PATCH 3/6] Bump crashpad --- backtrace-library/src/main/cpp/crashpad | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backtrace-library/src/main/cpp/crashpad b/backtrace-library/src/main/cpp/crashpad index d3f854b81..dcfbd00c3 160000 --- a/backtrace-library/src/main/cpp/crashpad +++ b/backtrace-library/src/main/cpp/crashpad @@ -1 +1 @@ -Subproject commit d3f854b81999bb07b2cb055c37c0671c4118b2f3 +Subproject commit dcfbd00c3392367c5c21362aa9a4d3003246c5e4 From dbf23b56a38819dd7e43d476523d7fdd2a5542e7 Mon Sep 17 00:00:00 2001 From: Bartosz Litwiniuk <> Date: Sun, 11 May 2025 15:59:11 +0200 Subject: [PATCH 4/6] Bugfix shading --- backtrace-library/build.gradle | 1 + gson/build.gradle | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/backtrace-library/build.gradle b/backtrace-library/build.gradle index c2ec4e726..40b4423e4 100644 --- a/backtrace-library/build.gradle +++ b/backtrace-library/build.gradle @@ -76,6 +76,7 @@ android { dependencies { implementation 'com.squareup:tape:1.2.3' + implementation 'androidx.appcompat:appcompat:1.6.1' implementation files('../gson/build/libs/gson-backtrace.jar') testImplementation 'junit:junit:4.13.2' testImplementation "org.mockito:mockito-core:5.16.0" diff --git a/gson/build.gradle b/gson/build.gradle index 5e036b0fc..fc0eccf81 100644 --- a/gson/build.gradle +++ b/gson/build.gradle @@ -12,7 +12,7 @@ dependencies { } shadowJar { - relocate 'backtraceio.gson', 'backtraceio.gson' + relocate 'com.google.gson', 'backtraceio.gson' archiveClassifier.set('backtrace') } From b6562986a10c21e5ec80c5a16610f1d3ab7da8ad Mon Sep 17 00:00:00 2001 From: Bartosz Litwiniuk <> Date: Sun, 18 May 2025 13:08:32 +0200 Subject: [PATCH 5/6] Revert cmd --- .github/workflows/uploadArchives.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uploadArchives.yml b/.github/workflows/uploadArchives.yml index 6e2bc86b2..3e223c189 100644 --- a/.github/workflows/uploadArchives.yml +++ b/.github/workflows/uploadArchives.yml @@ -39,7 +39,7 @@ jobs: run: chmod +x gradlew - name: Upload archives - run: e publish + run: ./gradlew build publish env: ORG_GRADLE_PROJECT_signingKey: ${{ secrets.ASCII_ARMORED_GPG_KEY }} # ASCII-armored GPG key ORG_GRADLE_PROJECT_signingPassword: "" # Using empty password for GPG key From e15f46c246ed47aa81d0c1f8e0436fb5a4d84afb Mon Sep 17 00:00:00 2001 From: Bartosz Litwiniuk <> Date: Sun, 18 May 2025 13:29:23 +0200 Subject: [PATCH 6/6] Fix building issue --- gson/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gson/build.gradle b/gson/build.gradle index fc0eccf81..0a8908d0a 100644 --- a/gson/build.gradle +++ b/gson/build.gradle @@ -14,6 +14,9 @@ dependencies { shadowJar { relocate 'com.google.gson', 'backtraceio.gson' archiveClassifier.set('backtrace') + + // Exclude everything from error_prone + exclude 'com/google/errorprone/**' } tasks.build.dependsOn(shadowJar)