diff --git a/etc/otacerts_zip.go b/etc/otacerts_zip.go index b6f175a2dfc6bc2bc90bce655c89b46746c506b1..0140643b73f981595f9cb1e4103ecf7491cf7808 100644 --- a/etc/otacerts_zip.go +++ b/etc/otacerts_zip.go @@ -112,8 +112,17 @@ func (m *otacertsZipModule) outputFileName() string { } func (m *otacertsZipModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { - // Read .x509.pem file defined in PRODUCT_DEFAULT_DEV_CERTIFICATE or the default test key. - pem, _ := ctx.Config().DefaultAppCertificate(ctx) + // Check if user-keys/releasekey.x509.pem exists + const userKeyPath = "user-keys/releasekey" + + var pem android.SourcePath + if android.ExistentPathForSource(ctx, userKeyPath + ".x509.pem").Valid() && + android.ExistentPathForSource(ctx,userKeyPath + ".pk8").Valid() { + pem, _ = android.PathForSource(ctx, userKeyPath + ".x509.pem"), android.PathForSource(ctx, userKeyPath + ".pk8") + } else { + // Read .x509.pem file defined in PRODUCT_DEFAULT_DEV_CERTIFICATE or the default test key. + pem, _ = ctx.Config().DefaultAppCertificate(ctx) + } // Read .x509.pem files listed in PRODUCT_EXTRA_OTA_KEYS or PRODUCT_EXTRA_RECOVERY_KEYS. extras := ctx.Config().ExtraOtaKeys(ctx, m.InRecovery()) srcPaths := append([]android.SourcePath{pem}, extras...) diff --git a/java/app.go b/java/app.go index c9f931fcc4827918456bb7f549e4d912a22dded8..45570e878d3a6b9532ecf98cae36fe077abb7c1a 100644 --- a/java/app.go +++ b/java/app.go @@ -755,9 +755,21 @@ func processMainCert(m android.ModuleBase, certPropValue string, certificates [] var mainCert Certificate if certPropValue != "" { defaultDir := ctx.Config().DefaultAppCertificateDir(ctx) - mainCert = Certificate{ - Pem: defaultDir.Join(ctx, certPropValue+".x509.pem"), - Key: defaultDir.Join(ctx, certPropValue+".pk8"), + + userKeyBasePath := "user-keys/" + certPropValue + userPemPath := android.ExistentPathForSource(ctx, userKeyBasePath+".x509.pem") + userKeyPath := android.ExistentPathForSource(ctx, userKeyBasePath+".pk8") + + if certPropValue == "platform" && userPemPath.Valid() && userKeyPath.Valid() { + mainCert = Certificate{ + Pem: userPemPath.Path(), + Key: userKeyPath.Path(), + } + } else { + mainCert = Certificate{ + Pem: defaultDir.Join(ctx, certPropValue+".x509.pem"), + Key: defaultDir.Join(ctx, certPropValue+".pk8"), + } } } else { pem, key := ctx.Config().DefaultAppCertificate(ctx) diff --git a/scripts/gen_build_prop.py b/scripts/gen_build_prop.py index ac2c6ff7cb26918a7068f49d1de9e73f0e546259..e87c180fb0e2f7543f90e3ad532669ee653725f7 100644 --- a/scripts/gen_build_prop.py +++ b/scripts/gen_build_prop.py @@ -33,6 +33,14 @@ def get_build_variant(product_config): else: return "user" +# Spoof build variant because Whatsapp (and maybe others) +# is checking the "debug" pattern in the Build.DISPLAY variable. +def get_spoofed_build_variant(product_config): + if product_config["Eng"]: + return "eng" + else: + return "user" + def get_build_flavor(product_config): build_flavor = product_config["DeviceProduct"] + "-" + get_build_variant(product_config) if "address" in product_config.get("SanitizeDevice", []) and "_asan" not in build_flavor: @@ -89,6 +97,7 @@ def parse_args(): config["BuildFlavor"] = get_build_flavor(config) config["BuildKeys"] = get_build_keys(config) config["BuildVariant"] = get_build_variant(config) + config["SpoofedBuildVariant"] = get_spoofed_build_variant(config) config["BuildFingerprint"] = args.build_fingerprint_file.read().strip() config["BuildHostname"] = args.build_hostname_file.read().strip() @@ -109,7 +118,7 @@ def parse_args(): # build_desc is human readable strings that describe this build. This has the same info as the # build fingerprint. # e.g. "aosp_cf_x86_64_phone-userdebug VanillaIceCream MAIN eng.20240319.143939 test-keys" - config["BuildDesc"] = f"{config['DeviceProduct']}-{config['BuildVariant']} " \ + config["BuildDesc"] = f"e_{config['DeviceName']}-{config['SpoofedBuildVariant']} " \ f"{config['Platform_version_name']} {config['BuildId']} " \ f"{config['BuildNumber']} {config['BuildVersionTags']}"