Skip to content

Commit a64fb62

Browse files
author
tiann
committed
[VXP]: optimise the install process of Xposed Installer.
1 parent 1419cca commit a64fb62

File tree

8 files changed

+83
-57
lines changed

8 files changed

+83
-57
lines changed

VirtualApp/app/src/main/java/io/virtualapp/XApp.java

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,13 @@
44
import android.content.Context;
55
import android.content.SharedPreferences;
66
import android.os.Build;
7-
import android.util.Log;
87

98
import com.crashlytics.android.Crashlytics;
109
import com.lody.virtual.client.NativeEngine;
11-
import com.lody.virtual.client.core.InstallStrategy;
1210
import com.lody.virtual.client.core.VirtualCore;
1311
import com.lody.virtual.client.stub.VASettings;
14-
import com.lody.virtual.helper.utils.DeviceUtil;
15-
import com.lody.virtual.helper.utils.FileUtils;
16-
import com.lody.virtual.helper.utils.VLog;
1712
import com.lody.virtual.os.VEnvironment;
1813

19-
import java.io.File;
20-
import java.io.FileOutputStream;
21-
import java.io.InputStream;
22-
import java.io.OutputStream;
23-
2414
import io.fabric.sdk.android.Fabric;
2515
import io.virtualapp.delegate.MyAppRequestListener;
2616
import io.virtualapp.delegate.MyComponentDelegate;
@@ -72,51 +62,7 @@ public void onCreate() {
7262
@Override
7363
public void onMainProcess() {
7464
Once.initialise(XApp.this);
75-
7665
Fabric.with(XApp.this, new Crashlytics());
77-
78-
boolean isXposedInstalled = false;
79-
try {
80-
isXposedInstalled = VirtualCore.get().isAppInstalled(XPOSED_INSTALLER_PACKAGE);
81-
File oldXposedInstallerApk = getFileStreamPath("XposedInstaller_1_31.apk");
82-
if (oldXposedInstallerApk.exists()) {
83-
VirtualCore.get().uninstallPackage(XPOSED_INSTALLER_PACKAGE);
84-
oldXposedInstallerApk.delete();
85-
isXposedInstalled = false;
86-
Log.d(TAG, "remove xposed installer success!");
87-
}
88-
} catch (Throwable e) {
89-
VLog.d(TAG, "remove xposed install failed.", e);
90-
}
91-
92-
if (!isXposedInstalled) {
93-
File xposedInstallerApk = getFileStreamPath("XposedInstaller_5_8.apk");
94-
if (!xposedInstallerApk.exists()) {
95-
InputStream input = null;
96-
OutputStream output = null;
97-
try {
98-
input = getApplicationContext().getAssets().open("XposedInstaller_3.1.5.apk_");
99-
output = new FileOutputStream(xposedInstallerApk);
100-
byte[] buffer = new byte[1024];
101-
int length;
102-
while ((length = input.read(buffer)) > 0) {
103-
output.write(buffer, 0, length);
104-
}
105-
} catch (Throwable e) {
106-
VLog.e(TAG, "copy file error", e);
107-
} finally {
108-
FileUtils.closeQuietly(input);
109-
FileUtils.closeQuietly(output);
110-
}
111-
}
112-
113-
if (xposedInstallerApk.isFile() && !DeviceUtil.isMeizuBelowN()) {
114-
try {
115-
VirtualCore.get().installPackage(xposedInstallerApk.getPath(), InstallStrategy.TERMINATE_IF_EXIST);
116-
} catch (Throwable ignored) {
117-
}
118-
}
119-
}
12066
}
12167

12268
@Override

VirtualApp/app/src/main/java/io/virtualapp/home/NewHomeActivity.java

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.app.Activity;
44
import android.app.AlertDialog;
5+
import android.app.ProgressDialog;
56
import android.content.ActivityNotFoundException;
67
import android.content.ComponentName;
78
import android.content.Context;
@@ -18,6 +19,7 @@
1819
import android.preference.PreferenceManager;
1920
import android.provider.Settings;
2021
import android.text.TextUtils;
22+
import android.util.Log;
2123
import android.view.KeyEvent;
2224
import android.view.View;
2325
import android.view.Window;
@@ -26,17 +28,26 @@
2628

2729
import com.android.launcher3.LauncherFiles;
2830
import com.google.android.apps.nexuslauncher.NexusLauncherActivity;
31+
import com.lody.virtual.client.core.InstallStrategy;
2932
import com.lody.virtual.client.core.VirtualCore;
3033
import com.lody.virtual.helper.utils.DeviceUtil;
34+
import com.lody.virtual.helper.utils.FileUtils;
35+
import com.lody.virtual.helper.utils.MD5Utils;
36+
import com.lody.virtual.helper.utils.VLog;
3137

3238
import java.io.File;
39+
import java.io.FileOutputStream;
40+
import java.io.InputStream;
41+
import java.io.OutputStream;
3342
import java.lang.reflect.Method;
3443

35-
import io.virtualapp.XApp;
3644
import io.virtualapp.R;
45+
import io.virtualapp.abs.ui.VUiKit;
3746
import io.virtualapp.settings.SettingsActivity;
3847
import io.virtualapp.update.VAVersionService;
3948

49+
import static io.virtualapp.XApp.XPOSED_INSTALLER_PACKAGE;
50+
4051
/**
4152
* @author weishu
4253
* @date 18/2/9.
@@ -49,6 +60,7 @@ public class NewHomeActivity extends NexusLauncherActivity {
4960

5061
private Handler mUiHandler;
5162
private boolean mDirectlyBack = false;
63+
private boolean checkXposedInstaller = true;
5264

5365
public static void goHome(Context context) {
5466
Intent intent = new Intent(context, NewHomeActivity.class);
@@ -68,9 +80,73 @@ public void onCreate(Bundle savedInstanceState) {
6880
mDirectlyBack = sharedPreferences.getBoolean(SettingsActivity.DIRECTLY_BACK_KEY, false);
6981
}
7082

83+
private void installXposed() {
84+
boolean isXposedInstalled = false;
85+
try {
86+
isXposedInstalled = VirtualCore.get().isAppInstalled(XPOSED_INSTALLER_PACKAGE);
87+
File oldXposedInstallerApk = getFileStreamPath("XposedInstaller_1_31.apk");
88+
if (oldXposedInstallerApk.exists()) {
89+
VirtualCore.get().uninstallPackage(XPOSED_INSTALLER_PACKAGE);
90+
oldXposedInstallerApk.delete();
91+
isXposedInstalled = false;
92+
Log.d(TAG, "remove xposed installer success!");
93+
}
94+
} catch (Throwable e) {
95+
VLog.d(TAG, "remove xposed install failed.", e);
96+
}
97+
98+
if (!isXposedInstalled) {
99+
ProgressDialog dialog = new ProgressDialog(this);
100+
dialog.setCancelable(false);
101+
dialog.setMessage(getResources().getString(R.string.prepare_xposed_installer));
102+
dialog.show();
103+
104+
VUiKit.defer().when(() -> {
105+
File xposedInstallerApk = getFileStreamPath("XposedInstaller_5_8.apk");
106+
if (!xposedInstallerApk.exists()) {
107+
InputStream input = null;
108+
OutputStream output = null;
109+
try {
110+
input = getApplicationContext().getAssets().open("XposedInstaller_3.1.5.apk_");
111+
output = new FileOutputStream(xposedInstallerApk);
112+
byte[] buffer = new byte[1024];
113+
int length;
114+
while ((length = input.read(buffer)) > 0) {
115+
output.write(buffer, 0, length);
116+
}
117+
} catch (Throwable e) {
118+
VLog.e(TAG, "copy file error", e);
119+
} finally {
120+
FileUtils.closeQuietly(input);
121+
FileUtils.closeQuietly(output);
122+
}
123+
}
124+
125+
if (xposedInstallerApk.isFile() && !DeviceUtil.isMeizuBelowN()) {
126+
try {
127+
if ("8537fb219128ead3436cc19ff35cfb2e".equals(MD5Utils.getFileMD5String(xposedInstallerApk))) {
128+
VirtualCore.get().installPackage(xposedInstallerApk.getPath(), InstallStrategy.TERMINATE_IF_EXIST);
129+
} else {
130+
VLog.w(TAG, "unknown Xposed installer, ignore!");
131+
}
132+
} catch (Throwable ignored) {
133+
}
134+
}
135+
}).then((v) -> {
136+
dialog.dismiss();
137+
}).fail((err) -> {
138+
dialog.dismiss();
139+
});
140+
}
141+
}
142+
71143
@Override
72144
protected void onResume() {
73145
super.onResume();
146+
if (checkXposedInstaller) {
147+
checkXposedInstaller = false;
148+
installXposed();
149+
}
74150
// check for update
75151
new Handler().postDelayed(() ->
76152
VAVersionService.checkUpdate(getApplicationContext(), false), 1000);
@@ -146,7 +222,7 @@ private void alertForMeizu() {
146222
if (!DeviceUtil.isMeizuBelowN()) {
147223
return;
148224
}
149-
boolean isXposedInstalled = VirtualCore.get().isAppInstalled(XApp.XPOSED_INSTALLER_PACKAGE);
225+
boolean isXposedInstalled = VirtualCore.get().isAppInstalled(XPOSED_INSTALLER_PACKAGE);
150226
if (isXposedInstalled) {
151227
return;
152228
}

VirtualApp/app/src/main/java/io/virtualapp/splash/SplashActivity.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ protected void onCreate(Bundle savedInstanceState) {
4242
});
4343
}
4444

45-
4645
private void doActionInThread() {
4746
if (!VirtualCore.get().isEngineLaunched()) {
4847
VirtualCore.get().waitForEngine();

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,5 @@
162162
<string name="donate_bitconins_tips">Mi dirección de bitconins ha sido copiada al portapapeles :)</string>
163163
<string name="advance_settings_disable_xposed_summary">Cuando está deshabilitado, todo el módulo Xposed no tendrá efecto.</string>
164164
<string name="advance_settings_disable_xposed">Deshabilitar Xposed</string>
165+
<string name="prepare_xposed_installer">Preparación del entorno Xposed, espere ...</string>
165166
</resources>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,5 @@
162162
<string name="donate_bitconins_tips">Mon adresse bitconins a été copiée dans le presse-papiers :)</string>
163163
<string name="advance_settings_disable_xposed_summary">Lorsqu\'il est désactivé, tous les modules Xposed ne prennent pas effet.</string>
164164
<string name="advance_settings_disable_xposed">Désactiver Xposed</string>
165+
<string name="prepare_xposed_installer">Préparation de l\'environnement Xposed, veuillez patienter ...</string>
165166
</resources>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,4 +183,5 @@
183183
<string name="donate_bitconins_tips">Мой адрес битконов был скопирован в буфер обмена :)</string>
184184
<string name="advance_settings_disable_xposed_summary">При отключении все модули Xposed не вступят в силу.</string>
185185
<string name="advance_settings_disable_xposed">Отключить Xposed</string>
186+
<string name="prepare_xposed_installer">Подготовка среды Xposed, пожалуйста, подождите ...</string>
186187
</resources>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,4 +158,5 @@
158158
<string name="donate_alipay">支付宝</string>
159159
<string name="advance_settings_disable_xposed">关闭 Xposed</string>
160160
<string name="advance_settings_disable_xposed_summary">关闭Xposed之后,所有的Xposed均不会生效。</string>
161+
<string name="prepare_xposed_installer">正在准备 Xposed 环境,请等待…</string>
161162
</resources>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,5 @@
164164
<string name="donate_bitconins_tips">My bitconins address has been copied to clipboard:)</string>
165165
<string name="advance_settings_disable_xposed_summary">When disabled, all Xposed module won\'t take effect.</string>
166166
<string name="advance_settings_disable_xposed">Disable Xposed</string>
167+
<string name="prepare_xposed_installer">Preparing Xposed environment, please wait…</string>
167168
</resources>

0 commit comments

Comments
 (0)