diff options
-rw-r--r-- | apex/apex_test.go | 42 | ||||
-rw-r--r-- | apex/key.go | 10 |
2 files changed, 48 insertions, 4 deletions
diff --git a/apex/apex_test.go b/apex/apex_test.go index 66f07259..5b767ef7 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -827,7 +827,7 @@ func TestKeys(t *testing.T) { `) // check the APEX keys - keys := ctx.ModuleForTests("myapex.key", "").Module().(*apexKey) + keys := ctx.ModuleForTests("myapex.key", "android_common").Module().(*apexKey) if keys.public_key_file.String() != "vendor/foo/devkeys/testkey.avbpubkey" { t.Errorf("public key %q is not %q", keys.public_key_file.String(), @@ -1144,3 +1144,43 @@ func TestApexWithShBinary(t *testing.T) { ensureContains(t, copyCmds, "image.apex/bin/script/myscript.sh") } + +func TestApexInProductPartition(t *testing.T) { + ctx := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + native_shared_libs: ["mylib"], + product_specific: true, + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + product_specific: true, + } + + cc_library { + name: "mylib", + srcs: ["mylib.cpp"], + system_shared_libs: [], + stl: "none", + } + `) + + apex := ctx.ModuleForTests("myapex", "android_common_myapex").Module().(*apexBundle) + expected := "target/product/test_device/product/apex" + actual := apex.installDir.RelPathString() + if actual != expected { + t.Errorf("wrong install path. expected %q. actual %q", expected, actual) + } + + apex_key := ctx.ModuleForTests("myapex.key", "android_common").Module().(*apexKey) + expected = "target/product/test_device/product/etc/security/apex" + actual = apex_key.installDir.RelPathString() + if actual != expected { + t.Errorf("wrong install path. expected %q. actual %q", expected, actual) + } + +} diff --git a/apex/key.go b/apex/key.go index 5d7c2fa3..07c3105e 100644 --- a/apex/key.go +++ b/apex/key.go @@ -17,6 +17,7 @@ package apex import ( "fmt" "io" + "path/filepath" "strings" "android/soong/android" @@ -38,6 +39,7 @@ type apexKey struct { public_key_file android.Path private_key_file android.Path + installDir android.OutputPath keyName string } @@ -56,7 +58,8 @@ type apexKeyProperties struct { func apexKeyFactory() android.Module { module := &apexKey{} module.AddProperties(&module.properties) - android.InitAndroidModule(module) + // This module is device-only + android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon) return module } @@ -86,8 +89,9 @@ func (m *apexKey) GenerateAndroidBuildActions(ctx android.ModuleContext) { } m.keyName = pubKeyName + m.installDir = android.PathForModuleInstall(ctx, "etc/security/apex") if m.installable() { - ctx.InstallFile(android.PathForModuleInstall(ctx, "etc/security/apex"), m.keyName, m.public_key_file) + ctx.InstallFile(m.installDir, m.keyName, m.public_key_file) } } @@ -97,7 +101,7 @@ func (m *apexKey) AndroidMk() android.AndroidMkData { OutputFile: android.OptionalPathForPath(m.public_key_file), Extra: []android.AndroidMkExtraFunc{ func(w io.Writer, outputFile android.Path) { - fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", "$(TARGET_OUT)/etc/security/apex") + fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", filepath.Join("$(OUT_DIR)", m.installDir.RelPathString())) fmt.Fprintln(w, "LOCAL_INSTALLED_MODULE_STEM :=", m.keyName) fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE :=", !m.installable()) }, |