Skip to content

Commit 1419cca

Browse files
author
tiann
committed
[VXP]: Feature, Disable Xposed.
1 parent 2392eaf commit 1419cca

File tree

8 files changed

+54
-7
lines changed

8 files changed

+54
-7
lines changed

VirtualApp/app/src/main/java/io/virtualapp/settings/SettingsActivity.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public class SettingsActivity extends Activity {
5959
private static final String RECOMMEND_PLUGIN = "settings_plugin_recommend";
6060
private static final String DISABLE_RESIDENT_NOTIFICATION = "advance_settings_disable_resident_notification";
6161
private static final String ALLOW_FAKE_SIGNATURE = "advance_settings_allow_fake_signature";
62+
private static final String DISABLE_XPOSED = "advance_settings_disable_xposed";
6263

6364
@Override
6465
protected void onCreate(Bundle savedInstanceState) {
@@ -102,6 +103,7 @@ public void onCreate(Bundle savedInstanceState) {
102103
SwitchPreference yieldMode = (SwitchPreference) findPreference(YIELD_MODE);
103104
SwitchPreference disableResidentNotification = (SwitchPreference) findPreference(DISABLE_RESIDENT_NOTIFICATION);
104105
SwitchPreference allowFakeSignature = (SwitchPreference) findPreference(ALLOW_FAKE_SIGNATURE);
106+
SwitchPreference disableXposed = (SwitchPreference) findPreference(DISABLE_XPOSED);
105107

106108
addApp.setOnPreferenceClickListener(preference -> {
107109
ListAppActivity.gotoListApp(getActivity());
@@ -343,6 +345,28 @@ public void onCreate(Bundle savedInstanceState) {
343345
}
344346
});
345347

348+
disableXposed.setOnPreferenceChangeListener((preference, newValue) -> {
349+
350+
if (!(newValue instanceof Boolean)) {
351+
return false;
352+
}
353+
354+
boolean on = (boolean) newValue;
355+
356+
File disableXposedFile = getActivity().getFileStreamPath(".disable_xposed"); // 文件不存在代表是保守模式
357+
if (on) {
358+
boolean success;
359+
try {
360+
success = disableXposedFile.createNewFile();
361+
} catch (IOException e) {
362+
success = false;
363+
}
364+
return success;
365+
} else {
366+
return !disableXposedFile.exists() || disableXposedFile.delete();
367+
}
368+
});
369+
346370
disableResidentNotification.setOnPreferenceChangeListener(((preference, newValue) -> {
347371

348372
if (!(newValue instanceof Boolean)) {

VirtualApp/app/src/main/res/values-es/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,6 @@
160160
<string name="uninstall_gms_success">El servicio de Google ha sido desinstalado con éxito.</string>
161161
<string name="donate_choose_title">Forma de donar</string>
162162
<string name="donate_bitconins_tips">Mi dirección de bitconins ha sido copiada al portapapeles :)</string>
163+
<string name="advance_settings_disable_xposed_summary">Cuando está deshabilitado, todo el módulo Xposed no tendrá efecto.</string>
164+
<string name="advance_settings_disable_xposed">Deshabilitar Xposed</string>
163165
</resources>

VirtualApp/app/src/main/res/values-fr/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,6 @@
160160
<string name="uninstall_gms_success">Le service Google a été désinstallé avec succès !!</string>
161161
<string name="donate_choose_title">Façon de faire un don</string>
162162
<string name="donate_bitconins_tips">Mon adresse bitconins a été copiée dans le presse-papiers :)</string>
163+
<string name="advance_settings_disable_xposed_summary">Lorsqu\'il est désactivé, tous les modules Xposed ne prennent pas effet.</string>
164+
<string name="advance_settings_disable_xposed">Désactiver Xposed</string>
163165
</resources>

VirtualApp/app/src/main/res/values-ru/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,6 @@
181181
<string name="advance_settings_install_gms">Installer / Désinstaller les services Google</string>
182182
<string name="donate_choose_title">Способ пожертвования</string>
183183
<string name="donate_bitconins_tips">Мой адрес битконов был скопирован в буфер обмена :)</string>
184+
<string name="advance_settings_disable_xposed_summary">При отключении все модули Xposed не вступят в силу.</string>
185+
<string name="advance_settings_disable_xposed">Отключить Xposed</string>
184186
</resources>

VirtualApp/app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,6 @@
156156
<string name="donate_choose_title">选择打赏方式</string>
157157
<string name="donate_bitconins_tips">我的比特币地址已经复制到剪切板 :)</string>
158158
<string name="donate_alipay">支付宝</string>
159+
<string name="advance_settings_disable_xposed">关闭 Xposed</string>
160+
<string name="advance_settings_disable_xposed_summary">关闭Xposed之后,所有的Xposed均不会生效。</string>
159161
</resources>

VirtualApp/app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,6 @@
162162
<string name="uninstall_gms_success">Google Service has been uninstalled successfully!!</string>
163163
<string name="donate_choose_title">Way to donate</string>
164164
<string name="donate_bitconins_tips">My bitconins address has been copied to clipboard:)</string>
165+
<string name="advance_settings_disable_xposed_summary">When disabled, all Xposed module won\'t take effect.</string>
166+
<string name="advance_settings_disable_xposed">Disable Xposed</string>
165167
</resources>

VirtualApp/app/src/main/res/xml/settings_preferences.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@
3232
android:persistent="false"
3333
android:title="@string/advance_settings_copy_file" />
3434

35+
<SwitchPreference
36+
android:defaultValue="false"
37+
android:key="advance_settings_disable_xposed"
38+
android:persistent="true"
39+
android:summary="@string/advance_settings_disable_xposed_summary"
40+
android:title="@string/advance_settings_disable_xposed" />
41+
3542
<SwitchPreference
3643
android:defaultValue="false"
3744
android:key="advance_settings_disable_resident_notification"

VirtualApp/lib/src/main/java/com/lody/virtual/client/VClientImpl.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -331,13 +331,19 @@ private void bindApplicationNoCheck(String packageName, String processName, Cond
331331
InvocationStubManager.getInstance().checkEnv(AppInstrumentation.class);
332332
}
333333

334-
ClassLoader originClassLoader = context.getClassLoader();
335-
initForYieldMode();
336-
ExposedBridge.initOnce(context, data.appInfo, originClassLoader);
337-
List<InstalledAppInfo> modules = VirtualCore.get().getInstalledApps(0);
338-
for (InstalledAppInfo module : modules) {
339-
ExposedBridge.loadModule(module.apkPath, module.getOdexFile().getParent(), module.libPath,
340-
data.appInfo, originClassLoader);
334+
boolean enableXposed = !VirtualCore.get().getContext().getFileStreamPath(".disable_xposed").exists();
335+
if (enableXposed) {
336+
VLog.i(TAG, "Xposed is enabled.");
337+
ClassLoader originClassLoader = context.getClassLoader();
338+
initForYieldMode();
339+
ExposedBridge.initOnce(context, data.appInfo, originClassLoader);
340+
List<InstalledAppInfo> modules = VirtualCore.get().getInstalledApps(0);
341+
for (InstalledAppInfo module : modules) {
342+
ExposedBridge.loadModule(module.apkPath, module.getOdexFile().getParent(), module.libPath,
343+
data.appInfo, originClassLoader);
344+
}
345+
} else {
346+
VLog.w(TAG, "Xposed is disable..");
341347
}
342348

343349
mInitialApplication = LoadedApk.makeApplication.call(data.info, false, null);

0 commit comments

Comments
 (0)