diff options
Diffstat (limited to 'java')
| -rw-r--r-- | java/aapt2.go | 3 | ||||
| -rw-r--r-- | java/aar.go | 2 | ||||
| -rw-r--r-- | java/app.go | 12 | ||||
| -rw-r--r-- | java/builder.go | 11 | ||||
| -rw-r--r-- | java/config/config.go | 4 | ||||
| -rw-r--r-- | java/dex.go | 4 | ||||
| -rw-r--r-- | java/droiddoc.go | 24 | ||||
| -rw-r--r-- | java/gen.go | 28 | ||||
| -rw-r--r-- | java/java.go | 87 | ||||
| -rw-r--r-- | java/java_test.go | 22 |
10 files changed, 136 insertions, 61 deletions
diff --git a/java/aapt2.go b/java/aapt2.go index 70c75071..5553bfdf 100644 --- a/java/aapt2.go +++ b/java/aapt2.go @@ -111,7 +111,8 @@ func aapt2CompileDirs(ctx android.ModuleContext, flata android.WritablePath, dir var aapt2LinkRule = pctx.AndroidStaticRule("aapt2Link", blueprint.RuleParams{ - Command: `${config.Aapt2Cmd} link -o $out $flags --java $genDir --proguard $proguardOptions ` + + Command: `rm -rf $genDir && ` + + `${config.Aapt2Cmd} link -o $out $flags --java $genDir --proguard $proguardOptions ` + `--output-text-symbols ${rTxt} $inFlags && ` + `${config.SoongZipCmd} -write_if_changed -jar -o $genJar -C $genDir -D $genDir &&` + `${config.ExtractJarPackagesCmd} -i $genJar -o $extraPackages --prefix '--extra-packages '`, diff --git a/java/aar.go b/java/aar.go index 35fb96f7..a06d1916 100644 --- a/java/aar.go +++ b/java/aar.go @@ -250,6 +250,8 @@ func aaptLibs(ctx android.ModuleContext, sdkContext sdkContext) (transitiveStati } switch ctx.OtherModuleDependencyTag(module) { + case instrumentationForTag: + // Nothing, instrumentationForTag is treated as libTag for javac but not for aapt2. case libTag, frameworkResTag: if exportPackage != nil { sharedLibs = append(sharedLibs, exportPackage) diff --git a/java/app.go b/java/app.go index d21b62ae..5d25dcf1 100644 --- a/java/app.go +++ b/java/app.go @@ -318,12 +318,6 @@ type AndroidTest struct { } func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { - if String(a.appTestProperties.Instrumentation_for) != "" { - a.AndroidApp.extraLinkFlags = append(a.AndroidApp.extraLinkFlags, - "--rename-instrumentation-target-package", - String(a.appTestProperties.Instrumentation_for)) - } - a.generateAndroidBuildActions(ctx) a.testConfig = tradefed.AutoGenInstrumentationTestConfig(ctx, a.testProperties.Test_config, a.testProperties.Test_config_template, a.manifestPath) @@ -335,6 +329,12 @@ func (a *AndroidTest) DepsMutator(ctx android.BottomUpMutatorContext) { android.ExtractSourceDeps(ctx, a.testProperties.Test_config_template) android.ExtractSourcesDeps(ctx, a.testProperties.Data) a.AndroidApp.DepsMutator(ctx) + if a.appTestProperties.Instrumentation_for != nil { + // The android_app dependency listed in instrumentation_for needs to be added to the classpath for javac, + // but not added to the aapt2 link includes like a normal android_app or android_library dependency, so + // use instrumentationForTag instead of libTag. + ctx.AddVariationDependencies(nil, instrumentationForTag, String(a.appTestProperties.Instrumentation_for)) + } } func AndroidTestFactory() android.Module { diff --git a/java/builder.go b/java/builder.go index f55a7c79..cefb916d 100644 --- a/java/builder.go +++ b/java/builder.go @@ -399,6 +399,17 @@ func TransformJetifier(ctx android.ModuleContext, outputFile android.WritablePat }) } +func GenerateMainClassManifest(ctx android.ModuleContext, outputFile android.WritablePath, mainClass string) { + ctx.Build(pctx, android.BuildParams{ + Rule: android.WriteFile, + Description: "manifest", + Output: outputFile, + Args: map[string]string{ + "content": "Main-Class: " + mainClass + "\n", + }, + }) +} + type classpath []android.Path func (x *classpath) FormJavaClassPath(optName string) string { diff --git a/java/config/config.go b/java/config/config.go index 85cb588f..d2a8c467 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -27,8 +27,8 @@ import ( var ( pctx = android.NewPackageContext("android/soong/java/config") - DefaultBootclasspathLibraries = []string{"core-oj", "core-libart", "core-simple", "bouncycastle", "conscrypt", "okhttp"} - DefaultSystemModules = "core-system-modules" + DefaultBootclasspathLibraries = []string{"core.platform.api.stubs", "core-lambda-stubs"} + DefaultSystemModules = "core-platform-api-stubs-system-modules" DefaultLibraries = []string{"ext", "framework"} DefaultLambdaStubsLibrary = "core-lambda-stubs" SdkLambdaStubsPath = "prebuilts/sdk/tools/core-lambda-stubs.jar" diff --git a/java/dex.go b/java/dex.go index ce0c18e6..625fb83c 100644 --- a/java/dex.go +++ b/java/dex.go @@ -157,6 +157,8 @@ func (j *Module) r8Flags(ctx android.ModuleContext, flags javaBuilderFlags) (r8F if !Bool(opt.Obfuscate) { r8Flags = append(r8Flags, "-dontobfuscate") } + // TODO(ccross): if this is an instrumentation test of an obfuscated app, use the + // dictionary of the app and move the app from libraryjars to injars. return r8Flags, r8Deps } @@ -171,8 +173,6 @@ func (j *Module) compileDex(ctx android.ModuleContext, flags javaBuilderFlags, outDir := android.PathForModuleOut(ctx, "dex") if useR8 { - // TODO(ccross): if this is an instrumentation test of an obfuscated app, use the - // dictionary of the app and move the app from libraryjars to injars. proguardDictionary := android.PathForModuleOut(ctx, "proguard_dictionary") j.proguardDictionary = proguardDictionary r8Flags, r8Deps := j.r8Flags(ctx, flags) diff --git a/java/droiddoc.go b/java/droiddoc.go index 063f2c1c..fca5fc46 100644 --- a/java/droiddoc.go +++ b/java/droiddoc.go @@ -388,6 +388,7 @@ type droiddocBuilderFlags struct { metalavaStubsFlags string metalavaAnnotationsFlags string + metalavaInclusionAnnotationsFlags string metalavaApiLevelsAnnotationsFlags string metalavaApiToXmlFlags string @@ -1382,7 +1383,6 @@ func (d *Droidstubs) collectStubsFlags(ctx android.ModuleContext, } else { metalavaFlags += " --stubs " + android.PathForModuleOut(ctx, "stubsDir").String() } - return metalavaFlags } @@ -1419,8 +1419,15 @@ func (d *Droidstubs) collectAnnotationsFlags(ctx android.ModuleContext, } }) // TODO(tnorbye): find owners to fix these warnings when annotation was enabled. - flags += " --hide HiddenTypedefConstant --hide SuperfluousPrefix --hide AnnotationExtraction " + flags += " --hide HiddenTypedefConstant --hide SuperfluousPrefix --hide AnnotationExtraction" } + + return flags +} + +func (d *Droidstubs) collectInclusionAnnotationsFlags(ctx android.ModuleContext, + implicits *android.Paths, implicitOutputs *android.WritablePaths) string { + var flags string ctx.VisitDirectDepsWithTag(metalavaMergeInclusionAnnotationsDirTag, func(m android.Module) { if t, ok := m.(*ExportedDroiddocDir); ok { *implicits = append(*implicits, t.deps...) @@ -1599,6 +1606,7 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) { flags.metalavaStubsFlags = d.collectStubsFlags(ctx, &implicitOutputs) flags.metalavaAnnotationsFlags = d.collectAnnotationsFlags(ctx, &implicits, &implicitOutputs) + flags.metalavaInclusionAnnotationsFlags = d.collectInclusionAnnotationsFlags(ctx, &implicits, &implicitOutputs) flags.metalavaApiLevelsAnnotationsFlags = d.collectAPILevelsAnnotationsFlags(ctx, &implicits, &implicitOutputs) flags.metalavaApiToXmlFlags = d.collectApiToXmlFlags(ctx, &implicits, &implicitOutputs) @@ -1610,7 +1618,7 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) { } d.transformMetalava(ctx, implicits, implicitOutputs, javaVersion, flags.bootClasspathArgs, flags.classpathArgs, flags.sourcepathArgs, - flags.metalavaStubsFlags+flags.metalavaAnnotationsFlags+ + flags.metalavaStubsFlags+flags.metalavaAnnotationsFlags+flags.metalavaInclusionAnnotationsFlags+ flags.metalavaApiLevelsAnnotationsFlags+flags.metalavaApiToXmlFlags+" "+d.Javadoc.args) if apiCheckEnabled(d.properties.Check_api.Current, "current") && @@ -1621,8 +1629,9 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) { "check_api.current_removed_api_file") d.checkCurrentApiTimestamp = android.PathForModuleOut(ctx, "check_current_api.timestamp") - opts := d.Javadoc.args + " --check-compatibility:api:current " + apiFile.String() + - " --check-compatibility:removed:current " + removedApiFile.String() + " " + opts := " " + d.Javadoc.args + " --check-compatibility:api:current " + apiFile.String() + + " --check-compatibility:removed:current " + removedApiFile.String() + + flags.metalavaInclusionAnnotationsFlags d.transformCheckApi(ctx, apiFile, removedApiFile, metalavaCheckApiImplicits, javaVersion, flags.bootClasspathArgs, flags.classpathArgs, flags.sourcepathArgs, opts, @@ -1651,8 +1660,9 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) { "check_api.last_released.removed_api_file") d.checkLastReleasedApiTimestamp = android.PathForModuleOut(ctx, "check_last_released_api.timestamp") - opts := d.Javadoc.args + " --check-compatibility:api:released " + apiFile.String() + - " --check-compatibility:removed:released " + removedApiFile.String() + " " + opts := " " + d.Javadoc.args + " --check-compatibility:api:released " + apiFile.String() + + flags.metalavaInclusionAnnotationsFlags + " --check-compatibility:removed:released " + + removedApiFile.String() + " " d.transformCheckApi(ctx, apiFile, removedApiFile, metalavaCheckApiImplicits, javaVersion, flags.bootClasspathArgs, flags.classpathArgs, flags.sourcepathArgs, opts, diff --git a/java/gen.go b/java/gen.go index a9938297..993e6d13 100644 --- a/java/gen.go +++ b/java/gen.go @@ -26,6 +26,7 @@ import ( func init() { pctx.HostBinToolVariable("aidlCmd", "aidl") + pctx.HostBinToolVariable("syspropCmd", "sysprop_java") pctx.SourcePathVariable("logtagsCmd", "build/tools/java-event-log-tags.py") pctx.SourcePathVariable("mergeLogtagsCmd", "build/tools/merge-event-log-tags.py") } @@ -49,6 +50,17 @@ var ( Command: "$mergeLogtagsCmd -o $out $in", CommandDeps: []string{"$mergeLogtagsCmd"}, }) + + sysprop = pctx.AndroidStaticRule("sysprop", + blueprint.RuleParams{ + Command: `rm -rf $out.tmp && mkdir -p $out.tmp && ` + + `$syspropCmd --java-output-dir $out.tmp $in && ` + + `${config.SoongZipCmd} -jar -o $out -C $out.tmp -D $out.tmp && rm -rf $out.tmp`, + CommandDeps: []string{ + "$syspropCmd", + "${config.SoongZipCmd}", + }, + }) ) func genAidl(ctx android.ModuleContext, aidlFile android.Path, aidlFlags string) android.Path { @@ -82,6 +94,19 @@ func genLogtags(ctx android.ModuleContext, logtagsFile android.Path) android.Pat return javaFile } +func genSysprop(ctx android.ModuleContext, syspropFile android.Path) android.Path { + srcJarFile := android.GenPathWithExt(ctx, "sysprop", syspropFile, "srcjar") + + ctx.Build(pctx, android.BuildParams{ + Rule: sysprop, + Description: "sysprop_java " + syspropFile.Rel(), + Output: srcJarFile, + Input: syspropFile, + }) + + return srcJarFile +} + func (j *Module) genSources(ctx android.ModuleContext, srcFiles android.Paths, flags javaBuilderFlags) android.Paths { @@ -99,6 +124,9 @@ func (j *Module) genSources(ctx android.ModuleContext, srcFiles android.Paths, case ".proto": srcJarFile := genProto(ctx, srcFile, flags) outSrcFiles = append(outSrcFiles, srcJarFile) + case ".sysprop": + srcJarFile := genSysprop(ctx, srcFile) + outSrcFiles = append(outSrcFiles, srcJarFile) default: outSrcFiles = append(outSrcFiles, srcFile) } diff --git a/java/java.go b/java/java.go index e5218bb7..f651884c 100644 --- a/java/java.go +++ b/java/java.go @@ -309,6 +309,9 @@ type Module struct { // list of extra progurad flag files extraProguardFlagFiles android.Paths + // manifest file to use instead of properties.Manifest + overrideManifest android.OptionalPath + // list of SDK lib names that this java moudule is exporting exportedSdkLibs []string @@ -368,16 +371,17 @@ type jniDependencyTag struct { } var ( - staticLibTag = dependencyTag{name: "staticlib"} - libTag = dependencyTag{name: "javalib"} - annoTag = dependencyTag{name: "annotation processor"} - bootClasspathTag = dependencyTag{name: "bootclasspath"} - systemModulesTag = dependencyTag{name: "system modules"} - frameworkResTag = dependencyTag{name: "framework-res"} - frameworkApkTag = dependencyTag{name: "framework-apk"} - kotlinStdlibTag = dependencyTag{name: "kotlin-stdlib"} - proguardRaiseTag = dependencyTag{name: "proguard-raise"} - certificateTag = dependencyTag{name: "certificate"} + staticLibTag = dependencyTag{name: "staticlib"} + libTag = dependencyTag{name: "javalib"} + annoTag = dependencyTag{name: "annotation processor"} + bootClasspathTag = dependencyTag{name: "bootclasspath"} + systemModulesTag = dependencyTag{name: "system modules"} + frameworkResTag = dependencyTag{name: "framework-res"} + frameworkApkTag = dependencyTag{name: "framework-apk"} + kotlinStdlibTag = dependencyTag{name: "kotlin-stdlib"} + proguardRaiseTag = dependencyTag{name: "proguard-raise"} + certificateTag = dependencyTag{name: "certificate"} + instrumentationForTag = dependencyTag{name: "instrumentation_for"} ) type sdkDep struct { @@ -721,27 +725,34 @@ const ( javaPlatform ) -func getLinkType(m *Module, name string) linkType { +func getLinkType(m *Module, name string) (ret linkType, stubs bool) { ver := m.sdkVersion() - noStdLibs := Bool(m.properties.No_standard_libs) switch { - case name == "core.current.stubs" || ver == "core_current" || - name == "core.platform.api.stubs" || ver == "core_platform_current" || - noStdLibs || name == "stub-annotations" || name == "private-stub-annotations-jar": - return javaCore - case name == "android_system_stubs_current" || strings.HasPrefix(ver, "system_"): - return javaSystem - case name == "android_test_stubs_current" || strings.HasPrefix(ver, "test_"): - return javaPlatform - case name == "android_stubs_current" || ver == "current": - return javaSdk + case name == "core.current.stubs" || name == "core.platform.api.stubs" || + name == "stub-annotations" || name == "private-stub-annotations-jar" || + name == "core-lambda-stubs": + return javaCore, true + case ver == "core_current" || ver == "core_platform_current": + return javaCore, false + case name == "android_system_stubs_current": + return javaSystem, true + case strings.HasPrefix(ver, "system_"): + return javaSystem, false + case name == "android_test_stubs_current": + return javaSystem, true + case strings.HasPrefix(ver, "test_"): + return javaPlatform, false + case name == "android_stubs_current": + return javaSdk, true + case ver == "current": + return javaSdk, false case ver == "": - return javaPlatform + return javaPlatform, false default: if _, err := strconv.Atoi(ver); err != nil { panic(fmt.Errorf("expected sdk_version to be a number, got %q", ver)) } - return javaSdk + return javaSdk, false } } @@ -750,8 +761,11 @@ func checkLinkType(ctx android.ModuleContext, from *Module, to *Library, tag dep return } - myLinkType := getLinkType(from, ctx.ModuleName()) - otherLinkType := getLinkType(&to.Module, ctx.OtherModuleName(to)) + myLinkType, stubs := getLinkType(from, ctx.ModuleName()) + if stubs { + return + } + otherLinkType, _ := getLinkType(&to.Module, ctx.OtherModuleName(to)) commonMessage := "Adjust sdk_version: property of the source or target module so that target module is built with the same or smaller API set than the source." switch myLinkType { @@ -817,7 +831,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { switch tag { case bootClasspathTag: deps.bootClasspath = append(deps.bootClasspath, dep.HeaderJars()...) - case libTag: + case libTag, instrumentationForTag: deps.classpath = append(deps.classpath, dep.HeaderJars()...) // sdk lib names from dependencies are re-exported j.exportedSdkLibs = append(j.exportedSdkLibs, dep.ExportedSdkLibs()...) @@ -856,7 +870,8 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { case SdkLibraryDependency: switch tag { case libTag: - deps.classpath = append(deps.classpath, dep.HeaderJars(getLinkType(j, ctx.ModuleName()))...) + linkType, _ := getLinkType(j, ctx.ModuleName()) + deps.classpath = append(deps.classpath, dep.HeaderJars(linkType)...) // names of sdk libs that are directly depended are exported j.exportedSdkLibs = append(j.exportedSdkLibs, otherName) default: @@ -1193,8 +1208,8 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path jars = append(jars, deps.staticJars...) jars = append(jars, deps.staticResourceJars...) - var manifest android.OptionalPath - if j.properties.Manifest != nil { + manifest := j.overrideManifest + if !manifest.Valid() && j.properties.Manifest != nil { manifest = android.OptionalPathForPath(ctx.ExpandSource(*j.properties.Manifest, "manifest")) } @@ -1536,6 +1551,9 @@ func TestHostFactory() android.Module { type binaryProperties struct { // installable script to execute the resulting jar Wrapper *string + + // Name of the class containing main to be inserted into the manifest as Main-Class. + Main_class *string } type Binary struct { @@ -1556,6 +1574,15 @@ func (j *Binary) HostToolPath() android.OptionalPath { func (j *Binary) GenerateAndroidBuildActions(ctx android.ModuleContext) { if ctx.Arch().ArchType == android.Common { // Compile the jar + if j.binaryProperties.Main_class != nil { + if j.properties.Manifest != nil { + ctx.PropertyErrorf("main_class", "main_class cannot be used when manifest is set") + } + manifestFile := android.PathForModuleOut(ctx, "manifest.txt") + GenerateMainClassManifest(ctx, manifestFile, String(j.binaryProperties.Main_class)) + j.overrideManifest = android.OptionalPathForPath(manifestFile) + } + j.Library.GenerateAndroidBuildActions(ctx) } else { // Handle the binary wrapper diff --git a/java/java_test.go b/java/java_test.go index 76244f04..86349fe6 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -111,19 +111,14 @@ func testContext(config android.Config, bp string, ctx.Register() extraModules := []string{ - "core-oj", - "core-libart", "core-lambda-stubs", - "core-simple", - "bouncycastle", - "conscrypt", - "okhttp", "framework", "ext", "android_stubs_current", "android_system_stubs_current", "android_test_stubs_current", "core.current.stubs", + "core.platform.api.stubs", "kotlin-stdlib", } @@ -134,7 +129,7 @@ func testContext(config android.Config, bp string, srcs: ["a.java"], no_standard_libs: true, sdk_version: "core_current", - system_modules: "core-system-modules", + system_modules: "core-platform-api-stubs-system-modules", } `, extra) } @@ -148,6 +143,7 @@ func testContext(config android.Config, bp string, systemModules := []string{ "core-system-modules", + "core-platform-api-stubs-system-modules", "android_stubs_current_system_modules", "android_system_stubs_current_system_modules", "android_test_stubs_current_system_modules", @@ -367,15 +363,15 @@ var classpathTestcases = []struct { }{ { name: "default", - bootclasspath: []string{"core-oj", "core-libart", "core-simple", "bouncycastle", "conscrypt", "okhttp"}, - system: "core-system-modules", + bootclasspath: []string{"core.platform.api.stubs", "core-lambda-stubs"}, + system: "core-platform-api-stubs-system-modules", classpath: []string{"ext", "framework"}, }, { name: "blank sdk version", properties: `sdk_version: "",`, - bootclasspath: []string{"core-oj", "core-libart", "core-simple", "bouncycastle", "conscrypt", "okhttp"}, - system: "core-system-modules", + bootclasspath: []string{"core.platform.api.stubs", "core-lambda-stubs"}, + system: "core-platform-api-stubs-system-modules", classpath: []string{"ext", "framework"}, }, { @@ -433,8 +429,8 @@ var classpathTestcases = []struct { { name: "nostdlib system_modules", - properties: `no_standard_libs: true, system_modules: "core-system-modules"`, - system: "core-system-modules", + properties: `no_standard_libs: true, system_modules: "core-platform-api-stubs-system-modules"`, + system: "core-platform-api-stubs-system-modules", bootclasspath: []string{`""`}, classpath: []string{}, }, |
