Skip to content

Commit f53c3f1

Browse files
committed
fix: broken AndroidUnsafe relocation
Signed-off-by: Akash Yadav <akashyadav@appdevforall.org>
1 parent a98fda0 commit f53c3f1

1 file changed

Lines changed: 27 additions & 17 deletions

File tree

patches/0008-feat-package-UnsafeAndroid-in-embeddable-jar.patch renamed to patches/0008-feat-package-AndroidUnsafe-in-embeddable-jar.patch

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
From af21717100c674756df1e559b31f21706b579ffd Mon Sep 17 00:00:00 2001
1+
From b1e1aa32501204ef907dd33c566c23a07c9b2652 Mon Sep 17 00:00:00 2001
22
From: Akash Yadav <akashyadav@appdevforall.org>
33
Date: Wed, 25 Mar 2026 15:29:30 +0530
4-
Subject: [PATCH 8/8] feat: package UnsafeAndroid in embeddable jar
4+
Subject: [PATCH 8/8] feat: package AndroidUnsafe in embeddable jar
55

66
Signed-off-by: Akash Yadav <akashyadav@appdevforall.org>
77
---
88
build.gradle.kts | 1 +
99
gradle/verification-metadata.xml | 5 +
10-
.../build.gradle.kts | 10 ++
10+
.../build.gradle.kts | 15 ++
1111
.../unsafe-access-android/build.gradle.kts | 79 ++++++++++
12-
.../util/containers/UnsafeAndroid.java | 138 ++++++++++++++++++
12+
.../util/containers/AndroidUnsafe.java | 137 ++++++++++++++++++
1313
settings.gradle | 5 +-
14-
6 files changed, 236 insertions(+), 2 deletions(-)
14+
6 files changed, 240 insertions(+), 2 deletions(-)
1515
create mode 100644 prepare/ide-plugin-dependencies/unsafe-access-android/build.gradle.kts
16-
create mode 100644 prepare/ide-plugin-dependencies/unsafe-access-android/src/main/java/com/intellij/util/containers/UnsafeAndroid.java
16+
create mode 100644 prepare/ide-plugin-dependencies/unsafe-access-android/src/main/java/com/intellij/util/containers/AndroidUnsafe.java
1717

1818
diff --git a/build.gradle.kts b/build.gradle.kts
1919
index 74e37d391fc4..3740535ed499 100644
@@ -44,7 +44,7 @@ index c859b3b8ca14..90f98779ef83 100644
4444
<artifact name="lz4-java-1.7.1.jar">
4545
<md5 value="d56d86823662a663a4d614dd5e117eff" origin="Generated by Gradle"/>
4646
diff --git a/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts b/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts
47-
index 7f6cb0d149e3..f0a4f4f78473 100644
47+
index 7f6cb0d149e3..b87232ded0ff 100644
4848
--- a/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts
4949
+++ b/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts
5050
@@ -31,6 +31,7 @@ dependencies {
@@ -63,7 +63,7 @@ index 7f6cb0d149e3..f0a4f4f78473 100644
6363
)
6464

6565
tasks.register<ShadowJar>("embeddable") {
66-
@@ -62,6 +64,14 @@ tasks.register<ShadowJar>("embeddable") {
66+
@@ -62,12 +64,25 @@ tasks.register<ShadowJar>("embeddable") {
6767
configurations = listOf(embeddableJar)
6868

6969
relocate("com.google.protobuf", "org.jetbrains.kotlin.protobuf")
@@ -72,12 +72,23 @@ index 7f6cb0d149e3..f0a4f4f78473 100644
7272
+ // It makes use of MethodHandles in order to access methods from the sun.misc.Unsafe
7373
+ // class, which are hidden API on Android. Remove this class and provide a drop-in
7474
+ // replacement instead.
75-
+ relocate("com.intellij.util.containers.Unsafe", "com.intellij.util.containers.UnsafeAndroid") {
76-
+ exclude("com.intellij.util.containers.UnsafeAndroid")
77-
+ }
7875
relocate("com.intellij", "$kotlinEmbeddableRootPackage.com.intellij") {
7976
// These are not real packages, but important string constants which are used by xml-reader.
8077
exclude("com.intellij.projectService")
78+
exclude("com.intellij.applicationService")
79+
+
80+
+ // we want to replace this class with our implementation, keep both out of the kotlin namespace
81+
+ exclude("com.intellij.util.containers.Unsafe")
82+
+ exclude("com.intellij.util.containers.AndroidUnsafe")
83+
}
84+
85+
+ // replace with our Android-specific implementation
86+
+ exclude("com/intellij/util/containers/Unsafe")
87+
+ relocate("com.intellij.util.containers.Unsafe", "com.intellij.util.containers.AndroidUnsafe")
88+
+
89+
packagesToRelocate.forEach {
90+
relocate(it, "$kotlinEmbeddableRootPackage.$it")
91+
}
8192
diff --git a/prepare/ide-plugin-dependencies/unsafe-access-android/build.gradle.kts b/prepare/ide-plugin-dependencies/unsafe-access-android/build.gradle.kts
8293
new file mode 100644
8394
index 000000000000..07633a92595e
@@ -163,12 +174,12 @@ index 000000000000..07633a92595e
163174
+ dependsOn(extractHiddenapibypass)
164175
+ from(zipTree(hiddenapibypassClassesJar))
165176
+}
166-
diff --git a/prepare/ide-plugin-dependencies/unsafe-access-android/src/main/java/com/intellij/util/containers/UnsafeAndroid.java b/prepare/ide-plugin-dependencies/unsafe-access-android/src/main/java/com/intellij/util/containers/UnsafeAndroid.java
177+
diff --git a/prepare/ide-plugin-dependencies/unsafe-access-android/src/main/java/com/intellij/util/containers/AndroidUnsafe.java b/prepare/ide-plugin-dependencies/unsafe-access-android/src/main/java/com/intellij/util/containers/AndroidUnsafe.java
167178
new file mode 100644
168-
index 000000000000..d82643964c2d
179+
index 000000000000..4c179310346d
169180
--- /dev/null
170-
+++ b/prepare/ide-plugin-dependencies/unsafe-access-android/src/main/java/com/intellij/util/containers/UnsafeAndroid.java
171-
@@ -0,0 +1,138 @@
181+
+++ b/prepare/ide-plugin-dependencies/unsafe-access-android/src/main/java/com/intellij/util/containers/AndroidUnsafe.java
182+
@@ -0,0 +1,137 @@
172183
+/*
173184
+ * Copyright 2010-2026 JetBrains s.r.o. and Kotlin Programming Language contributors.
174185
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
@@ -177,15 +188,14 @@ index 000000000000..d82643964c2d
177188
+package com.intellij.util.containers;
178189
+
179190
+import android.util.Log;
180-
+import com.intellij.util.ReflectionUtil;
181191
+import org.lsposed.hiddenapibypass.HiddenApiBypass;
182192
+
183193
+import java.lang.reflect.Field;
184194
+import java.lang.reflect.Method;
185195
+import java.util.Arrays;
186196
+
187197
+@SuppressWarnings("all")
188-
+public class UnsafeAndroid {
198+
+public class AndroidUnsafe {
189199
+
190200
+ private static final Object unsafe;
191201
+

0 commit comments

Comments
 (0)