diff options
author | Googler <noreply@google.com> | 2016-11-09 23:49:15 +0000 |
---|---|---|
committer | Klaus Aehlig <aehlig@google.com> | 2016-11-10 09:22:59 +0000 |
commit | 73fa5f47430439db28c200ffa43caace7dbb5829 (patch) | |
tree | 2693bfb753a2e5777d41d5ef30b53a3447973605 /src/main/java | |
parent | 1df80e54c3a53efc7f86f7c6da9973c7dd43d5fc (diff) |
Adds obfuscated constant string implicit output.
--
MOS_MIGRATED_REVID=138695951
Diffstat (limited to 'src/main/java')
4 files changed, 43 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java index 0d7217f1a0..58ea07a541 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java @@ -521,4 +521,10 @@ public class BazelJavaSemantics implements JavaSemantics { throws InterruptedException { return null; } + + @Override + public Artifact getObfuscatedConstantStringMap(RuleContext ruleContext) + throws InterruptedException { + 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 06f4133631..118228a740 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 @@ -1066,7 +1066,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { optMode == JavaOptimizationMode.LEGACY ? "without proguard_specs" : "in optimization mode " + optMode))); - return new ProguardOutput(deployJarArtifact, null, null, null, null, null); + return new ProguardOutput(deployJarArtifact, null, null, null, null, null, null); } /** Returns {@code true} if resource shrinking should be performed. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java index a1de020481..0e45fbbf90 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java @@ -423,4 +423,6 @@ public interface JavaSemantics { JavaRuleOutputJarsProvider.Builder javaRuleOutputJarsProviderBuilder, JavaSourceJarsProvider.Builder javaSourceJarsProviderBuilder) throws InterruptedException; + + Artifact getObfuscatedConstantStringMap(RuleContext ruleContext) throws InterruptedException; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java index 22e7cfde8d..3cc7776f3c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java @@ -54,6 +54,7 @@ public abstract class ProguardHelper { @Nullable private final Artifact protoMapping; @Nullable private final Artifact seeds; @Nullable private final Artifact usage; + @Nullable private final Artifact constantStringObfuscatedMapping; private final Artifact config; public ProguardOutput(Artifact outputJar, @@ -61,12 +62,14 @@ public abstract class ProguardHelper { @Nullable Artifact protoMapping, @Nullable Artifact seeds, @Nullable Artifact usage, + @Nullable Artifact constantStringObfuscatedMapping, Artifact config) { this.outputJar = checkNotNull(outputJar); this.mapping = mapping; this.protoMapping = protoMapping; this.seeds = seeds; this.usage = usage; + this.constantStringObfuscatedMapping = constantStringObfuscatedMapping; this.config = config; } @@ -85,6 +88,11 @@ public abstract class ProguardHelper { } @Nullable + public Artifact getConstantStringObfuscatedMapping() { + return constantStringObfuscatedMapping; + } + + @Nullable public Artifact getSeeds() { return seeds; } @@ -107,6 +115,9 @@ public abstract class ProguardHelper { if (protoMapping != null) { filesBuilder.add(protoMapping); } + if (constantStringObfuscatedMapping != null) { + filesBuilder.add(constantStringObfuscatedMapping); + } if (seeds != null) { filesBuilder.add(seeds); } @@ -279,6 +290,11 @@ public abstract class ProguardHelper { && rule.get("proguard_generate_mapping", Type.BOOLEAN); } + public static final boolean genObfuscatedConstantStringMap(AttributeMap rule) { + return rule.has("proguard_generate_obfuscated_constant_string_mapping", Type.BOOLEAN) + && rule.get("proguard_generate_obfuscated_constant_string_mapping", Type.BOOLEAN); + } + public static ProguardOutput getProguardOutputs( Artifact outputJar, @Nullable Artifact proguardSeeds, @@ -291,6 +307,8 @@ public abstract class ProguardHelper { Artifact proguardOutputMap = null; Artifact proguardOutputProtoMap = null; + Artifact proguardConstantStringMap = null; + if (mappingRequested || optMode.alwaysGenerateOutputMapping()) { // TODO(bazel-team): Verify that proguard spec files don't contain -printmapping directions // which this -printmapping command line flag will override. @@ -299,6 +317,10 @@ public abstract class ProguardHelper { proguardOutputProtoMap = semantics.getProtoMapping(ruleContext); } + if (genObfuscatedConstantStringMap(ruleContext.attributes())) { + proguardConstantStringMap = semantics.getObfuscatedConstantStringMap(ruleContext); + } + Artifact proguardConfigOutput = ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_PROGUARD_CONFIG); @@ -308,6 +330,7 @@ public abstract class ProguardHelper { proguardOutputProtoMap, proguardSeeds, proguardUsage, + proguardConstantStringMap, proguardConfigOutput); } @@ -360,6 +383,7 @@ public abstract class ProguardHelper { output.getProtoMapping(), output.getSeeds(), output.getUsage(), + output.getConstantStringObfuscatedMapping(), output.getConfig()) .setProgressMessage("Trimming binary with Proguard") .addOutput(proguardOutputJar); @@ -381,6 +405,7 @@ public abstract class ProguardHelper { /* proguardOutputProtoMap */ null, /* proguardSeeds */ null, /* proguardUsage */ null, + /* constantStringObfuscatedMapping */ null, /* proguardConfigOutput */ null) .setProgressMessage("Trimming binary with Proguard: Verification/Shrinking Pass") .addArgument("-runtype INITIAL") @@ -403,6 +428,7 @@ public abstract class ProguardHelper { /* proguardOutputProtoMap */ null, /* proguardSeeds */ null, /* proguardUsage */ null, + /* constantStringObfuscatedMapping */ null, /* proguardConfigOutput */ null) .setProgressMessage("Trimming binary with Proguard: Optimization Pass " + (i + 1)) .addArgument("-runtype OPTIMIZATION") @@ -425,6 +451,7 @@ public abstract class ProguardHelper { output.getProtoMapping(), output.getSeeds(), output.getUsage(), + output.getConstantStringObfuscatedMapping(), output.getConfig()) .setProgressMessage("Trimming binary with Proguard: Obfuscation and Final Ouput Pass") .addArgument("-runtype FINAL") @@ -449,6 +476,7 @@ public abstract class ProguardHelper { @Nullable Artifact proguardOutputProtoMap, @Nullable Artifact proguardSeeds, @Nullable Artifact proguardUsage, + @Nullable Artifact constantStringObfuscatedMapping, @Nullable Artifact proguardConfigOutput) { Builder builder = new SpawnAction.Builder() @@ -495,6 +523,12 @@ public abstract class ProguardHelper { .addOutputArgument(proguardOutputProtoMap); } + if (constantStringObfuscatedMapping != null) { + builder + .addArgument("-obfuscatedconstantstringoutputfile") + .addOutputArgument(constantStringObfuscatedMapping); + } + if (proguardSeeds != null) { builder .addArgument("-printseeds") |