/** * Processes given native library directories, generating targeting based on their names. * * @param libDirectories Names of directories under lib/, including the "lib/" prefix. * @return Targeting for the given native libraries directories. */ public NativeLibraries generateTargetingForNativeLibraries(Collection<String> libDirectories) { NativeLibraries.Builder nativeLibraries = NativeLibraries.newBuilder(); for (String directory : libDirectories) { checkRootDirectoryName(LIB_DIR, directory); // Split the directory under lib/ into tokens. String abiName = directory.substring(LIB_DIR.length()); Abi abi = checkAbiName(abiName, directory); nativeLibraries.addDirectory( TargetedNativeDirectory.newBuilder() .setPath(directory) .setTargeting(NativeDirectoryTargeting.newBuilder().setAbi(abi)) .build()); } return nativeLibraries.build(); }
@Test public void nativeLibrariesPresent_abiTargetingIsPresent() throws Exception { Path moduleWithAbi = new ZipBuilder() .addFileWithContent(ZipPath.create("lib/x86/libfast.so"), "native data".getBytes(UTF_8)) .addFileWithContent( ZipPath.create("lib/x86/libfaster.so"), "native data".getBytes(UTF_8)) .addFileWithProtoContent( ZipPath.create("manifest/AndroidManifest.xml"), androidManifest(PKG_NAME)) .writeTo(tmpDir.resolve("base.zip")); BuildBundleCommand.builder() .setOutputPath(bundlePath) .setModulesPaths(ImmutableList.of(moduleWithAbi)) .build() .execute(); ZipFile bundle = new ZipFile(bundlePath.toFile()); assertThat(bundle).hasFile("base/native.pb"); NativeLibraries actualTargeting = NativeLibraries.parseFrom(bundle.getInputStream(new ZipEntry("base/native.pb"))); NativeLibraries expectedTargeting = NativeLibraries.newBuilder() .addDirectory( TargetedNativeDirectory.newBuilder() .setPath("lib/x86") .setTargeting( NativeDirectoryTargeting.newBuilder() .setAbi(Abi.newBuilder().setAlias(X86)))) .build(); Truth.assertThat(actualTargeting).isEqualTo(expectedTargeting); }
public static NativeDirectoryTargeting nativeDirectoryTargeting(AbiAlias abi) { return NativeDirectoryTargeting.newBuilder().setAbi(toAbi(abi)).build(); }