From 90eee02a9aed59bbf7b3e525a17a3d5bc269a104 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Tue, 1 Oct 2019 20:02:42 +0900 Subject: [PATCH] Rename vndk apex according to vndk version VNDK APEX should be named after the version of VNDK libs. For example, if vndk_version is 29, then the apex name should be com.android.vndk.v29. If vndk_version is not set or is 'current', then the platform vndk version is implied. This is done with setting "apex_name" with proper name. Bug: 139774701 Test: m (soong test added) Change-Id: I918252f12ccd351886030fe9139a020d6cf1ff32 --- apex/apex.go | 15 +++++++++++++-- apex/apex_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/apex/apex.go b/apex/apex.go index 220eb0043..556de7444 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -222,12 +222,14 @@ func apexVndkGatherMutator(mctx android.TopDownMutatorContext) { if ab.IsNativeBridgeSupported() { mctx.PropertyErrorf("native_bridge_supported", "%q doesn't support native bridge binary.", mctx.ModuleType()) } - vndkVersion := proptools.StringDefault(ab.vndkProperties.Vndk_version, mctx.DeviceConfig().PlatformVndkVersion()) + + vndkVersion := proptools.String(ab.vndkProperties.Vndk_version) + vndkApexListMutex.Lock() defer vndkApexListMutex.Unlock() vndkApexList := vndkApexList(mctx.Config()) if other, ok := vndkApexList[vndkVersion]; ok { - mctx.PropertyErrorf("vndk_version", "%v is already defined in %q", vndkVersion, other.Name()) + mctx.PropertyErrorf("vndk_version", "%v is already defined in %q", vndkVersion, other.BaseModuleName()) } vndkApexList[vndkVersion] = ab } @@ -1791,6 +1793,15 @@ func vndkApexBundleFactory() android.Module { }{ proptools.StringPtr("both"), }) + + vndkVersion := proptools.StringDefault(bundle.vndkProperties.Vndk_version, "current") + if vndkVersion == "current" { + vndkVersion = ctx.DeviceConfig().PlatformVndkVersion() + bundle.vndkProperties.Vndk_version = proptools.StringPtr(vndkVersion) + } + + // Ensure VNDK APEX mount point is formatted as com.android.vndk.v### + bundle.properties.Apex_name = proptools.StringPtr("com.android.vndk.v" + vndkVersion) }) return bundle } diff --git a/apex/apex_test.go b/apex/apex_test.go index 114d89ff9..b6904c62e 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -1441,6 +1441,37 @@ func TestVndkApexErrorWithDuplicateVersion(t *testing.T) { })) } +func TestVndkApexNameRule(t *testing.T) { + ctx, _ := testApex(t, ` + apex_vndk { + name: "myapex", + key: "myapex.key", + file_contexts: "myapex", + } + apex_vndk { + name: "myapex_v28", + key: "myapex.key", + file_contexts: "myapex", + vndk_version: "28", + } + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + }`) + + assertApexName := func(expected, moduleName string) { + bundle := ctx.ModuleForTests(moduleName, "android_common_"+moduleName).Module().(*apexBundle) + actual := proptools.String(bundle.properties.Apex_name) + if !reflect.DeepEqual(actual, expected) { + t.Errorf("Got '%v', expected '%v'", actual, expected) + } + } + + assertApexName("com.android.vndk.vVER", "myapex") + assertApexName("com.android.vndk.v28", "myapex_v28") +} + func TestVndkApexSkipsNativeBridgeSupportedModules(t *testing.T) { ctx, _ := testApex(t, ` apex_vndk {