From 28cb022d1a08441983f8202c471633836d60689e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ryszard=20Wi=C5=9Bniewski?= Date: Thu, 25 Mar 2010 10:38:55 +0100 Subject: [PATCH] AndrolibResources: using ARSCDecoder instead of jni code. --- src/brut/androlib/res/AndrolibResources.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/brut/androlib/res/AndrolibResources.java b/src/brut/androlib/res/AndrolibResources.java index 9fec0567..d1f944f4 100644 --- a/src/brut/androlib/res/AndrolibResources.java +++ b/src/brut/androlib/res/AndrolibResources.java @@ -210,8 +210,15 @@ final public class AndrolibResources { private void loadApk(ResTable resTable, File apkFile, boolean main) throws AndrolibException { - JniPackageGroup[] groups = - nativeGetPackageGroups(apkFile.getAbsolutePath()); + ResPackage[] groups; + try { + groups = ARSCDecoder.decode( + new ZipRODirectory(apkFile).getFileInput("resources.arsc"), + resTable); + } catch (DirectoryException ex) { + throw new AndrolibException("Could not decode res table", ex); + } + if (groups.length == 0) { throw new AndrolibException( "Apk with zero package groups: " + apkFile.getPath()); @@ -223,15 +230,12 @@ final public class AndrolibResources { } for (int i = 0; i < groups.length; i++) { if (groups.length != 1 && i == 0 - && "android".equals(groups[i].packages[0].name)) { + && "android".equals(groups[i].getName())) { System.err.println( "warning: skipping \"android\" package group"); continue; } - for (JniPackage jniPkg : groups[i].packages) { - ResPackage pkg = new JniPackageDecoder().decode(jniPkg, resTable); - resTable.addPackage(pkg, main); - } + resTable.addPackage(groups[i], main); } }