public void decodeManifestWithResources(ResTable resTable, ExtFile apkFile, File outDir) throws AndrolibException { Duo<ResFileDecoder, AXmlResourceParser> duo = getResFileDecoder(); ResFileDecoder fileDecoder = duo.m1; ResAttrDecoder attrDecoder = duo.m2.getAttrDecoder(); attrDecoder.setCurrentPackage(resTable.listMainPackages().iterator().next()); Directory inApk, in = null, out; try { inApk = apkFile.getDirectory(); out = new FileDirectory(outDir); LOGGER.info("Decoding AndroidManifest.xml with resources..."); fileDecoder.decodeManifest(inApk, "AndroidManifest.xml", out, "AndroidManifest.xml"); // Remove versionName / versionCode (aapt API 16) if (!resTable.getAnalysisMode()) { // check for a mismatch between resources.arsc package and the package listed in AndroidManifest // also remove the android::versionCode / versionName from manifest for rebuild // this is a required change to prevent aapt warning about conflicting versions // it will be passed as a parameter to aapt like "--min-sdk-version" via apktool.yml adjustPackageManifest(resTable, outDir.getAbsolutePath() + File.separator + "AndroidManifest.xml"); ResXmlPatcher.removeManifestVersions(new File( outDir.getAbsolutePath() + File.separator + "AndroidManifest.xml")); mPackageId = String.valueOf(resTable.getPackageId()); } } catch (DirectoryException ex) { throw new AndrolibException(ex); } }
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); }
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); }