[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; package io.github.lsposed.lspd.service;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.Uri; import android.net.Uri;
import android.os.Binder; import android.os.Binder;
@ -74,20 +74,26 @@ public class LSPosedService extends ILSPosedService.Stub {
int userId = intent.getIntExtra(Intent.EXTRA_USER, -1); int userId = intent.getIntExtra(Intent.EXTRA_USER, -1);
boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED) && uid > 0 && !replacing) { if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED) && uid > 0 && !replacing) {
if (userId == 0) { if (userId == 0 || userId == -1) {
ConfigManager.getInstance().removeModule(packageName); ConfigManager.getInstance().removeModule(packageName);
} }
Application app = new Application(); Application app = new Application();
app.packageName = packageName; app.packageName = packageName;
app.userId = userId; app.userId = userId;
ConfigManager.getInstance().removeApp(app); ConfigManager.getInstance().removeApp(app);
return;
} }
PackageInfo pkgInfo = PackageService.getPackageInfo(packageName, PackageManager.GET_META_DATA, 0);
boolean isXposedModule = userId == 0 && pkgInfo != null && pkgInfo.applicationInfo != null && ApplicationInfo applicationInfo = PackageService.getApplicationInfo(packageName, PackageManager.GET_META_DATA, 0);
pkgInfo.applicationInfo.enabled && pkgInfo.applicationInfo.metaData != null && boolean isXposedModule = (userId == 0 || userId == -1) &&
pkgInfo.applicationInfo.metaData.containsKey("xposedmodule"); applicationInfo != null &&
applicationInfo.enabled &&
applicationInfo.metaData != null &&
applicationInfo.metaData.containsKey("xposedmodule");
if (isXposedModule) { 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); 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"); 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, null, -1, null, true, false,
0); 0);
} catch (Throwable t) { } 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)) { 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; package io.github.lsposed.lspd.service;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo; import android.content.pm.ComponentInfo;
import android.content.pm.IPackageManager; import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
@ -69,10 +70,16 @@ public class PackageService {
return pm; 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(); IPackageManager pm = getPackageManager();
if (pm == null) return null; 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 { public static String[] getPackagesForUid(int uid) throws RemoteException {