[Scummvm-git-logs] scummvm master -> e8498ccbfdf07449c2535e377d8ab722e7a2ed12

lephilousophe noreply at scummvm.org
Sun Jun 21 11:33:11 UTC 2026


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
e8498ccbfd ANDROID: Annotate JNI methods as to be kept


Commit: e8498ccbfdf07449c2535e377d8ab722e7a2ed12
    https://github.com/scummvm/scummvm/commit/e8498ccbfdf07449c2535e377d8ab722e7a2ed12
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-06-21T13:30:06+02:00

Commit Message:
ANDROID: Annotate JNI methods as to be kept

This avoids zealous minification on elements found by reflection.
Also cleanup things not used by JNI and reorder.

Changed paths:
    backends/platform/android/jni-android.cpp
    backends/platform/android/org/scummvm/scummvm/SAFFSTree.java
    backends/platform/android/org/scummvm/scummvm/ScummVM.java
    backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
    backends/platform/android/org/scummvm/scummvm/net/HTTPManager.java
    backends/platform/android/org/scummvm/scummvm/net/HTTPRequest.java
    backends/platform/android/org/scummvm/scummvm/net/SSocket.java


diff --git a/backends/platform/android/jni-android.cpp b/backends/platform/android/jni-android.cpp
index cd004b24436..c4d0060ed9a 100644
--- a/backends/platform/android/jni-android.cpp
+++ b/backends/platform/android/jni-android.cpp
@@ -707,7 +707,6 @@ void JNI::create(JNIEnv *env, jobject self, jobject asset_manager,
         }                                                                   \
     } while (0)
 
-	FIND_METHOD(, setWindowCaption, "(Ljava/lang/String;)V");
 	FIND_METHOD(, getDPI, "([F)V");
 	FIND_METHOD(, displayMessageOnOSD, "(Ljava/lang/String;)V");
 	FIND_METHOD(, openUrl, "(Ljava/lang/String;)V");
@@ -715,6 +714,7 @@ void JNI::create(JNIEnv *env, jobject self, jobject asset_manager,
 	FIND_METHOD(, getTextFromClipboard, "()Ljava/lang/String;");
 	FIND_METHOD(, setTextInClipboard, "(Ljava/lang/String;)Z");
 	FIND_METHOD(, isConnectionLimited, "()Z");
+	FIND_METHOD(, setWindowCaption, "(Ljava/lang/String;)V");
 	FIND_METHOD(, showVirtualKeyboard, "(Z)V");
 	FIND_METHOD(, showOnScreenControls, "(I)V");
 	FIND_METHOD(, setTouchMode, "(I)V");
diff --git a/backends/platform/android/org/scummvm/scummvm/SAFFSTree.java b/backends/platform/android/org/scummvm/scummvm/SAFFSTree.java
index 1eaece8eb58..fd82762e3b0 100644
--- a/backends/platform/android/org/scummvm/scummvm/SAFFSTree.java
+++ b/backends/platform/android/org/scummvm/scummvm/SAFFSTree.java
@@ -33,6 +33,7 @@ import android.provider.DocumentsContract;
 import android.system.OsConstants;
 import android.util.Log;
 
+import androidx.annotation.Keep;
 import androidx.annotation.RequiresApi;
 
 import java.io.FileNotFoundException;
@@ -220,6 +221,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public static void addNodeRef(long nodeId) {
 		assert(nodeId != 0);
 		SAFFSNode node = _nodes.get(nodeId);
@@ -232,6 +234,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public static void decNodeRef(long nodeId) {
 		assert(nodeId != 0);
 		SAFFSNode node = _nodes.get(nodeId);
@@ -243,6 +246,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public static SAFFSNode refToNode(long nodeId) {
 		assert(nodeId != 0);
 		return _nodes.get(nodeId);
@@ -255,9 +259,25 @@ public class SAFFSTree {
 		public static final int DELETABLE = 0x08;
 		public static final int REMOVABLE = 0x10;
 
+		/** @noinspection unused
+		 * Read by the C++ side
+		 */
+		@Keep
 		public SAFFSNode _parent;
+		/** @noinspection unused
+		 * Read by the C++ side
+		 */
+		@Keep
 		public String _path;
+		/** @noinspection unused
+		 * Read by the C++ side
+		 */
+		@Keep
 		public String _documentId;
+		/** @noinspection unused
+		 * Read by the C++ side
+		 */
+		@Keep
 		public int _flags;
 
 		private HashMap<String, SoftReference<SAFFSNode>> _children;
@@ -303,6 +323,10 @@ public class SAFFSTree {
 			return _path.compareTo(o._path);
 		}
 
+		/** @noinspection unused
+		 * Called by the C++ side
+		 */
+		@Keep
 		public synchronized long addRef() {
 			_refCnt += 1;
 			if (_refCnt > 1) {
@@ -330,7 +354,15 @@ public class SAFFSTree {
 	private final Context _context;
 	private final Uri _treeUri;
 
+	/** @noinspection unused
+	 * Read by the C++ side
+	 */
+	@Keep
 	private final SAFFSNode _root;
+	/** @noinspection unused
+	 * Read by the C++ side
+	 */
+	@Keep
 	private final String _treeName;
 
 	public SAFFSTree(Context context, Uri treeUri) {
@@ -348,6 +380,10 @@ public class SAFFSTree {
 		_treeName = treeName;
 	}
 
+	/** @noinspection unused
+	 * Called by the C++ side
+	 */
+	@Keep
 	public String getTreeId() {
 		return Uri.encode(DocumentsContract.getTreeDocumentId(_treeUri));
 	}
@@ -376,6 +412,10 @@ public class SAFFSTree {
 		}
 	}
 
+	/** @noinspection unused
+	 * Called by the C++ side
+	 */
+	@Keep
 	public SAFFSNode pathToNode(String path, boolean createDirIfNotExists) {
 		String[] components = path.split("/");
 
@@ -436,6 +476,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public SAFFSNode[] getChildren(long nodeId) {
 		SAFFSNode node = _nodes.get(nodeId);
 		assert(node != null);
@@ -557,6 +598,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public SAFFSNode getChild(long nodeId, String name) {
 		SAFFSNode node = _nodes.get(nodeId);
 		assert(node != null);
@@ -571,6 +613,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public SAFFSNode createDirectory(long nodeId, String name) {
 		SAFFSNode node = _nodes.get(nodeId);
 		assert(node != null);
@@ -585,6 +628,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public SAFFSNode createFile(long nodeId, String name) {
 		SAFFSNode node = _nodes.get(nodeId);
 		assert(node != null);
@@ -599,6 +643,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public int createReadStream(long nodeId) {
 		SAFFSNode node = _nodes.get(nodeId);
 		assert(node != null);
@@ -613,6 +658,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public int createWriteStream(long nodeId) {
 		SAFFSNode node = _nodes.get(nodeId);
 		assert(node != null);
@@ -666,6 +712,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public int removeNode(long nodeId) {
 		SAFFSNode node = _nodes.get(nodeId);
 		assert(node != null);
@@ -676,6 +723,7 @@ public class SAFFSTree {
 	/** @noinspection unused
 	 * This version is used by the C++ side
 	 */
+	@Keep
 	public void removeTree() {
 		final ContentResolver resolver = _context.getContentResolver();
 
diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVM.java b/backends/platform/android/org/scummvm/scummvm/ScummVM.java
index a768d488655..76ee0720519 100644
--- a/backends/platform/android/org/scummvm/scummvm/ScummVM.java
+++ b/backends/platform/android/org/scummvm/scummvm/ScummVM.java
@@ -26,6 +26,7 @@ import android.graphics.PixelFormat;
 import android.util.Log;
 import android.view.SurfaceHolder;
 
+import androidx.annotation.Keep;
 import androidx.annotation.NonNull;
 
 import java.util.LinkedHashMap;
@@ -90,30 +91,53 @@ public abstract class ScummVM implements SurfaceHolder.Callback,
 	final public native void systemInsetsUpdated(int[] gestureInsets, int[] systemInsets, int[] cutoutInsets);
 
 	// Callbacks from C++ peer instance
+	/** @noinspection unused */ @Keep
 	abstract protected void getDPI(float[] values);
+	/** @noinspection unused */ @Keep
 	abstract protected void displayMessageOnOSD(String msg);
+	/** @noinspection unused */ @Keep
 	abstract protected void openUrl(String url);
+	/** @noinspection unused */ @Keep
 	abstract protected boolean hasTextInClipboard();
+	/** @noinspection unused */ @Keep
 	abstract protected String getTextFromClipboard();
+	/** @noinspection unused */ @Keep
 	abstract protected boolean setTextInClipboard(String text);
+	/** @noinspection unused */ @Keep
 	abstract protected boolean isConnectionLimited();
+	/** @noinspection unused */ @Keep
 	abstract protected void setWindowCaption(String caption);
+	/** @noinspection unused */ @Keep
 	abstract protected void showVirtualKeyboard(boolean enable);
+	/** @noinspection unused */ @Keep
 	abstract protected void showOnScreenControls(int enableMask);
+	/** @noinspection unused */ @Keep
 	abstract protected void setTouchMode(int touchMode);
+	/** @noinspection unused */ @Keep
 	abstract protected int getTouchMode();
+	/** @noinspection unused */ @Keep
 	abstract protected void setOrientation(int orientation);
+	/** @noinspection unused */ @Keep
 	abstract protected String getScummVMBasePath();
+	/** @noinspection unused */ @Keep
 	abstract protected String getScummVMConfigPath();
+	/** @noinspection unused */ @Keep
 	abstract protected String getScummVMLogPath();
+	/** @noinspection unused */ @Keep
 	abstract protected void setCurrentGame(String target);
+	/** @noinspection unused */ @Keep
 	abstract protected String[] getSysArchives();
+	/** @noinspection unused */ @Keep
 	abstract protected String[] getAllStorageLocations();
-	abstract protected String[] getAllStorageLocationsNoPermissionRequest();
+	/** @noinspection unused */ @Keep
 	abstract protected SAFFSTree getNewSAFTree(boolean write, String initialURI, String prompt);
+	/** @noinspection unused */ @Keep
 	abstract protected SAFFSTree[] getSAFTrees();
+	/** @noinspection unused */ @Keep
 	abstract protected SAFFSTree findSAFTree(String name);
+	/** @noinspection unused */ @Keep
 	abstract protected int exportBackup(String prompt);
+	/** @noinspection unused */ @Keep
 	abstract protected int importBackup(String prompt, String path);
 
 	public ScummVM(AssetManager asset_manager, SurfaceHolder holder, final MyScummVMDestroyedCallback scummVMDestroyedCallback) {
@@ -245,7 +269,10 @@ public abstract class ScummVM implements SurfaceHolder.Callback,
 												_egl.eglGetError()));
 	}
 
-	// Callback from C++ peer instance
+	/** @noinspection unused
+	 * Callback from C++ peer instance
+	 */
+	@Keep
 	final protected EGLSurface initSurface() throws Exception {
 		_egl_surface = _egl.eglCreateWindowSurface(_egl_display, _egl_config,
 													_surface_holder, null);
@@ -269,7 +296,10 @@ public abstract class ScummVM implements SurfaceHolder.Callback,
 		return _egl_surface;
 	}
 
-	// Callback from C++ peer instance
+	/** @noinspection unused
+	 * Callback from C++ peer instance
+	 */
+	@Keep
 	final protected void deinitSurface() {
 		if (_egl_display != EGL10.EGL_NO_DISPLAY) {
 			_egl.eglMakeCurrent(_egl_display, EGL10.EGL_NO_SURFACE,
@@ -282,7 +312,10 @@ public abstract class ScummVM implements SurfaceHolder.Callback,
 		_egl_surface = EGL10.EGL_NO_SURFACE;
 	}
 
-	// Callback from C++ peer instance
+	/** @noinspection unused
+	 * Callback from C++ peer instance
+	 */
+	@Keep
 	final protected int eglVersion() {
 		String version = _egl.eglQueryString(_egl_display, EGL10.EGL_VERSION);
 		if (version == null) {
diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
index 7288d333443..bfb18e1568a 100644
--- a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
+++ b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
@@ -914,7 +914,6 @@ public class ScummVMActivity extends Activity {
 			return new String[0]; // an array of zero length
 		}
 
-		@Override
 		protected String[] getAllStorageLocationsNoPermissionRequest() {
 			if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M
 				|| checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
diff --git a/backends/platform/android/org/scummvm/scummvm/net/HTTPManager.java b/backends/platform/android/org/scummvm/scummvm/net/HTTPManager.java
index e056778d409..decc98f60d3 100644
--- a/backends/platform/android/org/scummvm/scummvm/net/HTTPManager.java
+++ b/backends/platform/android/org/scummvm/scummvm/net/HTTPManager.java
@@ -21,6 +21,8 @@
 
 package org.scummvm.scummvm.net;
 
+import androidx.annotation.Keep;
+
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -28,11 +30,16 @@ import java.util.concurrent.Executors;
 public class HTTPManager {
 	protected ExecutorService _executor;
 	protected ArrayBlockingQueue<Runnable> _queue;
+	/** @noinspection unused
+	 * Read from JNI (timer ScummVM thread)
+	 */
+	@Keep
 	protected boolean _empty;
 
 	/** @noinspection unused
 	 * Called from JNI (main ScummVM thread)
 	 */
+	@Keep
 	public HTTPManager() {
 		TLSSocketFactory.init();
 
@@ -45,6 +52,7 @@ public class HTTPManager {
 	/** @noinspection unused
 	 * Called from JNI (main ScummVM thread)
 	 */
+	@Keep
 	public void startRequest(HTTPRequest request) {
 		request._manager = this;
 		_executor.execute(request);
@@ -53,6 +61,7 @@ public class HTTPManager {
 	/** @noinspection unused
 	 * Called from JNI (main ScummVM thread)
 	 */
+	@Keep
 	public void poll() {
 		Runnable r;
 		while((r = _queue.poll()) != null) {
diff --git a/backends/platform/android/org/scummvm/scummvm/net/HTTPRequest.java b/backends/platform/android/org/scummvm/scummvm/net/HTTPRequest.java
index 99e66b7f0c5..f63b9677dc2 100644
--- a/backends/platform/android/org/scummvm/scummvm/net/HTTPRequest.java
+++ b/backends/platform/android/org/scummvm/scummvm/net/HTTPRequest.java
@@ -25,6 +25,8 @@ import android.os.Build;
 import android.os.ParcelFileDescriptor;
 import android.util.Log;
 
+import androidx.annotation.Keep;
+
 import org.scummvm.scummvm.SAFFSTree;
 
 import java.io.ByteArrayInputStream;
@@ -71,6 +73,7 @@ public class HTTPRequest implements Runnable {
 	/** @noinspection unused
 	 * Called from JNI
 	 */
+	@Keep
 	public HTTPRequest(long nativePointer, String url, String[] requestHeaders, byte[] uploadBuffer, boolean uploading, boolean usingPatch, boolean post) {
 		init(nativePointer, url);
 		setupUploadBuffer(uploadBuffer, uploading, usingPatch, post);
@@ -80,6 +83,7 @@ public class HTTPRequest implements Runnable {
 	/** @noinspection unused
 	 * Called from JNI
 	 */
+	@Keep
 	public HTTPRequest(long nativePointer, String url, String[] requestHeaders, String[] formFields, String[] formFiles) {
 		init(nativePointer, url);
 		setupMultipartForm(formFields, formFiles);
@@ -221,12 +225,17 @@ public class HTTPRequest implements Runnable {
 	/** @noinspection unused
 	 * Called from JNI
 	 */
+	@Keep
 	public void cancel() {
 		_cancelled.set(true);
 		// Don't notify the native object if we got cancelled: it may have been reused
 		_nativePointer = 0;
 	}
 
+	/** @noinspection unused
+	 * Called from JNI
+	 */
+	@Keep
 	public String getURL() {
 		return _url.get();
 	}
diff --git a/backends/platform/android/org/scummvm/scummvm/net/SSocket.java b/backends/platform/android/org/scummvm/scummvm/net/SSocket.java
index ddc9ea74d05..78bff683f56 100644
--- a/backends/platform/android/org/scummvm/scummvm/net/SSocket.java
+++ b/backends/platform/android/org/scummvm/scummvm/net/SSocket.java
@@ -23,6 +23,8 @@ package org.scummvm.scummvm.net;
 
 import android.util.Log;
 
+import androidx.annotation.Keep;
+
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -43,7 +45,9 @@ import java.util.Locale;
 
 import javax.net.ssl.SSLSocketFactory;
 
-/** @noinspection unused*/
+/** @noinspection unused
+ * Used from JNI
+ */
 public class SSocket {
 	final static String LOG_TAG = "ScummVM";
 
@@ -51,6 +55,10 @@ public class SSocket {
 
 	protected int _buffer = -2;
 
+	/** @noinspection unused
+	 * Called from JNI
+	 */
+	@Keep
 	public SSocket(String url_) {
 		final URL url;
 		try {
@@ -199,6 +207,10 @@ public class SSocket {
 		}
 	}
 
+	/** @noinspection unused
+	 * Called from JNI
+	 */
+	@Keep
 	public int ready() {
 		if (_buffer != -2) {
 			// We have at least one byte or an EOF
@@ -219,6 +231,10 @@ public class SSocket {
 		}
 	}
 
+	/** @noinspection unused
+	 * Called from JNI
+	 */
+	@Keep
 	public int send(byte[] data) {
 		try {
 			// Setup unlimited read timeout to allow for SSL exchanges to work
@@ -232,6 +248,10 @@ public class SSocket {
 		}
 	}
 
+	/** @noinspection unused
+	 * Called from JNI
+	 */
+	@Keep
 	public int recv(byte[] data) {
 		if (data.length == 0) {
 			return 0;
@@ -277,6 +297,10 @@ public class SSocket {
 		}
 	}
 
+	/** @noinspection unused
+	 * Called from JNI
+	 */
+	@Keep
 	public void close() {
 		try {
 			_socket.close();




More information about the Scummvm-git-logs mailing list