use of com.android.bundle.Files.NativeLibraries in project bundletool by google.
the class NativeTargetingValidatorTest method validateModule_emptyTargetedDirectory_throws.
@Test
public void validateModule_emptyTargetedDirectory_throws() throws Exception {
NativeLibraries config = nativeLibraries(targetedNativeDirectory("lib/x86", nativeDirectoryTargeting(X86)), targetedNativeDirectory("lib/x86_64", nativeDirectoryTargeting(X86_64)), targetedNativeDirectory("lib/mips", nativeDirectoryTargeting(MIPS)));
BundleModule module = new BundleModuleBuilder("testModule").setNativeConfig(config).addFile("lib/x86/libX.so").addFile("lib/x86_64/libX.so").setManifest(androidManifest("com.test.app")).build();
InvalidBundleException e = assertThrows(InvalidBundleException.class, () -> new NativeTargetingValidator().validateModule(module));
assertThat(e).hasMessageThat().contains("Targeted directory 'lib/mips' is empty.");
}
use of com.android.bundle.Files.NativeLibraries in project bundletool by google.
the class ModuleAbiSanitizerTest method consistentNativeLibraries_moduleUnchanged.
@Test
public void consistentNativeLibraries_moduleUnchanged() throws Exception {
NativeLibraries nativeConfig = nativeLibraries(targetedNativeDirectory("lib/x86", nativeDirectoryTargeting(X86)), targetedNativeDirectory("lib/x86_64", nativeDirectoryTargeting(X86_64)), targetedNativeDirectory("lib/mips", nativeDirectoryTargeting(MIPS)));
BundleModule testModule = new BundleModuleBuilder("testModule").addFile("lib/x86/lib1.so").addFile("lib/x86/lib2.so").addFile("lib/x86/lib3.so").addFile("lib/x86_64/lib1.so").addFile("lib/x86_64/lib2.so").addFile("lib/x86_64/lib3.so").addFile("lib/mips/lib1.so").addFile("lib/mips/lib2.so").addFile("lib/mips/lib3.so").setNativeConfig(nativeConfig).setManifest(androidManifest("com.test.app")).build();
BundleModule sanitizedModule = new ModuleAbiSanitizer().sanitize(testModule);
assertThat(sanitizedModule.getNativeConfig().get()).isEqualTo(testModule.getNativeConfig().get());
assertThat(sanitizedModule.getEntries()).containsExactlyElementsIn(testModule.getEntries());
// Sanity check that nothing else changed as well.
assertThat(sanitizedModule).isEqualTo(testModule);
}
use of com.android.bundle.Files.NativeLibraries in project bundletool by google.
the class TargetingGeneratorTest method generateTargetingForNativeLibraries_createsSingleDirectoryGroup.
@Test
public void generateTargetingForNativeLibraries_createsSingleDirectoryGroup() throws Exception {
Collection<String> manyDirectories = Arrays.stream(AbiName.values()).map(AbiName::getPlatformName).map(abi -> "lib/" + abi).collect(toImmutableList());
// Otherwise this test is useless.
checkState(manyDirectories.size() > 1);
NativeLibraries nativeTargeting = generator.generateTargetingForNativeLibraries(manyDirectories);
List<TargetedNativeDirectory> directories = nativeTargeting.getDirectoryList();
assertThat(directories).hasSize(manyDirectories.size());
}
use of com.android.bundle.Files.NativeLibraries in project bundletool by google.
the class BundleModuleTest method correctNativeProtoFile_parsedAndReturned.
@Test
public void correctNativeProtoFile_parsedAndReturned() throws Exception {
NativeLibraries nativeConfig = NativeLibraries.newBuilder().addDirectory(TargetedNativeDirectory.newBuilder().setPath("native/x86")).build();
BundleModule bundleModule = createMinimalModuleBuilder().addEntry(createModuleEntryForFile("native.pb", nativeConfig.toByteArray())).build();
assertThat(bundleModule.getNativeConfig()).hasValue(nativeConfig);
}
use of com.android.bundle.Files.NativeLibraries in project bundletool by google.
the class SameTargetingMerger method mergeSplits.
private ModuleSplit mergeSplits(ImmutableCollection<ModuleSplit> splits) {
ModuleSplit.Builder builder = ModuleSplit.builder();
ImmutableList.Builder<ModuleEntry> entries = ImmutableList.builder();
AndroidManifest mergedManifest = null;
ResourceTable mergedResourceTable = null;
NativeLibraries mergedNativeConfig = null;
Map<String, TargetedAssetsDirectory> mergedAssetsConfig = new HashMap<>();
ApexImages mergedApexConfig = null;
ImmutableList<ApexEmbeddedApkConfig> mergedApexEmbeddedApkConfigs = null;
BundleModuleName mergedModuleName = null;
Boolean mergedIsMasterSplit = null;
VariantTargeting mergedVariantTargeting = null;
for (ModuleSplit split : splits) {
mergedManifest = getSameValueOrNonNull(mergedManifest, split.getAndroidManifest()).orElseThrow(() -> new IllegalStateException("Encountered two distinct manifests while merging."));
if (split.getResourceTable().isPresent()) {
mergedResourceTable = getSameValueOrNonNull(mergedResourceTable, split.getResourceTable().get()).orElseThrow(() -> new IllegalStateException("Unsupported case: encountered two distinct resource tables while " + "merging."));
}
if (split.getNativeConfig().isPresent()) {
mergedNativeConfig = getSameValueOrNonNull(mergedNativeConfig, split.getNativeConfig().get()).orElseThrow(() -> new IllegalStateException("Encountered two distinct native configs while merging."));
}
if (split.getApexConfig().isPresent()) {
mergedApexConfig = getSameValueOrNonNull(mergedApexConfig, split.getApexConfig().get()).orElseThrow(() -> new IllegalStateException("Encountered two distinct apex configs while merging."));
}
mergedApexEmbeddedApkConfigs = getSameValueOrNonNull(mergedApexEmbeddedApkConfigs, split.getApexEmbeddedApkConfigs()).orElseThrow(() -> new IllegalStateException("Encountered two distinct apex embedded apk configs while merging."));
mergedModuleName = getSameValueOrNonNull(mergedModuleName, split.getModuleName()).orElseThrow(() -> new IllegalStateException("Encountered two distinct module names while merging."));
mergedIsMasterSplit = getSameValueOrNonNull(mergedIsMasterSplit, Boolean.valueOf(split.isMasterSplit())).orElseThrow(() -> new IllegalStateException("Encountered conflicting isMasterSplit flag values while merging."));
mergedVariantTargeting = getSameValueOrNonNull(mergedVariantTargeting, split.getVariantTargeting()).orElseThrow(() -> new IllegalStateException("Encountered conflicting variant targeting values while merging."));
entries.addAll(split.getEntries());
builder.setApkTargeting(split.getApkTargeting());
split.getAssetsConfig().ifPresent(assetsConfig -> {
mergeTargetedAssetsDirectories(mergedAssetsConfig, assetsConfig.getDirectoryList());
});
}
if (mergedManifest != null) {
builder.setAndroidManifest(mergedManifest);
}
if (mergedResourceTable != null) {
builder.setResourceTable(mergedResourceTable);
}
if (mergedNativeConfig != null) {
builder.setNativeConfig(mergedNativeConfig);
}
if (!mergedAssetsConfig.isEmpty()) {
builder.setAssetsConfig(Assets.newBuilder().addAllDirectory(mergedAssetsConfig.values()).build());
}
if (mergedApexConfig != null) {
builder.setApexConfig(mergedApexConfig);
}
if (mergedApexEmbeddedApkConfigs != null) {
builder.setApexEmbeddedApkConfigs(mergedApexEmbeddedApkConfigs);
}
if (mergedModuleName != null) {
builder.setModuleName(mergedModuleName);
}
if (mergedIsMasterSplit != null) {
builder.setMasterSplit(mergedIsMasterSplit);
}
builder.setVariantTargeting(mergedVariantTargeting);
builder.setEntries(entries.build());
return builder.build();
}
Aggregations