[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