diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/aar.go | 6 | ||||
-rw-r--r-- | java/androidmk.go | 1 | ||||
-rw-r--r-- | java/base.go | 10 | ||||
-rw-r--r-- | java/java.go | 26 | ||||
-rw-r--r-- | java/java_test.go | 4 | ||||
-rw-r--r-- | java/sdk_library.go | 16 |
6 files changed, 35 insertions, 28 deletions
diff --git a/java/aar.go b/java/aar.go index 7d73b03e4..41cc24a0d 100644 --- a/java/aar.go +++ b/java/aar.go @@ -483,9 +483,9 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio } linkFlags = append(linkFlags, "--no-static-lib-packages") - if a.isLibrary && a.useResourceProcessorBusyBox(ctx) { - // When building an android_library using ResourceProcessorBusyBox pass --merge-only to skip resource - // references validation until the final app link step when all static libraries are present. + if a.isLibrary { + // Pass --merge-only to skip resource references validation until the final + // app link step when when all static libraries are present. linkFlags = append(linkFlags, "--merge-only") } diff --git a/java/androidmk.go b/java/androidmk.go index 0539d25aa..2dff6cd9f 100644 --- a/java/androidmk.go +++ b/java/androidmk.go @@ -313,6 +313,7 @@ func (binary *Binary) AndroidMkEntries() []android.AndroidMkEntries { ExtraEntries: []android.AndroidMkExtraEntriesFunc{ func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) { entries.SetBool("LOCAL_STRIP_MODULE", false) + entries.AddStrings("LOCAL_REQUIRED_MODULES", binary.androidMkNamesOfJniLibs...) }, }, ExtraFooters: []android.AndroidMkExtraFootersFunc{ diff --git a/java/base.go b/java/base.go index fc21c44e5..7a957350a 100644 --- a/java/base.go +++ b/java/base.go @@ -1628,7 +1628,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath if j.ravenizer.enabled { ravenizerInput := outputFile - ravenizerOutput := android.PathForModuleOut(ctx, "ravenizer", jarName) + ravenizerOutput := android.PathForModuleOut(ctx, "ravenizer", "", jarName) ravenizerArgs := "" if proptools.Bool(j.properties.Ravenizer.Strip_mockito) { ravenizerArgs = "--strip-mockito" @@ -1637,6 +1637,14 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath outputFile = ravenizerOutput localImplementationJars = android.Paths{ravenizerOutput} completeStaticLibsImplementationJars = android.NewDepSet(android.PREORDER, localImplementationJars, nil) + if combinedResourceJar != nil { + ravenizerInput = combinedResourceJar + ravenizerOutput = android.PathForModuleOut(ctx, "ravenizer", "resources", jarName) + TransformRavenizer(ctx, ravenizerOutput, ravenizerInput, ravenizerArgs) + combinedResourceJar = ravenizerOutput + localResourceJars = android.Paths{ravenizerOutput} + completeStaticLibsResourceJars = android.NewDepSet(android.PREORDER, localResourceJars, nil) + } } if j.shouldApiMapper() { diff --git a/java/java.go b/java/java.go index 661422b54..018850fef 100644 --- a/java/java.go +++ b/java/java.go @@ -1795,8 +1795,7 @@ type binaryProperties struct { // Name of the class containing main to be inserted into the manifest as Main-Class. Main_class *string - // Names of modules containing JNI libraries that should be installed alongside the host - // variant of the binary. + // Names of modules containing JNI libraries that should be installed alongside the binary. Jni_libs []string `android:"arch_variant"` } @@ -1809,6 +1808,8 @@ type Binary struct { wrapperFile android.Path binaryFile android.InstallPath + + androidMkNamesOfJniLibs []string } func (j *Binary) HostToolPath() android.OptionalPath { @@ -1880,6 +1881,21 @@ func (j *Binary) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.ModuleName()+ext, j.wrapperFile) setOutputFiles(ctx, j.Library.Module) + + // Set the jniLibs of this binary. + // These will be added to `LOCAL_REQUIRED_MODULES`, and the kati packaging system will + // install these alongside the java binary. + ctx.VisitDirectDepsWithTag(jniInstallTag, func(jni android.Module) { + // Use the BaseModuleName of the dependency (without any prebuilt_ prefix) + bmn, _ := jni.(interface{ BaseModuleName() string }) + j.androidMkNamesOfJniLibs = append(j.androidMkNamesOfJniLibs, bmn.BaseModuleName()+":"+jni.Target().Arch.ArchType.Bitness()) + }) + // Check that native libraries are not listed in `required`. Prompt users to use `jni_libs` instead. + ctx.VisitDirectDepsWithTag(android.RequiredDepTag, func(dep android.Module) { + if _, hasSharedLibraryInfo := android.OtherModuleProvider(ctx, dep, cc.SharedLibraryInfoProvider); hasSharedLibraryInfo { + ctx.ModuleErrorf("cc_library %s is no longer supported in `required` of java_binary modules. Please use jni_libs instead.", dep.Name()) + } + }) } } @@ -1888,11 +1904,9 @@ func (j *Binary) DepsMutator(ctx android.BottomUpMutatorContext) { j.deps(ctx) } // These dependencies ensure the installation rules will install the jar file when the - // wrapper is installed, and the jni libraries on host when the wrapper is installed. - if ctx.Arch().ArchType != android.Common && ctx.Os().Class == android.Host { - ctx.AddVariationDependencies(nil, jniInstallTag, j.binaryProperties.Jni_libs...) - } + // wrapper is installed, and the jni libraries when the wrapper is installed. if ctx.Arch().ArchType != android.Common { + ctx.AddVariationDependencies(nil, jniInstallTag, j.binaryProperties.Jni_libs...) ctx.AddVariationDependencies( []blueprint.Variation{{Mutator: "arch", Variation: android.CommonArch.String()}}, binaryInstallTag, ctx.ModuleName()) diff --git a/java/java_test.go b/java/java_test.go index db154ce98..24dabdb10 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -3102,7 +3102,7 @@ func assertTestOnlyAndTopLevel(t *testing.T, ctx *android.TestResult, expectedTe } } -// Test that a dependency edge is created to the "first" variant of a native library listed in `required` of java_binary +// Test that a dependency edge is created to the matching variant of a native library listed in `jni_libs` of java_binary func TestNativeRequiredDepOfJavaBinary(t *testing.T) { findDepsOfModule := func(ctx *android.TestContext, module android.Module, depName string) []blueprint.Module { var ret []blueprint.Module @@ -3118,7 +3118,7 @@ func TestNativeRequiredDepOfJavaBinary(t *testing.T) { java_binary { name: "myjavabin", main_class: "com.android.MyJava", - required: ["mynativelib"], + jni_libs: ["mynativelib"], } cc_library_shared { name: "mynativelib", diff --git a/java/sdk_library.go b/java/sdk_library.go index f30877258..dfbde0e54 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -2481,19 +2481,3 @@ func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberCo propertySet.AddProperty("doctag_files", dests) } } - -// TODO(b/358613520): This can be removed when modules are no longer allowed to depend on the top-level library. -func (s *SdkLibrary) IDEInfo(ctx android.BaseModuleContext, dpInfo *android.IdeInfo) { - s.Library.IDEInfo(ctx, dpInfo) - if s.implLibraryModule != nil { - dpInfo.Deps = append(dpInfo.Deps, s.implLibraryModule.Name()) - } else { - // This java_sdk_library does not have an implementation (it sets `api_only` to true). - // Examples of this are `art.module.intra.core.api` (IntraCore api surface). - // Return the "public" stubs for these. - stubPaths := s.findClosestScopePath(apiScopePublic) - if len(stubPaths.stubsHeaderPath) > 0 { - dpInfo.Jars = append(dpInfo.Jars, stubPaths.stubsHeaderPath[0].String()) - } - } -} |