for (ResourceType type : types) { if (type != ResourceType.ID) { Resource resource = mModel.getResource(type, name); if (resource != null) { return resource;
continue; Resource resource = mModel.getResource(type, name); if (mDebug && resource != null) { mDebugPrinter.println("Marking " + resource + " used because it " int id = Integer.parseInt(name); if (id != 0) { ResourceUsageModel.markReachable(mModel.getResource(id));
@VisibleForTesting @Nullable Resource getResourceFromCode(@NonNull String owner, @NonNull String name) { Pair<ResourceType, Map<String, String>> pair = mResourceObfuscation.get(owner); if (pair != null) { ResourceType type = pair.getFirst(); Map<String, String> nameMap = pair.getSecond(); String renamedField = nameMap.get(name); if (renamedField != null) { name = renamedField; } return mModel.getResource(type, name); } return null; }
/** Invoked when an ASM visitor encounters a constant: record corresponding reference */ private void handleCodeConstant(@Nullable Object cst, @NonNull String context) { if (cst instanceof Integer) { Integer value = (Integer) cst; Resource resource = mModel.getResource(value); if (ResourceUsageModel.markReachable(resource) && mDebug) { mDebugPrinter.println("Marking " + resource + " reachable: referenced from " + context + " in " + mJarFile + ":" + mCurrentClass); } } else if (cst instanceof int[]) { int[] values = (int[]) cst; for (int value : values) { Resource resource = mModel.getResource(value); if (ResourceUsageModel.markReachable(resource) && mDebug) { mDebugPrinter.println("Marking " + resource + " reachable: referenced from " + context + " in " + mJarFile + ":" + mCurrentClass); } } } else if (cst instanceof String) { String string = (String) cst; referencedString(string); } } }