summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jiyong Park <jiyong@google.com> 2019-03-22 00:09:26 -0700
committer android-build-merger <android-build-merger@google.com> 2019-03-22 00:09:26 -0700
commitf04c3cc24cfaf86a6e7418d4edca17792d19c808 (patch)
treef7342b79bf72c46ae8ce290399d5d53832bc7508
parent4204e66c4cb78ff1922422fdc6aadd4b346aef71 (diff)
parentebe2b86cbc5837ade3e17d5d86936ceb88d592ea (diff)
Merge ":module syntax support properties in apex_key"
am: ebe2b86cbc Change-Id: Ia2d5e2ae7dd6a8fe8b29bb624105c165f382dd78
-rw-r--r--apex/apex_test.go35
-rw-r--r--apex/key.go31
2 files changed, 56 insertions, 10 deletions
diff --git a/apex/apex_test.go b/apex/apex_test.go
index ac2701f7e..8a2e55af5 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -161,6 +161,8 @@ func testApex(t *testing.T, bp string) *android.TestContext {
"vendor/foo/devkeys/testkey.pem": nil,
"NOTICE": nil,
"custom_notice": nil,
+ "testkey2.avbpubkey": nil,
+ "testkey2.pem": nil,
})
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
android.FailIfErrored(t, errs)
@@ -1194,3 +1196,36 @@ func TestApexInProductPartition(t *testing.T) {
}
}
+
+func TestApexKeyFromOtherModule(t *testing.T) {
+ ctx := testApex(t, `
+ apex_key {
+ name: "myapex.key",
+ public_key: ":my.avbpubkey",
+ private_key: ":my.pem",
+ product_specific: true,
+ }
+
+ filegroup {
+ name: "my.avbpubkey",
+ srcs: ["testkey2.avbpubkey"],
+ }
+
+ filegroup {
+ name: "my.pem",
+ srcs: ["testkey2.pem"],
+ }
+ `)
+
+ apex_key := ctx.ModuleForTests("myapex.key", "android_common").Module().(*apexKey)
+ expected_pubkey := "testkey2.avbpubkey"
+ actual_pubkey := apex_key.public_key_file.String()
+ if actual_pubkey != expected_pubkey {
+ t.Errorf("wrong public key path. expected %q. actual %q", expected_pubkey, actual_pubkey)
+ }
+ expected_privkey := "testkey2.pem"
+ actual_privkey := apex_key.private_key_file.String()
+ if actual_privkey != expected_privkey {
+ t.Errorf("wrong private key path. expected %q. actual %q", expected_privkey, actual_privkey)
+ }
+}
diff --git a/apex/key.go b/apex/key.go
index 07c3105ec..848e8cebc 100644
--- a/apex/key.go
+++ b/apex/key.go
@@ -45,11 +45,11 @@ type apexKey struct {
}
type apexKeyProperties struct {
- // Path to the public key file in avbpubkey format. Installed to the device.
+ // Path or module to the public key file in avbpubkey format. Installed to the device.
// Base name of the file is used as the ID for the key.
- Public_key *string
- // Path to the private key file in pem format. Used to sign APEXs.
- Private_key *string
+ Public_key *string `android:"path"`
+ // Path or module to the private key file in pem format. Used to sign APEXs.
+ Private_key *string `android:"path"`
// Whether this key is installable to one of the partitions. Defualt: true.
Installable *bool
@@ -68,15 +68,26 @@ func (m *apexKey) installable() bool {
}
func (m *apexKey) GenerateAndroidBuildActions(ctx android.ModuleContext) {
- m.public_key_file = ctx.Config().ApexKeyDir(ctx).Join(ctx, String(m.properties.Public_key))
- m.private_key_file = ctx.Config().ApexKeyDir(ctx).Join(ctx, String(m.properties.Private_key))
-
- // If not found, fall back to the local key pairs
- if !android.ExistentPathForSource(ctx, m.public_key_file.String()).Valid() {
+ // If the keys are from other modules (i.e. :module syntax) respect it.
+ // Otherwise, try to locate the key files in the default cert dir or
+ // in the local module dir
+ if android.SrcIsModule(String(m.properties.Public_key)) != "" {
m.public_key_file = android.PathForModuleSrc(ctx, String(m.properties.Public_key))
+ } else {
+ m.public_key_file = ctx.Config().ApexKeyDir(ctx).Join(ctx, String(m.properties.Public_key))
+ // If not found, fall back to the local key pairs
+ if !android.ExistentPathForSource(ctx, m.public_key_file.String()).Valid() {
+ m.public_key_file = android.PathForModuleSrc(ctx, String(m.properties.Public_key))
+ }
}
- if !android.ExistentPathForSource(ctx, m.private_key_file.String()).Valid() {
+
+ if android.SrcIsModule(String(m.properties.Private_key)) != "" {
m.private_key_file = android.PathForModuleSrc(ctx, String(m.properties.Private_key))
+ } else {
+ m.private_key_file = ctx.Config().ApexKeyDir(ctx).Join(ctx, String(m.properties.Private_key))
+ if !android.ExistentPathForSource(ctx, m.private_key_file.String()).Valid() {
+ m.private_key_file = android.PathForModuleSrc(ctx, String(m.properties.Private_key))
+ }
}
pubKeyName := m.public_key_file.Base()[0 : len(m.public_key_file.Base())-len(m.public_key_file.Ext())]