aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com
diff options
context:
space:
mode:
authorGravatar corysmith <corysmith@google.com>2018-07-18 14:22:06 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-18 14:23:42 -0700
commit01630833a157054064ab3beab074c4e73f57c185 (patch)
tree380e7c33a86523b3a48593f9a761ff48284d665b /src/test/java/com
parent34fd09d89918e33d6cde522f8d4e4fc075004343 (diff)
Enable aapt2 for aar_import by adding the AndroidConfiguration fragment.
RELNOTES: Fixed compatibility with aar_import when using aapt2. AAPT2 is now supported for Android app builds without resource shrinking. To use it, pass the `--android_aapt=aapt2` flag or define android_binary.aapt_version=aapt2. PiperOrigin-RevId: 205136160
Diffstat (limited to 'src/test/java/com')
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java122
1 files changed, 90 insertions, 32 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
index b94c2e3025..be9889c848 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
@@ -18,6 +18,7 @@ import static com.google.common.truth.Truth.assertThat;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
+import com.google.common.truth.Truth;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.CommandLineExpansionException;
@@ -48,9 +49,27 @@ import org.junit.runners.JUnit4;
/** Tests for {@link com.google.devtools.build.lib.rules.android.AarImport}. */
@RunWith(JUnit4.class)
public class AarImportTest extends BuildViewTestCase {
+
@Before
public void setup() throws Exception {
scratch.file(
+ "aapt2/sdk/BUILD",
+ "android_sdk(",
+ " name = 'sdk',",
+ " aapt = 'aapt',",
+ " aapt2 = 'aapt2',",
+ " adb = 'adb',",
+ " aidl = 'aidl',",
+ " android_jar = 'android.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')");
+ scratch.file(
"a/BUILD",
"aar_import(",
" name = 'foo',",
@@ -75,8 +94,17 @@ public class AarImportTest extends BuildViewTestCase {
" name = 'last',",
" aar = 'last.aar',",
" deps = [':intermediate'],",
+ ")",
+ "android_library(",
+ " name = 'library',",
+ " manifest = 'AndroidManifest.xml',",
+ " custom_package = 'com.google.arrimport',",
+ " resource_files = ['res/values/values.xml'],",
+ " srcs = ['App.java'],",
+ " deps = [':foo'],",
")");
- scratch.file("java/BUILD",
+ scratch.file(
+ "java/BUILD",
"android_binary(",
" name = 'app',",
" manifest = 'AndroidManifest.xml',",
@@ -107,18 +135,48 @@ public class AarImportTest extends BuildViewTestCase {
ValidatedAndroidData resourceContainer = directResources.iterator().next();
assertThat(resourceContainer.getManifest()).isNotNull();
- Artifact resourceTreeArtifact =
- Iterables.getOnlyElement(resourceContainer.getResources());
+ Artifact resourceTreeArtifact = Iterables.getOnlyElement(resourceContainer.getResources());
assertThat(resourceTreeArtifact.isTreeArtifact()).isTrue();
assertThat(resourceTreeArtifact.getExecPathString()).endsWith("_aar/unzipped/resources/foo");
- Artifact assetsTreeArtifact =
- Iterables.getOnlyElement(resourceContainer.getAssets());
+ Artifact assetsTreeArtifact = Iterables.getOnlyElement(resourceContainer.getAssets());
assertThat(assetsTreeArtifact.isTreeArtifact()).isTrue();
assertThat(assetsTreeArtifact.getExecPathString()).endsWith("_aar/unzipped/assets/foo");
}
@Test
+ public void aapt2RTxtProvided() throws Exception {
+ useConfiguration(
+ "--android_decouple_data_processing",
+ "--android_sdk=//aapt2/sdk:sdk",
+ "--experimental_skip_parsing_action",
+ "--android_aapt=aapt2");
+
+ ConfiguredTarget libTarget = getConfiguredTarget("//a:library");
+
+ NestedSet<Artifact> transitiveCompiledSymbols =
+ libTarget.get(AndroidResourcesInfo.PROVIDER).getTransitiveCompiledSymbols();
+
+ assertThat(transitiveCompiledSymbols).hasSize(2);
+
+ assertThat(
+ transitiveCompiledSymbols
+ .toSet()
+ .stream()
+ .map(Artifact::getRootRelativePathString)
+ .collect(Collectors.toSet()))
+ .containsExactly("a/foo_symbols/symbols.zip", "a/library_symbols/symbols.zip");
+
+ NestedSet<ValidatedAndroidData> directResources =
+ libTarget.get(AndroidResourcesInfo.PROVIDER).getDirectAndroidResources();
+
+ assertThat(directResources).hasSize(1);
+
+ ValidatedAndroidData resourceContainer = directResources.iterator().next();
+ Truth.assertThat(resourceContainer.getAapt2RTxt()).isNotNull();
+ }
+
+ @Test
public void testResourcesProvided() throws Exception {
useConfiguration("--android_decouple_data_processing");
@@ -240,9 +298,9 @@ public class AarImportTest extends BuildViewTestCase {
ensureArgumentsHaveClassEntryOptionWithSuffix(
arguments, "/intermediate/classes_and_libs_merged.jar");
assertThat(arguments.stream().filter(arg -> "--classpath_entry".equals(arg)).count())
- .isEqualTo(5); // transitive classpath
+ .isEqualTo(5); // transitive classpath
assertThat(arguments.stream().filter(arg -> "--directdep".equals(arg)).count())
- .isEqualTo(1); // 1 declared dep
+ .isEqualTo(1); // 1 declared dep
}
@Test
@@ -282,9 +340,9 @@ public class AarImportTest extends BuildViewTestCase {
ensureArgumentsHaveClassEntryOptionWithSuffix(
arguments, "/intermediate/classes_and_libs_merged.jar");
assertThat(arguments.stream().filter(arg -> "--classpath_entry".equals(arg)).count())
- .isEqualTo(5); // transitive classpath
+ .isEqualTo(5); // transitive classpath
assertThat(arguments.stream().filter(arg -> "--directdep".equals(arg)).count())
- .isEqualTo(1); // 1 declared dep
+ .isEqualTo(1); // 1 declared dep
}
@Test
@@ -390,15 +448,17 @@ public class AarImportTest extends BuildViewTestCase {
NestedSet<Artifact> nativeLibs =
androidLibraryTarget.get(AndroidNativeLibsInfo.PROVIDER).getNativeLibs();
- assertThat(nativeLibs).containsExactly(
- ActionsTestUtil.getFirstArtifactEndingWith(nativeLibs, "foo/native_libs.zip"),
- ActionsTestUtil.getFirstArtifactEndingWith(nativeLibs, "bar/native_libs.zip"),
- ActionsTestUtil.getFirstArtifactEndingWith(nativeLibs, "baz/native_libs.zip"));
+ assertThat(nativeLibs)
+ .containsExactly(
+ ActionsTestUtil.getFirstArtifactEndingWith(nativeLibs, "foo/native_libs.zip"),
+ ActionsTestUtil.getFirstArtifactEndingWith(nativeLibs, "bar/native_libs.zip"),
+ ActionsTestUtil.getFirstArtifactEndingWith(nativeLibs, "baz/native_libs.zip"));
}
@Test
public void testNativeLibsMakesItIntoApk() throws Exception {
- scratch.file("java/com/google/android/hello/BUILD",
+ scratch.file(
+ "java/com/google/android/hello/BUILD",
"aar_import(",
" name = 'my_aar',",
" aar = 'my_aar.aar',",
@@ -410,8 +470,10 @@ public class AarImportTest extends BuildViewTestCase {
" manifest = 'AndroidManifest.xml',",
")");
ConfiguredTarget binary = getConfiguredTarget("//java/com/google/android/hello:my_app");
- SpawnAction apkBuilderAction = (SpawnAction) actionsTestUtil()
- .getActionForArtifactEndingWith(getFilesToBuild(binary), "my_app_unsigned.apk");
+ SpawnAction apkBuilderAction =
+ (SpawnAction)
+ actionsTestUtil()
+ .getActionForArtifactEndingWith(getFilesToBuild(binary), "my_app_unsigned.apk");
assertThat(
Iterables.find(
apkBuilderAction.getArguments(),
@@ -419,7 +481,6 @@ public class AarImportTest extends BuildViewTestCase {
.isNotEmpty();
}
-
@Test
public void testClassesJarProvided() throws Exception {
ConfiguredTarget aarImportTarget = getConfiguredTarget("//a:foo");
@@ -454,8 +515,8 @@ public class AarImportTest extends BuildViewTestCase {
Action appCompileAction =
getGeneratingAction(
ActionsTestUtil.getFirstArtifactEndingWith(
- actionsTestUtil().artifactClosureOf(
- getFileConfiguredTarget("//java:app.apk").getArtifact()),
+ actionsTestUtil()
+ .artifactClosureOf(getFileConfiguredTarget("//java:app.apk").getArtifact()),
"libapp.jar"));
assertThat(appCompileAction).isNotNull();
assertThat(ActionsTestUtil.prettyArtifactNames(appCompileAction.getInputs()))
@@ -485,8 +546,7 @@ public class AarImportTest extends BuildViewTestCase {
assertThat(fooClassesJar.getArtifactOwner().getLabel()).isEqualTo(foo.getLabel());
ConfiguredTarget baz = getConfiguredTarget("//java:baz.jar");
- Artifact bazJar =
- ActionsTestUtil.getFirstArtifactEndingWith(artifacts, "baz.jar");
+ Artifact bazJar = ActionsTestUtil.getFirstArtifactEndingWith(artifacts, "baz.jar");
// Verify that baz.jar was in the artifact closure
assertThat(bazJar).isNotNull();
assertThat(bazJar.getArtifactOwner().getLabel()).isEqualTo(baz.getLabel());
@@ -514,8 +574,8 @@ public class AarImportTest extends BuildViewTestCase {
public void testJavaCompilationArgsProvider() throws Exception {
ConfiguredTarget aarImportTarget = getConfiguredTarget("//a:bar");
- JavaCompilationArgsProvider provider = JavaInfo
- .getProvider(JavaCompilationArgsProvider.class, aarImportTarget);
+ JavaCompilationArgsProvider provider =
+ JavaInfo.getProvider(JavaCompilationArgsProvider.class, aarImportTarget);
assertThat(provider).isNotNull();
assertThat(artifactsToStrings(provider.getRuntimeJars()))
.containsExactly(
@@ -542,13 +602,11 @@ public class AarImportTest extends BuildViewTestCase {
@Test
public void testFailsWithoutAndroidSdk() throws Exception {
- scratch.file("sdk/BUILD",
- "alias(",
- " name = 'sdk',",
- " actual = 'doesnotexist',",
- ")");
+ scratch.file("sdk/BUILD", "alias(", " name = 'sdk',", " actual = 'doesnotexist',", ")");
useConfiguration("--android_sdk=//sdk");
- checkError("aar", "aar",
+ checkError(
+ "aar",
+ "aar",
"No Android SDK found. Use the --android_sdk command line option to specify one.",
"aar_import(",
" name = 'aar',",
@@ -563,9 +621,9 @@ public class AarImportTest extends BuildViewTestCase {
// Compare root relative path strings instead of artifacts due to difference in configuration
// caused by the Android split transition.
assertThat(
- Iterables.transform(
- getGeneratingAction(binaryMergedManifest).getInputs(),
- Artifact::getRootRelativePathString))
+ Iterables.transform(
+ getGeneratingAction(binaryMergedManifest).getInputs(),
+ Artifact::getRootRelativePathString))
.containsAllOf(getAndroidManifest("//a:foo"), getAndroidManifest("//a:bar"));
}