Skip to content

Commit 8cb9756

Browse files
committed
[VXP]: try improve the alive rate of some privilege app.
1 parent 9fd693d commit 8cb9756

File tree

7 files changed

+87
-9
lines changed

7 files changed

+87
-9
lines changed

VirtualApp/lib/src/main/AndroidManifest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,12 @@
253253
android:permission="android.permission.BIND_JOB_SERVICE"
254254
android:process="@string/engine_process_name" />
255255

256+
<service android:name=".client.stub.DaemonJobService"
257+
android:exported="true"
258+
android:enabled="true"
259+
android:permission="android.permission.BIND_JOB_SERVICE"
260+
android:process="@string/engine_process_name" />
261+
256262
<activity
257263
android:name=".client.stub.ChooseAccountTypeActivity"
258264
android:configChanges="keyboard|keyboardHidden|orientation"

VirtualApp/lib/src/main/java/com/lody/virtual/client/env/Constants.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.lody.virtual.client.env;
22

3-
import android.app.PendingIntent;
43
import android.content.Intent;
54

65
import com.lody.virtual.client.stub.ShortcutHandleActivity;
6+
import com.lody.virtual.helper.utils.EncodeUtils;
7+
8+
import java.util.Arrays;
9+
import java.util.List;
710

811
/**
912
* @author Lody
@@ -30,6 +33,11 @@ public class Constants {
3033
public static final String ACTION_USER_STARTED = "Virtual." + "android.intent.action.USER_STARTED";
3134
public static String META_KEY_IDENTITY = "X-Identity";
3235
public static String META_VALUE_STUB = "Stub-User";
36+
37+
public static final List<String> PRIVILEGE_APP = Arrays.asList(
38+
EncodeUtils.decode("Y29tLnRlbmNlbnQubW0="), // wechat
39+
EncodeUtils.decode("Y29tLnRlbmNlbnQubW9iaWxlcXE=")); // qq
40+
3341
/**
3442
* Server process name of VA
3543
*/
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.lody.virtual.client.stub;
2+
3+
import android.annotation.TargetApi;
4+
import android.app.job.JobInfo;
5+
import android.app.job.JobParameters;
6+
import android.app.job.JobScheduler;
7+
import android.app.job.JobService;
8+
import android.content.ComponentName;
9+
import android.content.Context;
10+
import android.os.Build;
11+
12+
import com.lody.virtual.client.env.Constants;
13+
import com.lody.virtual.server.pm.PrivilegeAppOptimizer;
14+
15+
import java.util.concurrent.TimeUnit;
16+
17+
/**
18+
* author: weishu on 2018/4/10.
19+
*/
20+
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
21+
public class DaemonJobService extends JobService {
22+
23+
@Override
24+
public boolean onStartJob(JobParameters params) {
25+
for (String pkg : Constants.PRIVILEGE_APP) {
26+
try {
27+
PrivilegeAppOptimizer.get().performOptimize(pkg, 0);
28+
} catch (Throwable ignored) {
29+
}
30+
}
31+
return true;
32+
}
33+
34+
@Override
35+
public boolean onStopJob(JobParameters params) {
36+
return false;
37+
}
38+
39+
public static void scheduleJob(Context context) {
40+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
41+
return;
42+
}
43+
44+
try {
45+
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(JOB_SCHEDULER_SERVICE);
46+
47+
if (jobScheduler == null) {
48+
return;
49+
}
50+
51+
JobInfo jobInfo = new JobInfo.Builder(1, new ComponentName(context, DaemonJobService.class))
52+
.setRequiresCharging(false)
53+
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
54+
.setPeriodic(TimeUnit.MINUTES.toMillis(15))
55+
.build();
56+
57+
jobScheduler.schedule(jobInfo);
58+
} catch (Exception ex) {
59+
ex.printStackTrace();
60+
}
61+
}
62+
}

VirtualApp/lib/src/main/java/com/lody/virtual/client/stub/DaemonService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import android.content.Intent;
77
import android.os.IBinder;
88

9+
import com.lody.virtual.client.core.VirtualCore;
10+
911

1012
/**
1113
* @author Lody
@@ -17,6 +19,9 @@ public class DaemonService extends Service {
1719

1820
public static void startup(Context context) {
1921
context.startService(new Intent(context, DaemonService.class));
22+
if (VirtualCore.get().isServerProcess()) {
23+
DaemonJobService.scheduleJob(context);
24+
}
2025
}
2126

2227
@Override

VirtualApp/lib/src/main/java/com/lody/virtual/server/am/BroadcastSystem.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.lody.virtual.server.am;
22

3-
import android.app.DownloadManager;
43
import android.content.BroadcastReceiver;
54
import android.content.Context;
65
import android.content.Intent;
@@ -23,7 +22,6 @@
2322
import com.lody.virtual.server.pm.VAppManagerService;
2423
import com.lody.virtual.server.pm.parser.VPackage;
2524

26-
import java.lang.reflect.Field;
2725
import java.util.ArrayList;
2826
import java.util.Collections;
2927
import java.util.HashMap;

VirtualApp/lib/src/main/java/com/lody/virtual/server/am/VActivityManagerService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import com.lody.virtual.client.IVClient;
3232
import com.lody.virtual.client.core.VirtualCore;
33+
import com.lody.virtual.client.env.Constants;
3334
import com.lody.virtual.client.env.SpecialComponentList;
3435
import com.lody.virtual.client.ipc.ProviderCall;
3536
import com.lody.virtual.client.ipc.VNotificationManager;
@@ -1088,7 +1089,8 @@ private void handleStaticBroadcastAsUser(int vuid, ActivityInfo info, Intent int
10881089
PendingResultData result) {
10891090
synchronized (this) {
10901091
ProcessRecord r = findProcessLocked(info.processName, vuid);
1091-
if (BROADCAST_NOT_STARTED_PKG && r == null) {
1092+
if ((BROADCAST_NOT_STARTED_PKG || (info.packageName != null && (Constants.PRIVILEGE_APP.contains(info.packageName))))
1093+
&& r == null) {
10921094
r = startProcessIfNeedLocked(info.processName, getUserId(vuid), info.packageName);
10931095
}
10941096
if (r != null && r.appThread != null) {

VirtualApp/lib/src/main/java/com/lody/virtual/server/pm/PrivilegeAppOptimizer.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.lody.virtual.server.pm;
22

33
import android.content.Intent;
4-
import android.util.Log;
54

65
import com.lody.virtual.client.stub.VASettings;
76
import com.lody.virtual.os.VUserHandle;
@@ -51,18 +50,16 @@ public void performOptimizeAllApps() {
5150
}
5251

5352
public boolean performOptimize(String packageName, int userId) {
54-
if (!isPrivilegeApp(packageName)) {
55-
return false;
56-
}
5753
VActivityManagerService.get().sendBroadcastAsUser(
58-
specifyApp(new Intent(Intent.ACTION_BOOT_COMPLETED, null), packageName, userId)
54+
specifyApp(new Intent(Intent.ACTION_BOOT_COMPLETED), packageName, userId)
5955
, new VUserHandle(userId));
6056
return true;
6157
}
6258

6359
private Intent specifyApp(Intent intent, String packageName, int userId) {
6460
intent.putExtra("_VA_|_privilege_pkg_", packageName);
6561
intent.putExtra("_VA_|_user_id_", userId);
62+
intent.putExtra("_VA_|_intent_", new Intent(Intent.ACTION_BOOT_COMPLETED));
6663
return intent;
6764
}
6865

0 commit comments

Comments
 (0)