From d8041f04ee1d273e269dc7ca33386c38db40a090 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Fri, 24 Sep 2021 19:36:26 +0800 Subject: [PATCH] [core] Prevent AssetManager from being GC (#1167) --- .../org/lsposed/lspd/service/ConfigFileManager.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java b/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java index 405cc9d4..c85e2bdb 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java @@ -58,6 +58,8 @@ public class ConfigFileManager { DateTimeFormatter.ISO_LOCAL_DATE_TIME.withZone(Utils.getZoneId()); @SuppressWarnings("FieldCanBeLocal") private static FileLocker locker = null; + @SuppressWarnings("FieldCanBeLocal") + private static AssetManager am = null; private static Resources res = null; private static ParcelFileDescriptor fd = null; @@ -117,13 +119,14 @@ public class ConfigFileManager { private static void loadLocale() { if (res != null) return; try { - AssetManager am = AssetManager.class.newInstance(); + am = AssetManager.class.newInstance(); //noinspection JavaReflectionMemberAccess DiscouragedPrivateApi Method addAssetPath = AssetManager.class.getDeclaredMethod("addAssetPath", String.class); addAssetPath.setAccessible(true); - addAssetPath.invoke(am, managerApkPath.toString()); - //noinspection deprecation - res = new Resources(am, null, null); + //noinspection ConstantConditions + if ((int) addAssetPath.invoke(am, managerApkPath.toString()) > 0) + //noinspection deprecation + res = new Resources(am, null, null); } catch (Throwable e) { Log.e(TAG, Log.getStackTraceString(e)); }