Skip to content

Commit 3445df1

Browse files
author
liuhuo.xd
committed
白名单优化.
1 parent 75d41fc commit 3445df1

File tree

3 files changed

+29
-9
lines changed

3 files changed

+29
-9
lines changed

sample/src/main/java/com/xdandroid/sample/misc/GenOpsActivity.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import java.io.*;
99
import java.util.stream.*;
1010

11+
import static com.xdandroid.sample.misc.RevokeActivity.*;
12+
1113
/**
1214
* uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
1315
* android:theme="@android:style/Theme.NoDisplay"
@@ -18,7 +20,7 @@ static String genOp(String pkg, String op) {
1820
String mode;
1921
switch (op) {
2022
case "RUN_IN_BACKGROUND":
21-
mode = "ignore";
23+
mode = WHITE_LIST_APPS.contains(pkg) ? "allow" : "ignore";
2224
break;
2325
default:
2426
mode = "ignore";
@@ -48,9 +50,7 @@ protected void onCreate(Bundle savedInstanceState) {
4850
.filter(i -> (i.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0)
4951
.filter(i -> (i.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0)
5052
.map(i -> i.applicationInfo.packageName)
51-
.flatMap(n -> Stream
52-
.of("WIFI_SCAN", "WAKE_LOCK", "RUN_IN_BACKGROUND", "WRITE_SETTINGS", "SYSTEM_ALERT_WINDOW")
53-
.map(op -> genOp(n, op)))
53+
.flatMap(n -> Stream.of(BLACK_LIST_OPS).map(op -> genOp(n, op)))
5454
.forEach(op -> {
5555
try { fos.write(op.getBytes("UTF-8")); } catch (IOException e) { throw asUnchecked(e); }
5656
});

sample/src/main/java/com/xdandroid/sample/misc/KillActivity.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
import java.lang.reflect.*;
88

9+
import static com.xdandroid.sample.misc.RevokeActivity.*;
10+
911
/**
1012
* uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"
1113
* android:theme="@android:style/Theme.NoDisplay"
@@ -18,15 +20,14 @@ protected void onCreate(Bundle savedInstanceState) {
1820
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) return;
1921
new Thread(() -> {
2022
try {
21-
String thisApp = getPackageName();
2223
Method m = ActivityManager.class.getMethod("forceStopPackage", String.class);
2324
ActivityManager am = getSystemService(ActivityManager.class);
2425
getPackageManager().getInstalledPackages(0)
2526
.stream()
2627
.filter(i -> (i.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0)
2728
.filter(i -> (i.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0)
2829
.map(i -> i.packageName)
29-
.filter(n -> !thisApp.equals(n))
30+
.filter(n -> !WHITE_LIST_APPS.contains(n))
3031
.forEach(n -> {
3132
try { m.invoke(am, n); } catch (Exception e) { e.printStackTrace(); }
3233
});

sample/src/main/java/com/xdandroid/sample/misc/RevokeActivity.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,26 @@
1414
*/
1515
public class RevokeActivity extends Activity {
1616

17+
static final List<String> WHITE_LIST_APPS = Arrays.asList(
18+
"com.github.shadowsocks",
19+
"com.tencent.mm",
20+
"com.xdandroid.kill",
21+
"me.piebridge.brevent"
22+
);
23+
24+
static final List<String> WHITE_LIST_PERMISSIONS = Arrays.asList(
25+
"android.permission.READ_EXTERNAL_STORAGE",
26+
"android.permission.WRITE_EXTERNAL_STORAGE"
27+
);
28+
29+
static final String[] BLACK_LIST_OPS = {
30+
"WIFI_SCAN",
31+
"WAKE_LOCK",
32+
"RUN_IN_BACKGROUND",
33+
"WRITE_SETTINGS",
34+
"SYSTEM_ALERT_WINDOW"
35+
};
36+
1737
@Override
1838
protected void onCreate(Bundle savedInstanceState) {
1939
super.onCreate(savedInstanceState);
@@ -33,7 +53,7 @@ protected void onCreate(Bundle savedInstanceState) {
3353
String n = i.applicationInfo.packageName;
3454
try { setModeMethod.invoke(aom, 10, uid, n, AppOpsManager.MODE_IGNORED); } catch (Exception e) { e.printStackTrace(); }
3555
try { setModeMethod.invoke(aom, 40, uid, n, AppOpsManager.MODE_IGNORED); } catch (Exception e) { e.printStackTrace(); }
36-
try { setModeMethod.invoke(aom, 63, uid, n, AppOpsManager.MODE_IGNORED); } catch (Exception e) { e.printStackTrace(); }
56+
try { setModeMethod.invoke(aom, 63, uid, n, WHITE_LIST_APPS.contains(n) ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED); } catch (Exception e) { e.printStackTrace(); }
3757
if (i.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M && i.requestedPermissions != null) {
3858
Arrays.stream(i.requestedPermissions)
3959
.map(p -> {
@@ -43,8 +63,7 @@ protected void onCreate(Bundle savedInstanceState) {
4363
.filter(pi -> (pi.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) == PermissionInfo.PROTECTION_DANGEROUS)
4464
.map(pi -> pi.name)
4565
.filter(pn -> pn.startsWith("android"))
46-
.filter(pn -> !"android.permission.READ_EXTERNAL_STORAGE".equals(pn))
47-
.filter(pn -> !"android.permission.WRITE_EXTERNAL_STORAGE".equals(pn))
66+
.filter(pn -> !WHITE_LIST_PERMISSIONS.contains(pn))
4867
.map(AppOpsManager::permissionToOp)
4968
.filter(op -> !TextUtils.isEmpty(op))
5069
.forEach(op -> {

0 commit comments

Comments
 (0)