[core] Fix updating module apk path from package receiver (#198)

This commit is contained in:
tehcneko 2021-02-25 16:43:35 +08:00 committed by GitHub
parent e9dcb3e739
commit 29e6731127
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 10 deletions

View File

@ -20,7 +20,7 @@
package io.github.lsposed.lspd.service;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Binder;
@ -74,20 +74,26 @@ public class LSPosedService extends ILSPosedService.Stub {
int userId = intent.getIntExtra(Intent.EXTRA_USER, -1);
boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED) && uid > 0 && !replacing) {
if (userId == 0) {
if (userId == 0 || userId == -1) {
ConfigManager.getInstance().removeModule(packageName);
}
Application app = new Application();
app.packageName = packageName;
app.userId = userId;
ConfigManager.getInstance().removeApp(app);
return;
}
PackageInfo pkgInfo = PackageService.getPackageInfo(packageName, PackageManager.GET_META_DATA, 0);
boolean isXposedModule = userId == 0 && pkgInfo != null && pkgInfo.applicationInfo != null &&
pkgInfo.applicationInfo.enabled && pkgInfo.applicationInfo.metaData != null &&
pkgInfo.applicationInfo.metaData.containsKey("xposedmodule");
ApplicationInfo applicationInfo = PackageService.getApplicationInfo(packageName, PackageManager.GET_META_DATA, 0);
boolean isXposedModule = (userId == 0 || userId == -1) &&
applicationInfo != null &&
applicationInfo.enabled &&
applicationInfo.metaData != null &&
applicationInfo.metaData.containsKey("xposedmodule");
if (isXposedModule) {
ConfigManager.getInstance().updateModuleApkPath(packageName, pkgInfo.applicationInfo.sourceDir);
ConfigManager.getInstance().updateModuleApkPath(packageName, applicationInfo.sourceDir);
Log.d(TAG, "Updated module apk path: " + packageName);
boolean enabled = Arrays.asList(ConfigManager.getInstance().enabledModules()).contains(packageName);
Intent broadcastIntent = new Intent(enabled ? "io.github.lsposed.action.MODULE_UPDATED" : "io.github.lsposed.action.MODULE_NOT_ACTIVATAED");
@ -103,7 +109,7 @@ public class LSPosedService extends ILSPosedService.Stub {
null, -1, null, true, false,
0);
} catch (Throwable t) {
t.printStackTrace();
Log.e(TAG, "Broadcast to manager failed: ", t);
}
}
if (!intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED) && uid > 0 && ConfigManager.getInstance().isManager(packageName)) {

View File

@ -19,6 +19,7 @@
package io.github.lsposed.lspd.service;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
@ -69,10 +70,16 @@ public class PackageService {
return pm;
}
public static PackageInfo getPackageInfo(String packageName, int flags, int uid) throws RemoteException {
public static PackageInfo getPackageInfo(String packageName, int flags, int userId) throws RemoteException {
IPackageManager pm = getPackageManager();
if (pm == null) return null;
return pm.getPackageInfo(packageName, flags, uid);
return pm.getPackageInfo(packageName, flags, userId);
}
public static ApplicationInfo getApplicationInfo(String packageName, int flags, int userId) throws RemoteException {
IPackageManager pm = getPackageManager();
if (pm == null) return null;
return pm.getApplicationInfo(packageName, flags, userId);
}
public static String[] getPackagesForUid(int uid) throws RemoteException {