diff --git a/src/BUILD b/src/BUILD index 7c79e6737a7d81..cb4d0bf1d53294 100644 --- a/src/BUILD +++ b/src/BUILD @@ -145,6 +145,7 @@ py_binary( "//third_party/java/j2objc:embedded_tools_srcs", "//third_party/java/jarjar:embedded_tools_srcs", "//third_party/java/jdk/langtools:test-srcs", + "//third_party/java/proguard:embedded_tools", "//third_party/py/concurrent:srcs", "//third_party/py/gflags:srcs", "//third_party/py/six:srcs", diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java index bde6e37421dcd9..d77d04bce569ef 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java @@ -113,6 +113,10 @@ public void setupMockClient(MockToolsConfig config) throws IOException { config.create( "/bazel_tools_workspace/tools/android/emulator/BUILD", Iterables.toArray(createToolsAndroidEmulatorContents(), String.class)); + // Bundled Proguard used by android_sdk_repository + config.create( + "/bazel_tools_workspace/third_party/java/proguard/BUILD", + "exports_files(['proguard'])"); config.create( "/bazel_tools_workspace/tools/genrule/BUILD", "exports_files(['genrule-setup.sh'])"); diff --git a/src/test/shell/bazel/android/android_integration_test.sh b/src/test/shell/bazel/android/android_integration_test.sh index 0f6b8d23c3112d..965626ef6f1c35 100755 --- a/src/test/shell/bazel/android/android_integration_test.sh +++ b/src/test/shell/bazel/android/android_integration_test.sh @@ -214,6 +214,58 @@ function test_allow_custom_manifest_name() { "Failed to build android_binary with custom Android manifest file name" } +function test_proguard() { + create_new_workspace + setup_android_sdk_support + mkdir -p java/com/bin + cat > java/com/bin/BUILD < java/com/bin/AndroidManifest.xml < +EOF + cat > java/com/bin/Bin.java < java/com/bin/NotUsed.java < java/com/bin/Lib.java < java/com/bin/proguard.config <... +# Asserts that actual is not one of the items in expected_list +# Example: assert_not_one_of ( "foo", "bar", "baz" ) actualval +function assert_not_one_of() { + local args=("$@") + local last_arg_index=$((${#args[@]} - 1)) + local actual=${args[last_arg_index]} + unset args[last_arg_index] + for expected_item in "${args[@]}"; do + if [ "$expected_item" = "$actual" ]; then + fail "'${args[@]}' contains '$actual'" + return 1 + fi + done; + + return 0 +} + # Usage: assert_equals # Asserts [ expected = actual ]. function assert_equals() { diff --git a/tools/android/android_sdk_repository_template.bzl b/tools/android/android_sdk_repository_template.bzl index f05a93d2b90f3a..3958045a220090 100644 --- a/tools/android/android_sdk_repository_template.bzl +++ b/tools/android/android_sdk_repository_template.bzl @@ -96,7 +96,7 @@ def create_android_sdk_rules( native.android_sdk( name = "sdk-%d" % api_level, build_tools_version = build_tools_version, - proguard = ":proguard_binary", + proguard = "@bazel_tools//third_party/java/proguard", aapt = select({ ":windows": "build-tools/%s/aapt.exe" % build_tools_directory, ":windows_msvc": "build-tools/%s/aapt.exe" % build_tools_directory, @@ -141,17 +141,6 @@ def create_android_sdk_rules( actual = ":sdk-%d" % default_api_level, ) - native.java_import( - name = "proguard_import", - jars = ["tools/proguard/lib/proguard.jar"] - ) - - native.java_binary( - name = "proguard_binary", - main_class = "proguard.ProGuard", - runtime_deps = [":proguard_import"] - ) - native.java_binary( name = "apksigner", main_class = "com.android.apksigner.ApkSignerTool",