diff --git a/apex/apex_test.go b/apex/apex_test.go index 7ae9ed720..e130fccc8 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -7235,12 +7235,13 @@ func TestAppSetBundle(t *testing.T) { ensureContains(t, content, `"compression":{"uncompressed_glob":["apex_payload.img","apex_manifest.*"]}`) s := mod.Rule("apexRule").Args["copy_commands"] copyCmds := regexp.MustCompile(" *&& *").Split(s, -1) - if len(copyCmds) != 3 { - t.Fatalf("Expected 3 commands, got %d in:\n%s", len(copyCmds), s) + if len(copyCmds) != 4 { + t.Fatalf("Expected 4 commands, got %d in:\n%s", len(copyCmds), s) } ensureMatches(t, copyCmds[0], "^rm -rf .*/app/AppSet@TEST.BUILD_ID$") ensureMatches(t, copyCmds[1], "^mkdir -p .*/app/AppSet@TEST.BUILD_ID$") - ensureMatches(t, copyCmds[2], "^unzip .*-d .*/app/AppSet@TEST.BUILD_ID .*/AppSet.zip$") + ensureMatches(t, copyCmds[2], "^cp -f .*/app/AppSet@TEST.BUILD_ID/AppSet.apk$") + ensureMatches(t, copyCmds[3], "^unzip .*-d .*/app/AppSet@TEST.BUILD_ID .*/AppSet.zip$") // Ensure that canned_fs_config has an entry for the app set zip file generateFsRule := mod.Rule("generateFsConfig") diff --git a/apex/builder.go b/apex/builder.go index cb09e35ac..ad8075b61 100644 --- a/apex/builder.go +++ b/apex/builder.go @@ -459,8 +459,13 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { pathOnDevice := filepath.Join("/system", fi.path()) copyCommands = append(copyCommands, "ln -sfn "+pathOnDevice+" "+destPath) } else { + // Copy the file into APEX + copyCommands = append(copyCommands, "cp -f "+fi.builtFile.String()+" "+destPath) + var installedPath android.InstallPath if fi.class == appSet { + // In case of AppSet, we need to copy additional APKs as well. They + // are zipped. So we need to unzip them. copyCommands = append(copyCommands, fmt.Sprintf("unzip -qDD -d %s %s", destPathDir, fi.module.(*java.AndroidAppSet).PackedAdditionalOutputs().String())) @@ -469,7 +474,6 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { fi.stem(), fi.builtFile, fi.module.(*java.AndroidAppSet).PackedAdditionalOutputs()) } } else { - copyCommands = append(copyCommands, "cp -f "+fi.builtFile.String()+" "+destPath) if installSymbolFiles { installedPath = ctx.InstallFile(pathWhenActivated.Join(ctx, fi.installDir), fi.stem(), fi.builtFile) } @@ -1086,6 +1090,9 @@ func (a *apexBundle) buildCannedFsConfig(ctx android.ModuleContext) android.Outp executablePaths = append(executablePaths, filepath.Join(f.installDir, s)) } } else if f.class == appSet { + // base APK + readOnlyPaths = append(readOnlyPaths, pathInApex) + // Additional APKs appSetDirs = append(appSetDirs, f.installDir) appSetFiles[f.installDir] = f.module.(*java.AndroidAppSet).PackedAdditionalOutputs() } else {