public Object construct(Node node) { String val = (String) constructScalar((ScalarNode) node); return YamlStringEscapeUtils.unescapeString(val); } }
public static String escapeString(String str) { return escapeJavaStyleString(str, false, false); }
public static MetaInfo load(File file) throws IOException { try ( InputStream fis = new FileInputStream(file) ) { return load(fis); } } }
private static Yaml getYaml() { DumperOptions options = new DumperOptions(); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); StringExRepresent representer = new StringExRepresent(); PropertyUtils propertyUtils = representer.getPropertyUtils(); propertyUtils.setSkipMissingProperties(true); return new Yaml(new StringExConstructor(), representer, options); }
private void writeMetaFile() throws AndrolibException { MetaInfo meta = new MetaInfo(); meta.version = Androlib.getVersion(); meta.apkFileName = mApkFile.getName(); if (mDecodeResources != DECODE_RESOURCES_NONE && (hasManifest() || hasResources())) { meta.isFrameworkApk = mAndrolib.isFrameworkApk(getResTable()); putUsesFramework(meta); putSdkInfo(meta); putPackageInfo(meta); putVersionInfo(meta); putSharedLibraryInfo(meta); putSparseResourcesInfo(meta); } putUnknownInfo(meta); putFileCompressionInfo(meta); mAndrolib.writeMetaFile(mOutDir, meta); }
private void putUsesFramework(MetaInfo meta) throws AndrolibException { Set<ResPackage> pkgs = getResTable().listFramePackages(); if (pkgs.isEmpty()) { return; } Integer[] ids = new Integer[pkgs.size()]; int i = 0; for (ResPackage pkg : pkgs) { ids[i++] = pkg.getId(); } Arrays.sort(ids); meta.usesFramework = new UsesFramework(); meta.usesFramework.ids = Arrays.asList(ids); if (mAndrolib.apkOptions.frameworkTag != null) { meta.usesFramework.tag = mAndrolib.apkOptions.frameworkTag; } }
private void putPackageInfo(MetaInfo meta) throws AndrolibException { String renamed = getResTable().getPackageRenamed(); String original = getResTable().getPackageOriginal(); int id = getResTable().getPackageId(); try { id = getResTable().getPackage(renamed).getId(); } catch (UndefinedResObject ignored) {} if (Strings.isNullOrEmpty(original)) { return; } meta.packageInfo = new PackageInfo(); // only put rename-manifest-package into apktool.yml, if the change will be required if (!renamed.equalsIgnoreCase(original)) { meta.packageInfo.renameManifestPackage = renamed; } meta.packageInfo.forcedPackageId = String.valueOf(id); }
public static MetaInfo load(InputStream is) { return getYaml().loadAs(is, MetaInfo.class); }
public void save(File file) throws IOException { try( FileOutputStream fos = new FileOutputStream(file); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fos, StandardCharsets.UTF_8); Writer writer = new BufferedWriter(outputStreamWriter) ) { save(writer); } }
public StringExConstructor() { this.yamlConstructors.put(Tag.STR, new ConstructStringEx()); }
public StringExRepresent() { RepresentStringEx representStringEx = new RepresentStringEx(); multiRepresenters.put(String.class, representStringEx); representers.put(String.class, representStringEx); }
@Override public Node representData(Object data) { return super.representData(YamlStringEscapeUtils.escapeString(data.toString())); } }
private void writeMetaFile() throws AndrolibException { MetaInfo meta = new MetaInfo(); meta.version = Androlib.getVersion(); meta.apkFileName = mApkFile.getName(); if (mDecodeResources != DECODE_RESOURCES_NONE && (hasManifest() || hasResources())) { meta.isFrameworkApk = mAndrolib.isFrameworkApk(getResTable()); putUsesFramework(meta); putSdkInfo(meta); putPackageInfo(meta); putVersionInfo(meta); putSharedLibraryInfo(meta); } putUnknownInfo(meta); putFileCompressionInfo(meta); mAndrolib.writeMetaFile(mOutDir, meta); }
private void putUsesFramework(MetaInfo meta) throws AndrolibException { Set<ResPackage> pkgs = getResTable().listFramePackages(); if (pkgs.isEmpty()) { return; } Integer[] ids = new Integer[pkgs.size()]; int i = 0; for (ResPackage pkg : pkgs) { ids[i++] = pkg.getId(); } Arrays.sort(ids); meta.usesFramework = new UsesFramework(); meta.usesFramework.ids = Arrays.asList(ids); if (mAndrolib.apkOptions.frameworkTag != null) { meta.usesFramework.tag = mAndrolib.apkOptions.frameworkTag; } }
private void putPackageInfo(MetaInfo meta) throws AndrolibException { String renamed = getResTable().getPackageRenamed(); String original = getResTable().getPackageOriginal(); int id = getResTable().getPackageId(); try { id = getResTable().getPackage(renamed).getId(); } catch (UndefinedResObject ignored) { } if (original != null || original.isEmpty()) { return; } meta.packageInfo = new PackageInfo(); // only put rename-droidefense.sdk.manifest-package into apktool.yml, if the change will be required if (!renamed.equalsIgnoreCase(original)) { meta.packageInfo.renameManifestPackage = renamed; } meta.packageInfo.forcedPackageId = String.valueOf(id); }
/** * @param str String to escape values in, may be null * @param escapeSingleQuotes escapes single quotes if <code>true</code> * @param escapeForwardSlash TODO * @return the escaped string */ private static String escapeJavaStyleString(String str, boolean escapeSingleQuotes, boolean escapeForwardSlash) { if (str == null) { return null; } try { StringWriter writer = new StringWriter(str.length() * 2); escapeJavaStyleString(writer, str, escapeSingleQuotes, escapeForwardSlash); return writer.toString(); } catch (IOException ioe) { // this should never ever happen while writing to a StringWriter throw new RuntimeException(ioe); } }
public MetaInfo readMetaFile(ExtFile appDir) throws AndrolibException { try( InputStream in = appDir.getDirectory().getFileInput("apktool.yml") ) { return MetaInfo.load(in); } catch (DirectoryException | IOException ex) { throw new AndrolibException(ex); } }
public void save(Writer output) { DumperOptions options = new DumperOptions(); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); getYaml().dump(this, output); }
public void writeMetaFile(File mOutDir, MetaInfo meta) throws AndrolibException { try { meta.save(new File(mOutDir, "apktool.yml")); } catch (IOException ex) { throw new AndrolibException(ex); } }