use of com.android.tools.build.bundletool.testing.ResourceTableBuilder in project bundletool by google.
the class BuildApksManagerTest method pinningOfManifestReachableResources_disabled.
@Test
@Theory
public void pinningOfManifestReachableResources_disabled(@FromDataPoints("manifestReachableResourcesDisabledVersions") Version bundleVersion) throws Exception {
AppBundle appBundle = new AppBundleBuilder().addModule("base", builder -> builder.addFile("res/drawable-mdpi/manifest_image.jpg").addFile("res/drawable-hdpi/manifest_image.jpg").setManifest(androidManifest("com.test.app", withAppIcon(/* ID of "drawable/manifest_image" */
0x7f010000))).setResourceTable(new ResourceTableBuilder().addPackage("com.test.app").addDrawableResourceForMultipleDensities("manifest_image", ImmutableMap.of(/* mdpi */
160, "res/drawable-mdpi/manifest_image.jpg", /* hdpi */
240, "res/drawable-hdpi/manifest_image.jpg")).build())).setBundleConfig(BundleConfigBuilder.create().setVersion(bundleVersion.toString()).build()).build();
TestComponent.useTestModule(this, createTestModuleBuilder().withAppBundle(appBundle).withOutputPath(outputFilePath).build());
buildApksManager.execute();
ZipFile apkSetFile = openZipFile(outputFilePath.toFile());
BuildApksResult result = extractTocFromApkSetFile(apkSetFile, outputDir);
ImmutableList<Variant> splitApkVariants = splitApkVariants(result);
ImmutableList<ApkDescription> splitApks = apkDescriptions(splitApkVariants);
ImmutableList<ApkDescription> masterSplits = splitApks.stream().filter(apkDesc -> apkDesc.getSplitApkMetadata().getIsMasterSplit()).collect(toImmutableList());
assertThat(masterSplits).isNotEmpty();
for (ApkDescription masterSplit : masterSplits) {
assertThat(filesInApk(masterSplit, apkSetFile)).doesNotContain("res/drawable-mdpi/manifest_image.jpg");
}
ImmutableList<ApkDescription> densitySplits = splitApks.stream().filter(apkDesc -> apkDesc.getTargeting().hasScreenDensityTargeting()).collect(toImmutableList());
assertThat(densitySplits).isNotEmpty();
for (ApkDescription densitySplit : densitySplits) {
assertThat(filesInApk(densitySplit, apkSetFile)).containsAnyOf("res/drawable-mdpi/manifest_image.jpg", "res/drawable-hdpi/manifest_image.jpg");
}
}
use of com.android.tools.build.bundletool.testing.ResourceTableBuilder in project bundletool by google.
the class BuildApksManagerTest method runSingleConcurrencyTest_disableNativeLibrariesOptimization.
private void runSingleConcurrencyTest_disableNativeLibrariesOptimization(int threadCount) throws Exception {
Path newTempDir = tmp.newFolder().toPath();
outputFilePath = newTempDir.resolve("bundle.apks");
AppBundle appBundle = new AppBundleBuilder().addModule("base", builder -> builder.addFile("assets/file.txt").addFile("dex/classes.dex").setManifest(androidManifest("com.test.app")).setResourceTable(resourceTableWithTestLabel("Test feature"))).addModule("abi_feature", builder -> builder.addFile("lib/x86/libsome.so").addFile("lib/x86_64/libsome.so").setNativeConfig(nativeLibraries(targetedNativeDirectory("lib/x86", nativeDirectoryTargeting(X86)), targetedNativeDirectory("lib/x86_64", nativeDirectoryTargeting(X86_64)))).setManifest(androidManifestForFeature("com.test.app", withTitle("@string/test_label", TEST_LABEL_RESOURCE_ID)))).addModule("language_feature", builder -> builder.addFile("res/drawable/image.jpg").addFile("res/drawable-cz/image.jpg").addFile("res/drawable-fr/image.jpg").addFile("res/drawable-pl/image.jpg").setResourceTable(new ResourceTableBuilder().addPackage("com.test.app", USER_PACKAGE_OFFSET - 1).addFileResourceForMultipleConfigs("drawable", "image", ImmutableMap.of(Configuration.getDefaultInstance(), "res/drawable/image.jpg", locale("cz"), "res/drawable-cz/image.jpg", locale("fr"), "res/drawable-fr/image.jpg", locale("pl"), "res/drawable-pl/image.jpg")).build()).setManifest(androidManifestForFeature("com.test.app", withTitle("@string/test_label", TEST_LABEL_RESOURCE_ID)))).setBundleConfig(BundleConfigBuilder.create().setUncompressNativeLibraries(false).build()).build();
TestComponent.useTestModule(this, createTestModuleBuilder().withAppBundle(appBundle).withOutputPath(outputFilePath).withExecutorService(MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(threadCount))).withOptimizationDimensions(ABI, LANGUAGE).build());
buildApksManager.execute();
ZipFile apkSetFile = openZipFile(outputFilePath.toFile());
BuildApksResult result = extractTocFromApkSetFile(apkSetFile, outputDir);
final String manifest = "AndroidManifest.xml";
// Validate split APKs.
ImmutableList<Variant> splitApkVariants = splitApkVariants(result);
assertThat(splitApkVariants).hasSize(1);
ImmutableMap<String, List<ApkDescription>> splitApksByModule = splitApkVariants.get(0).getApkSetList().stream().collect(toImmutableMap(apkSet -> apkSet.getModuleMetadata().getName(), apkSet -> apkSet.getApkDescriptionList()));
assertThat(splitApksByModule.keySet()).containsExactly("base", "abi_feature", "language_feature");
// Correct number of APKs.
// "base" module - master split.
assertThat(splitApksByModule.get("base")).hasSize(1);
// "abi_feature" module - master split + 2 ABI splits.
assertThat(splitApksByModule.get("abi_feature")).hasSize(3);
// "language_feature" module - master split + 3 language splits.
assertThat(splitApksByModule.get("language_feature")).hasSize(4);
// Correct files inside APKs.
assertThat(filesInApks(splitApksByModule.get("base"), apkSetFile)).containsExactly("res/xml/splits0.xml", "resources.arsc", "assets/file.txt", "classes.dex", manifest);
assertThat(filesInApks(splitApksByModule.get("abi_feature"), apkSetFile)).isEqualTo(ImmutableMultiset.builder().add("lib/x86/libsome.so").add("lib/x86_64/libsome.so").addCopies(manifest, 3).build());
assertThat(filesInApks(splitApksByModule.get("language_feature"), apkSetFile)).isEqualTo(ImmutableMultiset.builder().add("res/drawable/image.jpg").add("res/drawable-cz/image.jpg").add("res/drawable-fr/image.jpg").add("res/drawable-pl/image.jpg").addCopies("resources.arsc", 4).addCopies(manifest, 4).build());
// Validate standalone APKs.
ImmutableList<Variant> standaloneVariants = standaloneApkVariants(result);
// Correct number of APKs.
// 2 ABIs
assertThat(standaloneVariants).hasSize(2);
assertThat(apkDescriptions(standaloneVariants)).hasSize(2);
// Correct files inside APKs.
assertThat(filesInApks(apkDescriptions(standaloneVariants), apkSetFile)).isEqualTo(ImmutableMultiset.builder().add("lib/x86/libsome.so").add("lib/x86_64/libsome.so").addCopies("assets/file.txt", 2).addCopies("classes.dex", 2).addCopies("res/drawable/image.jpg", 2).addCopies("res/drawable-cz/image.jpg", 2).addCopies("res/drawable-fr/image.jpg", 2).addCopies("res/drawable-pl/image.jpg", 2).addCopies("res/xml/splits0.xml", 2).addCopies("resources.arsc", 2).addCopies(manifest, 2).build());
}
Aggregations