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

Commit 9d677206 authored by Jiyong Park's avatar Jiyong Park
Browse files

have a per-module switch to turn the symlinking optimizaiton off

The optimization is confusing syshealth because the modules will use
more memory when they are switched to the prebuilt (unbundled) or
updated via Play.

Let's have a per-module switch to control the behavior and turn it on
only for non-updatable modules like ART.

Bug: 149805758
Test: m
Change-Id: Ieb842c47f31f3b06e403b1e1f9e463c3e5524107
parent 7c9662a8
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -1275,6 +1275,11 @@ type apexBundleProperties struct {
	Legacy_android10_support *bool

	IsCoverageVariant bool `blueprint:"mutated"`

	// Whether this APEX is considered updatable or not. When set to true, this will enforce additional
	// rules for making sure that the APEX is truely updatable. This will also disable the size optimizations
	// like symlinking to the system libs. Default is false.
	Updatable *bool
}

type apexTargetBundleProperties struct {
@@ -2312,6 +2317,12 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
		a.installable() &&
		!proptools.Bool(a.properties.Use_vendor)

	// We don't need the optimization for updatable APEXes, as it might give false signal
	// to the system health when the APEXes are still bundled (b/149805758)
	if proptools.Bool(a.properties.Updatable) && a.properties.ApexType == imageApex {
		a.linkToSystemLib = false
	}

	// prepare apex_manifest.json
	a.buildManifest(ctx, provideNativeLibs, requireNativeLibs)

+26 −0
Original line number Diff line number Diff line
@@ -223,6 +223,7 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr
		"apex_manifest.json":                                  nil,
		"AndroidManifest.xml":                                 nil,
		"system/sepolicy/apex/myapex-file_contexts":           nil,
		"system/sepolicy/apex/myapex.updatable-file_contexts": nil,
		"system/sepolicy/apex/myapex2-file_contexts":          nil,
		"system/sepolicy/apex/otherapex-file_contexts":        nil,
		"system/sepolicy/apex/commonapex-file_contexts":       nil,
@@ -3598,6 +3599,14 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
			java_libs: ["myjar"],
		}

		apex {
			name: "myapex.updatable",
			key: "myapex.key",
			native_shared_libs: ["mylib"],
			java_libs: ["myjar"],
			updatable: true,
		}

		apex_key {
			name: "myapex.key",
			public_key: "testkey.avbpubkey",
@@ -3612,6 +3621,7 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
			stl: "none",
			apex_available: [
				"myapex",
				"myapex.updatable",
				"//apex_available:platform",
			],
		}
@@ -3623,6 +3633,7 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
			stl: "none",
			apex_available: [
				"myapex",
				"myapex.updatable",
				"//apex_available:platform",
			],
		}
@@ -3635,6 +3646,7 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
			libs: ["myotherjar"],
			apex_available: [
				"myapex",
				"myapex.updatable",
				"//apex_available:platform",
			],
		}
@@ -3646,6 +3658,7 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
			system_modules: "none",
			apex_available: [
				"myapex",
				"myapex.updatable",
				"//apex_available:platform",
			],
		}
@@ -3675,17 +3688,30 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
		t.Errorf("%q is not found", file)
	}

	// For unbundled build, symlink shouldn't exist regardless of whether an APEX
	// is updatable or not
	ctx, _ := testApex(t, bp, withUnbundledBuild)
	files := getFiles(t, ctx, "myapex", "android_common_myapex_image")
	ensureRealfileExists(t, files, "javalib/myjar.jar")
	ensureRealfileExists(t, files, "lib64/mylib.so")
	ensureRealfileExists(t, files, "lib64/myotherlib.so")

	files = getFiles(t, ctx, "myapex.updatable", "android_common_myapex.updatable_image")
	ensureRealfileExists(t, files, "javalib/myjar.jar")
	ensureRealfileExists(t, files, "lib64/mylib.so")
	ensureRealfileExists(t, files, "lib64/myotherlib.so")

	// For bundled build, symlink to the system for the non-updatable APEXes only
	ctx, _ = testApex(t, bp)
	files = getFiles(t, ctx, "myapex", "android_common_myapex_image")
	ensureRealfileExists(t, files, "javalib/myjar.jar")
	ensureRealfileExists(t, files, "lib64/mylib.so")
	ensureSymlinkExists(t, files, "lib64/myotherlib.so") // this is symlink

	files = getFiles(t, ctx, "myapex.updatable", "android_common_myapex.updatable_image")
	ensureRealfileExists(t, files, "javalib/myjar.jar")
	ensureRealfileExists(t, files, "lib64/mylib.so")
	ensureRealfileExists(t, files, "lib64/myotherlib.so") // this is a real file
}

func TestMain(m *testing.M) {