Reapply "Allow spoofing signingInfo for microG Companion/Services"
- Spoof PackageInfo signingInfo + signatures so that
G suite apps do not complain anymore.
Compared to the previous CalyxOS patch, this fixes:
E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main
E AndroidRuntime: java.lang.NullPointerException: Attempt to read from field 'android.content.pm.Signature[] android.content.pm.PackageInfo.signatures' on a null object reference in method 'android.content.pm.PackageInfo com.android.server.pm.ComputerEngine.generatePackageInfo(com.android.server.pm.pkg.PackageStateInternal, long, int)'
Co-authored-by: althafvly <althafvly@gmail.com>
Co-authored-by: Michael Bestas <mkbestas@gmail.com>
Original-Change-Id: I86f182c9e1d18b0e997803842577a90ef740cfd1
Change-Id: Ie480255ed3bd80809803698752cafb3a2ecc3a33
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 64c0b9d..83ddb9f 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -167,6 +167,7 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
+import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -1544,6 +1545,21 @@
return null;
}
+ if (isMicroG) {
+ try {
+ packageInfo.signingInfo = new SigningInfo(
+ new SigningDetails(
+ packageInfo.signatures,
+ SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V3,
+ SigningDetails.toSigningKeys(packageInfo.signatures),
+ null
+ )
+ );
+ } catch (CertificateException e) {
+ Slog.e(TAG, "Caught an exception when creating signing keys: ", e);
+ }
+ }
+
packageInfo.packageName = packageInfo.applicationInfo.packageName =
resolveExternalPackageName(p);