use of com.android.bundle.Devices.DeviceSpec in project bundletool by google.
the class ExtractApksCommandTest method incompleteApksFile_missingMatchedAbiSplit_throws.
@Test
public void incompleteApksFile_missingMatchedAbiSplit_throws() throws Exception {
// Partial APK Set file where 'x86' split is included and 'x86_64' split is not included because
// device spec sent to 'build-apks' command doesn't support it.
// Next, device spec that should be matched to 'x86_64' split is provided to 'extract-apks'
// command and command throws IncompatibleDeviceException.
BuildApksResult tableOfContent = BuildApksResult.newBuilder().setBundletool(Bundletool.newBuilder().setVersion(BundleToolVersion.getCurrentVersion().toString())).addVariant(createVariant(VariantTargeting.getDefaultInstance(), createSplitApkSet(/* moduleName= */
"base", createMasterApkDescription(ApkTargeting.getDefaultInstance(), ZipPath.create("base-master.apk")), splitApkDescription(apkAbiTargeting(X86, ImmutableSet.of(X86_64)), ZipPath.create("base-x86.apk"))))).build();
Path apksArchiveFile = createApksArchiveFile(tableOfContent, tmpDir.resolve("bundle.apks"));
DeviceSpec deviceSpec = mergeSpecs(deviceWithSdk(21), abis("x86_64", "x86"));
ExtractApksCommand command = ExtractApksCommand.builder().setDeviceSpec(deviceSpec).setApksArchivePath(apksArchiveFile).setOutputDirectory(tmpDir).build();
IncompatibleDeviceException exception = assertThrows(IncompatibleDeviceException.class, command::execute);
assertThat(exception).hasMessageThat().isEqualTo("Missing APKs for [ABI] dimensions in the module 'base' for the provided device.");
}
use of com.android.bundle.Devices.DeviceSpec in project bundletool by google.
the class ExtractApksCommandTest method oneModule_Kdevice_matchesPreLSplit.
@Test
@Theory
public void oneModule_Kdevice_matchesPreLSplit(@FromDataPoints("apksInDirectory") boolean apksInDirectory) throws Exception {
ZipPath apkPreL = ZipPath.create("standalones/apkPreL.apk");
ZipPath apkL = ZipPath.create("splits/apkL.apk");
ZipPath apkM = ZipPath.create("splits/apkM.apk");
BuildApksResult tableOfContentsProto = BuildApksResult.newBuilder().setBundletool(Bundletool.newBuilder().setVersion(BundleToolVersion.getCurrentVersion().toString())).addVariant(createVariantForSingleSplitApk(variantSdkTargeting(SdkVersion.getDefaultInstance(), ImmutableSet.of(sdkVersionFrom(21), sdkVersionFrom(23))), ApkTargeting.getDefaultInstance(), apkPreL)).addVariant(createVariantForSingleSplitApk(variantSdkTargeting(sdkVersionFrom(21), ImmutableSet.of(SdkVersion.getDefaultInstance(), sdkVersionFrom(23))), ApkTargeting.getDefaultInstance(), apkL)).addVariant(createVariantForSingleSplitApk(variantSdkTargeting(sdkVersionFrom(23), ImmutableSet.of(SdkVersion.getDefaultInstance(), sdkVersionFrom(21))), ApkTargeting.getDefaultInstance(), apkM)).build();
Path apksPath = createApks(tableOfContentsProto, apksInDirectory);
DeviceSpec deviceSpec = deviceWithSdk(19);
ExtractApksCommand.Builder extractedApksCommand = ExtractApksCommand.builder().setApksArchivePath(apksPath).setDeviceSpec(deviceSpec);
if (!apksInDirectory) {
extractedApksCommand.setOutputDirectory(tmpDir);
}
ImmutableList<Path> matchedApks = extractedApksCommand.build().execute();
if (apksInDirectory) {
assertThat(matchedApks).containsExactly(inTempDirectory(apkPreL.toString()));
} else {
assertThat(matchedApks).containsExactly(inOutputDirectory(apkPreL.getFileName()));
}
for (Path matchedApk : matchedApks) {
checkFileExistsAndReadable(tmpDir.resolve(matchedApk));
}
}
use of com.android.bundle.Devices.DeviceSpec in project bundletool by google.
the class GetDeviceSpecCommandTest method oneDevice_badAbis_throws.
@Test
public void oneDevice_badAbis_throws() throws Exception {
DeviceSpec deviceSpec = mergeSpecs(sdkVersion(21), density(480), abis(), locales("en-US"));
Path outputPath = tmp.getRoot().toPath().resolve("device.json");
// We set up a fake ADB server because the real one won't work on Forge.
GetDeviceSpecCommand command = GetDeviceSpecCommand.builder().setAdbPath(adbPath).setAdbServer(fakeServerOneDevice(deviceSpec)).setOutputPath(outputPath).build();
Throwable exception = assertThrows(IllegalStateException.class, () -> command.execute());
assertThat(exception).hasMessageThat().contains("Error retrieving device ABIs");
}
use of com.android.bundle.Devices.DeviceSpec in project bundletool by google.
the class GetDeviceSpecCommandTest method oneDevice_badDensity_throws.
@Test
public void oneDevice_badDensity_throws() throws Exception {
DeviceSpec deviceSpec = mergeSpecs(sdkVersion(21), density(-1), abis("x86_64", "x86"), locales("en-US"));
Path outputPath = tmp.getRoot().toPath().resolve("device.json");
// We set up a fake ADB server because the real one won't work on Forge.
GetDeviceSpecCommand command = GetDeviceSpecCommand.builder().setAdbPath(adbPath).setAdbServer(fakeServerOneDevice(deviceSpec)).setOutputPath(outputPath).build();
Throwable exception = assertThrows(IllegalStateException.class, () -> command.execute());
assertThat(exception).hasMessageThat().contains("Error retrieving device density");
}
use of com.android.bundle.Devices.DeviceSpec in project bundletool by google.
the class GetDeviceSpecCommandTest method oneDevice_noDeviceId_works.
@Test
public void oneDevice_noDeviceId_works() throws Exception {
DeviceSpec deviceSpec = mergeSpecs(sdkVersion(21), abis("x86_64", "x86"), locales("en-GB"), density(360));
Path outputPath = tmp.getRoot().toPath().resolve("device.json");
// We set up a fake ADB server because the real one won't work on Forge.
GetDeviceSpecCommand command = GetDeviceSpecCommand.builder().setAdbPath(adbPath).setAdbServer(fakeServerOneDevice(deviceSpec)).setOutputPath(outputPath).build();
assertThat(command.execute()).isEqualTo(deviceSpec);
try (Reader deviceSpecReader = BufferedIo.reader(outputPath)) {
DeviceSpec.Builder writtenSpecBuilder = DeviceSpec.newBuilder();
JsonFormat.parser().merge(deviceSpecReader, writtenSpecBuilder);
assertThat(writtenSpecBuilder.build()).isEqualTo(deviceSpec);
}
}
Aggregations