From 22a312f544ad556bb4cb366a28b1a4fca04dde5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ryszard=20Wi=C5=9Bniewski?= Date: Wed, 24 Mar 2010 10:53:43 +0100 Subject: [PATCH] Generating public.xml file to set same resource IDs as in original apk. --- src/brut/androlib/res/AndrolibResources.java | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/brut/androlib/res/AndrolibResources.java b/src/brut/androlib/res/AndrolibResources.java index 8ae939c7..9fec0567 100644 --- a/src/brut/androlib/res/AndrolibResources.java +++ b/src/brut/androlib/res/AndrolibResources.java @@ -80,6 +80,7 @@ final public class AndrolibResources { for (ResValuesFile valuesFile : pkg.listValuesFiles()) { generateValuesFile(valuesFile, out, xmlSerializer); } + generatePublicXml(pkg, out, xmlSerializer); } } @@ -177,6 +178,36 @@ final public class AndrolibResources { } } + private void generatePublicXml(ResPackage pkg, Directory out, + XmlSerializer serial) throws AndrolibException { + try { + OutputStream outStream = out.getFileOutput("values/public.xml"); + serial.setOutput(outStream, null); + serial.startDocument(null, null); + serial.startTag(null, "resources"); + + for (ResResSpec spec : pkg.listResSpecs()) { + serial.startTag(null, "public"); + serial.attribute(null, "type", spec.getType().getName()); + serial.attribute(null, "name", spec.getName()); + serial.attribute(null, "id", String.format( + "0x%08x", spec.getId().id)); + serial.endTag(null, "public"); + } + + serial.endTag(null, "resources"); + serial.endDocument(); + serial.flush(); + outStream.close(); + } catch (IOException ex) { + throw new AndrolibException( + "Could not generate public.xml file", ex); + } catch (DirectoryException ex) { + throw new AndrolibException( + "Could not generate public.xml file", ex); + } + } + private void loadApk(ResTable resTable, File apkFile, boolean main) throws AndrolibException { JniPackageGroup[] groups =