From 08070932379cd3dafaefe5b546c84ad26cd72951 Mon Sep 17 00:00:00 2001 From: Romain Jobredeaux Date: Tue, 5 Sep 2023 11:44:27 -0700 Subject: [PATCH] Make final_classes_dex_zip nullable. AOSP has a special resource-only apk that does not contain the dex code for its resources and this change enables reusing the apk packaging logic of the native rules while they are being starlarkified PiperOrigin-RevId: 562845132 Change-Id: I6d6716b8c627884f47c22e26dea5eb07513cedb9 --- .../devtools/build/lib/rules/android/AndroidDexInfo.java | 5 +++-- .../build/lib/rules/android/ApkActionsBuilder.java | 3 ++- .../lib/starlarkbuildapi/android/AndroidDexInfoApi.java | 7 +++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDexInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDexInfo.java index 1ff7c113d1856e..10ef9234c87757 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDexInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDexInfo.java @@ -57,6 +57,7 @@ public Artifact getDeployJar() { } @Override + @Nullable public Artifact getFinalClassesDexZip() { return finalClassesDexZip; } @@ -88,14 +89,14 @@ public String getName() { @Override public AndroidDexInfo createInfo( Artifact deployJar, - Artifact finalClassesDexZip, + Object finalClassesDexZip, Object finalProguardOutputMap, Object javaResourceJar) throws EvalException { return new AndroidDexInfo( deployJar, - finalClassesDexZip, + fromNoneable(finalClassesDexZip, Artifact.class), fromNoneable(finalProguardOutputMap, Artifact.class), fromNoneable(javaResourceJar, Artifact.class)); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java index 3a1615b14a23e6..21802e53347a15 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java @@ -77,7 +77,8 @@ public ApkActionsBuilder setNativeLibs(NativeLibs nativeLibs) { @CanIgnoreReturnValue public ApkActionsBuilder setClassesDex(Artifact classesDex) { Preconditions.checkArgument( - classesDex.getFilename().endsWith(".zip") + classesDex == null + || classesDex.getFilename().endsWith(".zip") || classesDex.getFilename().equals("classes.dex")); this.classesDex = classesDex; return this; diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDexInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDexInfoApi.java index 2417c01b553d62..5c94a296fc746a 100644 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDexInfoApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidDexInfoApi.java @@ -44,11 +44,13 @@ public interface AndroidDexInfoApi extends StructApi { structField = true) FileT getDeployJar(); + @Nullable @StarlarkMethod( name = "final_classes_dex_zip", doc = "The zip file containing the final dex classes.", documented = false, - structField = true) + structField = true, + allowReturnNones = true) FileT getFinalClassesDexZip(); @Nullable @@ -94,6 +96,7 @@ interface Provider extends ProviderApi { name = "final_classes_dex_zip", allowedTypes = { @ParamType(type = FileApi.class), + @ParamType(type = NoneType.class), }, named = true, doc = "The zip file containing the final dex classes."), @@ -120,7 +123,7 @@ interface Provider extends ProviderApi { @StarlarkConstructor AndroidDexInfoApi createInfo( FileT deployJar, - FileT finalClassesDexZip, + Object finalClassesDexZip, Object finalProguardOutputMap, Object javaResourceJar) throws EvalException;