[core] Broadcast pkg changed to app (#1183)

This commit is contained in:
南宫雪珊 2021-09-27 17:09:03 +08:00 committed by GitHub
parent 5102b5c4f2
commit daf3e8dbd6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 5 deletions

View File

@ -21,7 +21,10 @@
package org.lsposed.manager;
import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Process;
@ -38,6 +41,7 @@ import org.lsposed.hiddenapibypass.HiddenApiBypass;
import org.lsposed.manager.repo.RepoLoader;
import org.lsposed.manager.ui.activity.CrashReportActivity;
import org.lsposed.manager.util.DoHDNS;
import org.lsposed.manager.util.ModuleUtil;
import org.lsposed.manager.util.theme.ThemeUtil;
import java.io.ByteArrayOutputStream;
@ -136,7 +140,7 @@ public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
if (!BuildConfig.DEBUG) {
if (!BuildConfig.DEBUG && Process.isApplicationUid(Process.myUid())) {
setCrashReport();
}
@ -154,6 +158,17 @@ public class App extends Application {
DayNightDelegate.setDefaultNightMode(ThemeUtil.getDarkTheme());
LocaleDelegate.setDefaultLocale(getLocale());
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int userId = intent.getIntExtra(Intent.EXTRA_USER, 0);
String packageName = intent.getStringExtra("android.intent.extra.PACKAGES");
if (packageName != null) {
ModuleUtil.getInstance().reloadSingleModule(packageName, userId);
}
}
}, new IntentFilter(Intent.ACTION_PACKAGE_CHANGED));
loadRemoteVersion();
RepoLoader.getInstance().loadRemoteData();

View File

@ -45,7 +45,6 @@ import android.os.Bundle;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.SELinux;
import android.os.SystemProperties;
import android.util.Log;
@ -60,7 +59,6 @@ import org.lsposed.lspd.util.FakeContext;
import org.lsposed.lspd.util.Utils;
import java.io.File;
import java.io.FileDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
import java.util.LinkedList;
@ -241,6 +239,28 @@ public class LSPManagerService extends ILSPManagerService.Stub {
}
}
public static void broadcastIntent(String modulePackageName, int moduleUserId) {
Intent intent = new Intent(Intent.ACTION_PACKAGE_CHANGED);
intent.addFlags(0x01000000); //Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND
intent.addFlags(0x00400000); //Intent.FLAG_RECEIVER_FROM_SHELL
intent.putExtra("android.intent.extra.PACKAGES", modulePackageName);
intent.putExtra(Intent.EXTRA_USER, moduleUserId);
intent.setPackage(BuildConfig.MANAGER_INJECTED_PKG_NAME);
try {
ActivityManagerService.broadcastIntentWithFeature(null, intent,
null, null, 0, null, null,
null, -1, null, true, false,
0);
intent.setPackage(BuildConfig.DEFAULT_MANAGER_PACKAGE_NAME);
ActivityManagerService.broadcastIntentWithFeature(null, intent,
null, null, 0, null, null,
null, -1, null, true, false,
0);
} catch (Throwable t) {
Log.e(TAG, "Broadcast to manager failed: ", t);
}
}
public static void createOrUpdateShortcut() {
try {
while (!UserService.isUserUnlocked(0)) {

View File

@ -32,7 +32,6 @@ import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.util.DisplayMetrics;
import android.util.Log;
import java.util.Arrays;
@ -144,7 +143,10 @@ public class LSPosedService extends ILSPosedService.Stub {
boolean enabled = Arrays.asList(enabledModules).contains(moduleName);
boolean removed = intent.getAction().equals(Intent.ACTION_PACKAGE_FULLY_REMOVED) ||
intent.getAction().equals(Intent.ACTION_UID_REMOVED);
LSPManagerService.showNotification(moduleName, userId, enabled || removed, systemModule);
if (!removed) {
LSPManagerService.showNotification(moduleName, userId, enabled, systemModule);
}
LSPManagerService.broadcastIntent(moduleName, userId);
}
if (moduleName != null && ConfigManager.getInstance().isManager(moduleName) && userId == 0) {