diff options
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.java | 136 |
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)); + } } |