aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
index a7c1a36c30..a64f633f2b 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
@@ -3050,4 +3050,140 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
assertThat(getConfiguredTarget("//java/com/google/android/foo:foo")).isNotNull();
assertNoEvents();
}
+
+ @Test
+ public void testAapt2WithoutAndroidSdk() throws Exception {
+ checkError(
+ "java/a",
+ "a",
+ "aapt2 processing requested but not available on the android_sdk",
+ "android_binary(",
+ " name = 'a',",
+ " srcs = ['A.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " resource_files = [ 'res/values/values.xml' ], ",
+ " aapt_version = 'aapt2'",
+ ")");
+ }
+
+ @Test
+ public void testAapt2FlagWithoutAndroidSdk() throws Exception {
+ useConfiguration("--android_aapt=aapt2");
+ checkError(
+ "java/a",
+ "a",
+ "aapt2 processing requested but not available on the android_sdk",
+ "android_binary(",
+ " name = 'a',",
+ " srcs = ['A.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " resource_files = [ 'res/values/values.xml' ], ",
+ ")");
+ }
+
+ @Test
+ public void testAapt2WithAndroidSdk() throws Exception {
+ scratch.file(
+ "sdk/BUILD",
+ "android_sdk(",
+ " name = 'sdk',",
+ " aapt = 'aapt',",
+ " aapt2 = 'aapt2',",
+ " adb = 'adb',",
+ " aidl = 'aidl',",
+ " android_jar = 'android.jar',",
+ " annotations_jar = 'annotations_jar',",
+ " apksigner = 'apksigner',",
+ " dx = 'dx',",
+ " framework_aidl = 'framework_aidl',",
+ " main_dex_classes = 'main_dex_classes',",
+ " main_dex_list_creator = 'main_dex_list_creator',",
+ " proguard = 'proguard',",
+ " shrinked_android_jar = 'shrinked_android_jar',",
+ " zipalign = 'zipalign',",
+ " resource_extractor = 'resource_extractor')");
+
+ scratch.file(
+ "java/a/BUILD",
+ "android_binary(",
+ " name = 'a',",
+ " srcs = ['A.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " resource_files = [ 'res/values/values.xml' ], ",
+ " aapt_version = 'aapt2'",
+ ")");
+
+ useConfiguration("--android_sdk=//sdk:sdk");
+ ConfiguredTarget a = getConfiguredTarget("//java/a:a");
+ Artifact apk = getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_RESOURCES_APK);
+
+ SpawnAction apkAction = getGeneratingSpawnAction(apk);
+ assertThat(apkAction.getArguments())
+ .containsAllOf("--aapt2", "sdk/aapt2", "--tool", "AAPT2_PACKAGE");
+ }
+
+ @Test
+ public void testAapt2WithAndroidSdkAndDependencies() throws Exception {
+ scratch.file(
+ "sdk/BUILD",
+ "android_sdk(",
+ " name = 'sdk',",
+ " aapt = 'aapt',",
+ " aapt2 = 'aapt2',",
+ " adb = 'adb',",
+ " aidl = 'aidl',",
+ " android_jar = 'android.jar',",
+ " annotations_jar = 'annotations_jar',",
+ " apksigner = 'apksigner',",
+ " dx = 'dx',",
+ " framework_aidl = 'framework_aidl',",
+ " main_dex_classes = 'main_dex_classes',",
+ " main_dex_list_creator = 'main_dex_list_creator',",
+ " proguard = 'proguard',",
+ " shrinked_android_jar = 'shrinked_android_jar',",
+ " zipalign = 'zipalign',",
+ " resource_extractor = 'resource_extractor')");
+
+ scratch.file(
+ "java/b/BUILD",
+ "android_library(",
+ " name = 'b',",
+ " srcs = ['B.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " resource_files = [ 'res/values/values.xml' ], ",
+ ")");
+
+ scratch.file(
+ "java/a/BUILD",
+ "android_binary(",
+ " name = 'a',",
+ " srcs = ['A.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " deps = [ '//java/b:b' ],",
+ " resource_files = [ 'res/values/values.xml' ], ",
+ " aapt_version = 'aapt2'",
+ ")");
+
+ useConfiguration("--android_sdk=//sdk:sdk");
+ ConfiguredTarget a = getConfiguredTarget("//java/a:a");
+ ConfiguredTarget b = getDirectPrerequisite(a, "//java/b:b");
+
+ Artifact classJar =
+ getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR);
+ Artifact rTxt = getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_R_TXT);
+ Artifact apk = getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_RESOURCES_APK);
+
+ SpawnAction apkAction = getGeneratingSpawnAction(apk);
+ assertThat(apkAction.getArguments())
+ .containsAllOf("--aapt2", "sdk/aapt2", "--tool", "AAPT2_PACKAGE");
+
+ assertThat(apkAction.getInputs())
+ .contains(
+ getImplicitOutputArtifact(b, AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_LIBRARY_APK));
+
+ SpawnAction classAction = getGeneratingSpawnAction(classJar);
+ assertThat(classAction.getInputs())
+ .containsAllOf(
+ rTxt, getImplicitOutputArtifact(b, AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_R_TXT));
+ }
}