When i was using apktool to decompile an apk i got the following error:
The problem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
I: Using Apktool 2.4.0 on xxxxx.apk I: Loading resource table... Exception in thread "main" brut.androlib.AndrolibException: unsupported res type name for bags. Found: style2 at brut.androlib.res.data.value.ResValueFactory.bagFactory(ResValueFactory.java:115) at brut.androlib.res.decoder.ARSCDecoder.readComplexEntry(ARSCDecoder.java:350) at brut.androlib.res.decoder.ARSCDecoder.readEntryData(ARSCDecoder.java:276) at brut.androlib.res.decoder.ARSCDecoder.readTableType(ARSCDecoder.java:252) at brut.androlib.res.decoder.ARSCDecoder.readTableTypeSpec(ARSCDecoder.java:175) at brut.androlib.res.decoder.ARSCDecoder.readTablePackage(ARSCDecoder.java:131) at brut.androlib.res.decoder.ARSCDecoder.readTableHeader(ARSCDecoder.java:82) at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:48) at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:748) at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:67) at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:59) at brut.androlib.Androlib.getResTable(Androlib.java:68) at brut.androlib.ApkDecoder.setTargetSdkVersion(ApkDecoder.java:228) at brut.androlib.ApkDecoder.decode(ApkDecoder.java:118) at brut.apktool.Main.cmdDecode(Main.java:167) at brut.apktool.Main.main(Main.java:76) |
The solution:
Download the source of APKTool
git clone git://github.com/iBotPeaches/Apktool.git
- cd Apktool
Bold lines need to be added:
Edit: Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java
1 2 3 4 5 6 7 |
<strong>Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java:114: if (ResTypeSpec.RES_TYPE_NAME_STYLES2.equals(resTypeName)) { Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java-115- return new ResStyleValue(parentVal, items, this); Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java-116</strong>- } Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java-117- Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java-118- Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java-119- if (ResTypeSpec.RES_TYPE_NAME_ATTR.equals(resTypeName)) { Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java-120- return new ResAttr(parentVal, 0, null, null, null) |
Edit: Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java
1 2 |
Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java:31: public static final String RES_TYPE_NAME_STYLES = "style"; <strong>Apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResTypeSpec.java:32: public static final String RES_TYPE_NAME_STYLES2 = "style2";</strong> |
Then continue building steps, copied from (https://ibotpeaches.github.io/Apktool/build/):
- For steps 3-5 use
./gradlew
for unix based systems orgradlew.bat
for windows. [./gradlew][gradlew.bat] build shadowJar
– Builds Apktool, including final binary.- Optional (You may build a Proguard jar)
[./gradlew][gradlew.bat] build shadowJar proguard
The new apktool.jar will be in (Apktool/brut.apktool/apktool-cli/build/libs/apktool-cli-all.jar)