use of com.android.tools.build.bundletool.model.ResourceId in project bundletool by google.
the class ResourceAnalyzerTest method attributeWithCompiledItem_nonRef_ignored.
@Test
public void attributeWithCompiledItem_nonRef_ignored() throws Exception {
XmlNode manifest = AndroidManifest.create(xmlNode(xmlElement("manifest", xmlNode(xmlElement("application", // Attributes of all possible types, except for ref.
ImmutableList.of(// str
xmlCompiledItemAttribute(NO_NAMESPACE_URI, "str", Item.newBuilder().setStr(String.getDefaultInstance()).build()), // raw_str
xmlCompiledItemAttribute(NO_NAMESPACE_URI, "raw_str", Item.newBuilder().setRawStr(RawString.getDefaultInstance()).build()), // styled_str
xmlCompiledItemAttribute(NO_NAMESPACE_URI, "styled_str", Item.newBuilder().setStyledStr(StyledString.getDefaultInstance()).build()), // file
xmlCompiledItemAttribute(NO_NAMESPACE_URI, "file", Item.newBuilder().setFile(FileReference.getDefaultInstance()).build()), // id
xmlCompiledItemAttribute(NO_NAMESPACE_URI, "id", Item.newBuilder().setId(Id.getDefaultInstance()).build()), // prim
xmlCompiledItemAttribute(NO_NAMESPACE_URI, "prim", Item.newBuilder().setPrim(Primitive.getDefaultInstance()).build()))))))).getManifestRoot().getProto();
ResourceTable resourceTable = resourceTable(pkg(0x0f, "com.test.app", type(0x01, "string", entry(0x0099, "not_referenced", value("", DEFAULT_CONFIG)))));
AppBundle appBundle = new AppBundleBuilder().addModule("base", builder -> builder.setManifest(manifest).setResourceTable(resourceTable)).build();
ImmutableSet<ResourceId> resourceIds = new ResourceAnalyzer(appBundle).findAllAppResourcesReachableFromBaseManifest();
assertThat(resourceIds).isEmpty();
}
use of com.android.tools.build.bundletool.model.ResourceId in project bundletool by google.
the class ResourceAnalyzerTest method transitive_compoundValue_style.
@Test
public void transitive_compoundValue_style() throws Exception {
// AndroidManifest
// --> 0x7f010001 (app_theme) --> 0x7f010002 (parent_theme) --> 0x7f020001 (string)
// |-> 0x7f020002 (string)
// |-> 0x7f020003 (string)
XmlNode manifest = AndroidManifest.create(xmlNode(xmlElement("manifest", xmlNode(xmlElement("application", xmlResourceReferenceAttribute(ANDROID_NAMESPACE_URI, "theme", /* attrResourceId= */
0x999999, /* valueResourceId= */
0x7f010001)))))).getManifestRoot().getProto();
ResourceTable resourceTable = resourceTable(pkg(0x7f, "com.test.app", type(0x01, "theme", entry(0x0001, "app_theme", compoundValueStyleWithResourceReferences(/* parentId= */
0x7f010002, /* referencedResourceIds= */
new int[] { 0x7f020002, 0x7f020003 })), entry(0x0002, "parent_theme", compoundValueStyleWithResourceReferences(/* parentId= */
null, /* referencedResourceIds= */
new int[] { 0x7f020001 }))), type(0x02, "string", entry(0x0001, "parent_theme_str", value("hello", DEFAULT_CONFIG)), entry(0x0002, "app_theme_str1", value("hello", DEFAULT_CONFIG)), entry(0x0003, "app_theme_str2", value("hello", DEFAULT_CONFIG)), entry(0x0099, "not_referenced", value("", DEFAULT_CONFIG)))));
AppBundle appBundle = new AppBundleBuilder().addModule("base", builder -> builder.setManifest(manifest).setResourceTable(resourceTable)).build();
ImmutableSet<ResourceId> resourceIds = new ResourceAnalyzer(appBundle).findAllAppResourcesReachableFromBaseManifest();
assertThat(resourceIds).containsExactly(ResourceId.create(0x7f010001), ResourceId.create(0x7f010002), ResourceId.create(0x7f020001), ResourceId.create(0x7f020002), ResourceId.create(0x7f020003));
}
use of com.android.tools.build.bundletool.model.ResourceId in project bundletool by google.
the class LocaleConfigXmlInjector method injectLocaleConfigXml.
private static ModuleSplit injectLocaleConfigXml(ModuleSplit split, XmlNode xmlNode) {
ResourceInjector resourceInjector = ResourceInjector.fromModuleSplit(split);
ResourceId resourceId = resourceInjector.addResource(XML_TYPE_NAME, createXmlEntry());
ModuleEntry localesConfigEntry = addLocalesConfigEntry(xmlNode);
return split.toBuilder().setResourceTable(resourceInjector.build()).setEntries(ImmutableList.<ModuleEntry>builder().addAll(split.getEntries()).add(localesConfigEntry).build()).setAndroidManifest(split.getAndroidManifest().toEditor().setLocaleConfig(resourceId.getFullResourceId()).save()).build();
}
use of com.android.tools.build.bundletool.model.ResourceId in project bundletool by google.
the class SplitsXmlInjector method injectSplitsXml.
private static ModuleSplit injectSplitsXml(ModuleSplit split, XmlNode xmlNode) {
ZipPath resourcePath = getUniqueResourcePath(split);
ResourceInjector resourceInjector = ResourceInjector.fromModuleSplit(split);
ResourceId resourceId = resourceInjector.addResource(XML_TYPE_NAME, createXmlEntry(resourcePath));
return split.toBuilder().setResourceTable(resourceInjector.build()).setEntries(ImmutableList.<ModuleEntry>builder().addAll(split.getEntries()).add(ModuleEntry.builder().setPath(resourcePath).setContent(ByteSource.wrap(xmlNode.toByteArray())).build()).build()).setAndroidManifest(split.getAndroidManifest().toEditor().addMetaDataResourceId(METADATA_KEY, resourceId.getFullResourceId()).save()).build();
}
use of com.android.tools.build.bundletool.model.ResourceId in project bundletool by google.
the class ScreenDensityResourcesSplitter method getResourceTableForDefaultSplit.
/**
* Returns a resource table for master split.
*
* <p>It will be stripped of any entries claimed by the config splits.
*/
private ResourceTable getResourceTableForDefaultSplit(ModuleSplit split, ImmutableMultimap<ResourceId, ConfigValue> claimedConfigs) {
checkArgument(split.getResourceTable().isPresent(), "Expected the split to contain Resource Table.");
ResourceTable.Builder prunedTable = split.getResourceTable().get().toBuilder();
for (Package.Builder packageBuilder : prunedTable.getPackageBuilderList()) {
for (Type.Builder typeBuilder : packageBuilder.getTypeBuilderList()) {
List<Entry> newEntries = new ArrayList<>();
for (Entry entry : typeBuilder.getEntryList()) {
ResourceId resourceId = ResourceId.create(packageBuilder, typeBuilder, entry);
ImmutableList<ConfigValue> allConfigsExceptClaimed = entry.getConfigValueList().stream().filter(configValue -> !claimedConfigs.containsEntry(resourceId, configValue)).collect(toImmutableList());
Entry.Builder newEntry = entry.toBuilder().clearConfigValue().addAllConfigValue(allConfigsExceptClaimed);
if (newEntry.getConfigValueCount() > 0) {
// if everything was claimed we skip the entry.
newEntries.add(newEntry.build());
}
}
typeBuilder.clearEntry().addAllEntry(newEntries);
}
}
return prunedTable.build();
}
Aggregations