Baseline profiles are compiled by profgen tool and the generated ART profile info is packaged in the final apk.
BEGIN_PUBLIC
Internal Change
END_PUBLIC
PiperOrigin-RevId: 452785657
Change-Id: I9ecadfef5dfc992407d2e7ee8be67069235ad8ea
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java
index 1fd43b9..9f4b62c 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java
@@ -117,4 +117,14 @@
+ ruleContext.getRule().getRuleClass()
+ "\"). See http://github.com/bazelbuild/rules_android.");
}
+
+ /* Bazel does not currently support baseline profiles in the final apk. */
+ @Override
+ public Artifact getArtProfileForApk(
+ RuleContext ruleContext,
+ Artifact finalClassesDex,
+ Artifact proguardOutputMap,
+ boolean hasProguardSpecs) {
+ return null;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index 7a3ddc9..158497e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -683,6 +683,9 @@
proguardOutput.addAllToSet(filesBuilder, finalProguardOutputMap);
}
+ Artifact artProfileZip =
+ androidSemantics.getArtProfileForApk(
+ ruleContext, finalClassesDex, proguardOutputMap, hasProguardSpecs);
Artifact unsignedApk =
ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_BINARY_UNSIGNED_APK);
Artifact zipAlignedApk =
@@ -698,21 +701,26 @@
FilesToRunProvider resourceExtractor =
ruleContext.getExecutablePrerequisite("$resource_extractor");
- ApkActionsBuilder.create("apk")
- .setClassesDex(finalClassesDex)
- .addInputZip(resourceApk.getArtifact())
- .setJavaResourceZip(dexingOutput.javaResourceJar, resourceExtractor)
- .addInputZips(nativeLibsAar.toList())
- .setNativeLibs(nativeLibs)
- .setUnsignedApk(unsignedApk)
- .setSignedApk(zipAlignedApk)
- .setSigningKeys(signingKeys)
- .setSigningLineageFile(signingLineage)
- .setSigningKeyRotationMinSdk(keyRotationMinSdk)
- .setV4Signature(v4Signature)
- .setZipalignApk(true)
- .setDeterministicSigning(androidSemantics.deterministicSigning())
- .registerActions(ruleContext);
+ ApkActionsBuilder actionsBuilder =
+ ApkActionsBuilder.create("apk")
+ .setClassesDex(finalClassesDex)
+ .addInputZip(resourceApk.getArtifact())
+ .setJavaResourceZip(dexingOutput.javaResourceJar, resourceExtractor)
+ .addInputZips(nativeLibsAar.toList())
+ .setNativeLibs(nativeLibs)
+ .setUnsignedApk(unsignedApk)
+ .setSignedApk(zipAlignedApk)
+ .setSigningKeys(signingKeys)
+ .setSigningLineageFile(signingLineage)
+ .setSigningKeyRotationMinSdk(keyRotationMinSdk)
+ .setV4Signature(v4Signature)
+ .setZipalignApk(true)
+ .setDeterministicSigning(androidSemantics.deterministicSigning());
+
+ if (artProfileZip != null) {
+ actionsBuilder.addInputZip(artProfileZip);
+ }
+ actionsBuilder.registerActions(ruleContext);
filesBuilder.add(binaryJar);
filesBuilder.add(unsignedApk);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java
index 920c3f4..e3bd025 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java
@@ -109,6 +109,13 @@
/** The artifact for the map that proguard will output. */
Artifact getProguardOutputMap(RuleContext ruleContext) throws InterruptedException;
+ /** The artifact for ART profile information. */
+ Artifact getArtProfileForApk(
+ RuleContext ruleContext,
+ Artifact finalClassesDex,
+ Artifact proguardOutputMap,
+ boolean hasProguardSpecs);
+
boolean postprocessClassesRewritesMap(RuleContext ruleContext);
/** Maybe post process the dex files and proguard output map. */