AndroidDeveloperLB/apk-parser

Bug: "ParserException: Unexpected chunk Type: 0x206"

AndroidDeveloperLB opened this issue · 3 comments

I got this on the sample on Pixel 6 with Android 12.1 beta 3 :

can't parse apk for "android" in: "/system/framework/framework-res.apk" - exception:net.dongliu.apk.parser.exception.ParserException: Unexpected chunk Type: 0x206 isSystemApp?true

There are some similar issues on the original repository that were fixed:
https://github.com/hsiafan/apk-parser/issues?q=Unexpected+chunk+Type

Meaning:

hsiafan/apk-parser#52
hsiafan/apk-parser#54
hsiafan/apk-parser#40
hsiafan/apk-parser#49
hsiafan/apk-parser#66
hsiafan/apk-parser#89
hsiafan/apk-parser#111

It seems the original author told me to ignore some chunk types, such as 0x0204 :
hsiafan/apk-parser#96 (comment)
And that it was ignored by treating it in ChunkType class, treating it as NullHeader in ResourceTableParser class.

The proper solution might be related to looking here:
https://android.googlesource.com/platform/frameworks/base/+/master/libs/androidfw/include/androidfw/ResourceTypes.h

Of course, we could ignore this too. I just hope it won't cause an issue.

Attached the sample APK that is problematic, giving this error:

framework-res.zip

Tried to Fix by using the same workaround as 0x0204 , and also renamed the constants according to the Android source code.

Sadly it caused a different issue after this change:

can't parse apk for "android" in: "/system/framework/framework-res.apk" - exception:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String net.dongliu.apk.parser.struct.resource.PackageHeader.getName()' on a null object reference isSystemApp?true

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String net.dongliu.apk.parser.struct.resource.PackageHeader.getName()' on a null object reference
at net.dongliu.apk.parser.struct.resource.ResourcePackage.(ResourcePackage.java:28)
at net.dongliu.apk.parser.parser.ResourceTableParser.readPackage(ResourceTableParser.java:87)
at net.dongliu.apk.parser.parser.ResourceTableParser.parse(ResourceTableParser.java:76)
at com.lb.apkparserdemo.apk_info.ApkInfo$Companion.getApkInfo(ApkInfo.kt:59)
at com.lb.apkparserdemo.MainActivity$performTest$1.invoke(MainActivity.kt:77)
at com.lb.apkparserdemo.MainActivity$performTest$1.invoke(MainActivity.kt:43)
at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)

Any updates on this?

@ujjwalkirorimal Sadly I'm not an expert on the implementation of the parsing. I forked it to:

  1. Fix what I can
  2. Have others that might be able to help
  3. Convert to Kotlin to make it simpler, shorter, and maybe have less bugs. I did this partially but then I reached some places that are harder and will take a lot of effort, because I'm not sure what's allowed there (nullability for example).