aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-11-09 23:49:15 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-11-10 09:22:59 +0000
commit73fa5f47430439db28c200ffa43caace7dbb5829 (patch)
tree2693bfb753a2e5777d41d5ef30b53a3447973605 /src/main/java
parent1df80e54c3a53efc7f86f7c6da9973c7dd43d5fc (diff)
Adds obfuscated constant string implicit output.
-- MOS_MIGRATED_REVID=138695951
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java34
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")