diff options
author | Jiyong Park <jiyong@google.com> | 2019-04-23 18:00:10 +0900 |
---|---|---|
committer | Jiyong Park <jiyong@google.com> | 2019-04-23 18:03:16 +0900 |
commit | a41f12a6fa05a030b426fe68dc0f5d6203a73c79 (patch) | |
tree | 3cacf82a1dc971788c5c1ac076c934d7693e1cca /apex | |
parent | efcdd3b4bd676dcdffa3f926c8434c213726b749 (diff) | |
download | build_soong-a41f12a6fa05a030b426fe68dc0f5d6203a73c79.tar.gz build_soong-a41f12a6fa05a030b426fe68dc0f5d6203a73c79.tar.bz2 build_soong-a41f12a6fa05a030b426fe68dc0f5d6203a73c79.zip |
Prebuilt APEXes are recoreded in apexkeys.txt
apexkeys.txt now correctly lists prebuilt APEXes with keys specified as
PRESIGNED.
This change also fixes a bug that non-installable APEXes are listed in
the file.
Bug: 131130235
Test: m out/soong/apexkeys.txt and check that
com.android.apex.cts.shim.apex is listed there with PRESIGNED keys.
Change-Id: Ib6d391a82864714743a1cc59cd655bea917b5073
Diffstat (limited to 'apex')
-rw-r--r-- | apex/apex.go | 6 | ||||
-rw-r--r-- | apex/key.go | 34 |
2 files changed, 35 insertions, 5 deletions
diff --git a/apex/apex.go b/apex/apex.go index 004de86c..178927da 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1362,11 +1362,15 @@ func (p *Prebuilt) Srcs() android.Paths { return android.Paths{p.outputApex} } +func (p *Prebuilt) InstallFilename() string { + return proptools.StringDefault(p.properties.Filename, p.BaseModuleName()+imageApexSuffix) +} + func (p *Prebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) { // TODO(jungjw): Check the key validity. p.inputApex = p.Prebuilt().SingleSourcePath(ctx) p.installDir = android.PathForModuleInstall(ctx, "apex") - p.installFilename = proptools.StringDefault(p.properties.Filename, ctx.ModuleName()+imageApexSuffix) + p.installFilename = p.InstallFilename() if !strings.HasSuffix(p.installFilename, imageApexSuffix) { ctx.ModuleErrorf("filename should end in %s for prebuilt_apex", imageApexSuffix) } diff --git a/apex/key.go b/apex/key.go index a627e4bc..6ee3dca3 100644 --- a/apex/key.go +++ b/apex/key.go @@ -16,6 +16,7 @@ package apex import ( "fmt" + "sort" "strings" "android/soong/android" @@ -106,12 +107,31 @@ type apexKeysText struct { func (s *apexKeysText) GenerateBuildActions(ctx android.SingletonContext) { s.output = android.PathForOutput(ctx, "apexkeys.txt") - var filecontent strings.Builder + apexModulesMap := make(map[string]android.Module) ctx.VisitAllModules(func(module android.Module) { - if m, ok := module.(android.Module); ok && !m.Enabled() { - return + if m, ok := module.(*apexBundle); ok && m.Enabled() && m.installable() { + apexModulesMap[m.Name()] = m } + }) + + // Find prebuilts and let them override apexBundle if they are preferred + ctx.VisitAllModules(func(module android.Module) { + if m, ok := module.(*Prebuilt); ok && m.Enabled() && m.installable() && + m.Prebuilt().UsePrebuilt() { + apexModulesMap[m.BaseModuleName()] = m + } + }) + + // iterating over map does not give consistent ordering in golang + var moduleNames []string + for key, _ := range apexModulesMap { + moduleNames = append(moduleNames, key) + } + sort.Strings(moduleNames) + var filecontent strings.Builder + for _, key := range moduleNames { + module := apexModulesMap[key] if m, ok := module.(*apexBundle); ok { fmt.Fprintf(&filecontent, "name=%q public_key=%q private_key=%q container_certificate=%q container_private_key=%q\\n", @@ -120,8 +140,14 @@ func (s *apexKeysText) GenerateBuildActions(ctx android.SingletonContext) { m.private_key_file.String(), m.container_certificate_file.String(), m.container_private_key_file.String()) + } else if m, ok := module.(*Prebuilt); ok { + fmt.Fprintf(&filecontent, + "name=%q public_key=%q private_key=%q container_certificate=%q container_private_key=%q\\n", + m.InstallFilename(), + "PRESIGNED", "PRESIGNED", "PRESIGNED", "PRESIGNED") } - }) + } + ctx.Build(pctx, android.BuildParams{ Rule: android.WriteFile, Description: "apexkeys.txt", |