summaryrefslogtreecommitdiff
path: root/java/java.go
diff options
context:
space:
mode:
author Spandan Das <spandandas@google.com> 2024-10-03 22:39:52 +0000
committer Spandan Das <spandandas@google.com> 2024-10-04 18:10:15 +0000
commite42c5d96f90f64ba9b2d85b2e8e099c1f8ea3f8e (patch)
tree25d671fe6994471c6af0f38412c391f6b3ec002b /java/java.go
parent323253721116cf9bd9f558ae7449494e3cebfcf6 (diff)
Add JNI libs support to device variants of java_binary
This adds jni_libs support back to device variants, which was removed in https://r.android.com/3230584. These will be installed by the two packaging systems in different ways 1. Kati: By being listed in `LOCAL_REQUIRED_MODULES` of the autogenerated Android.mk 2. Soong: Via the`jniInstallTag`, whose `InstallDepNeeded` value is true This CL also makes it an error for a native library to be listed in `required` of a `java_binary(_host)`. Test: m nothing --no-skip-soong-tests Test: Verified that there are no diff in system_intermediates/file_list.txt (device variants) Test: m installclean && m <host_java_bin> ; verified that the jni library is installed in out/host/linux-x86/lib64 (host variants) Bug: 370110572 Change-Id: I6aebc648191ab39f2da15a5f2807d46abab22cb0
Diffstat (limited to 'java/java.go')
-rw-r--r--java/java.go26
1 files changed, 20 insertions, 6 deletions
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())