Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a41f12a6 authored by Jiyong Park's avatar Jiyong Park
Browse files

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
parent efcdd3b4
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -74,6 +74,10 @@ func (p *Prebuilt) SingleSourcePath(ctx ModuleContext) Path {
	}
}

func (p *Prebuilt) UsePrebuilt() bool {
	return p.properties.UsePrebuilt
}

func InitPrebuiltModule(module PrebuiltInterface, srcs *[]string) {
	p := module.Prebuilt()
	module.AddProperties(&p.properties)
+5 −1
Original line number Diff line number Diff line
@@ -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)
	}
+30 −4
Original line number Diff line number Diff line
@@ -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",