Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

method in converted class has illegal modifiers: 0xA #23

Open
stephentalley opened this issue Aug 18, 2022 · 8 comments
Open

method in converted class has illegal modifiers: 0xA #23

stephentalley opened this issue Aug 18, 2022 · 8 comments
Labels
bug Something isn't working hacktoberfest

Comments

@stephentalley
Copy link

dex2jar successfully converts the classes in my apk to a jar file.

However, while attempting to inspect those classes in a desktop application with Class.forName(name, false) (note the initialize = false arg), I see this error:

error: unable to process AboutBottomSheet.kt: Method $jacocoInit in class androidx/lifecycle/HasDefaultViewModelProviderFactory has illegal modifiers: 0xA

After some investigating, I'm guessing this corresponds to a default modifier in the HasDefaultViewModelProviderFactory interface (defined by Android):

default CreationExtras getDefaultViewModelCreationExtras() {
    return CreationExtras.Empty.INSTANCE;
}

This modifier was introduced in Java 8 (52), but the Android classes are for Java 6 (50).

So I believe the error results from a newer modifier in an older class version where it was not supported.

Can someone with greater knowledge confirm this suspicion, or comment on what else might be going on?

Incidentally, I tried converting that class to level 52 with d2j-class-version-switch.sh, but the problem remains.

@ThexXTURBOXx
Copy link
Owner

Are you able to share either the whole APK or the specific class file where this issue occurs?

@stephentalley
Copy link
Author

app-debug.zip

Attached is a barebones app where I can reproduce the problem.

Adding classes.jar (generated by d2j-dex2jar.sh) to my classpath and calling Class.forName("com.sas.android.prototype.MainActivity", false) leads to:

E:Main:Main.main:117:
java.lang.ClassFormatError: Method $jacocoInit in class androidx/lifecycle/HasDefaultViewModelProviderFactory has illegal modifiers: 0xA
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:398)
        at com.nerdysoftware.app.korder.Resolver$Companion.forName(Resolver.kt:538)
        at com.nerdysoftware.app.korder.Resolver.resolveSansCache(Resolver.kt:363)
        at com.nerdysoftware.app.korder.Resolver.resolve(Resolver.kt:268)
        at com.nerdysoftware.app.korder.Resolver.resolve(Resolver.kt:152)
        at com.nerdysoftware.app.korder.Formatter.output(Formatter.kt:299)
        at com.nerdysoftware.app.korder.Formatter.output(Formatter.kt:37)
        at com.nerdysoftware.app.korder.Main.main(Main.kt:111)

@ThexXTURBOXx
Copy link
Owner

Sorry, I thought I had responded here: Yes, I indeed think that it might be the default attribute that is causing problems here.
Normally, a 0xA should stand for private static. In the context of interfaces, I would imagine that this identifies a function that has an implementation, i.e., a function with a default attribute. However, this is just my guess.
I will see what I can do about this in a free minute :)

@stephentalley
Copy link
Author

Hi @ThexXTURBOXx, have you had a chance to look into this further?

@ThexXTURBOXx
Copy link
Owner

I tagged this PR as being part of Hacktoberfest.
So, if someone is able to fix and properly test this issue, he is one step closer to completing Hacktoberfest 2022 :)

@ThexXTURBOXx ThexXTURBOXx added the bug Something isn't working label Sep 26, 2022
@stephentalley
Copy link
Author

bump

Is there a workaround I might be able to use here? I just need to determine class hierarchy, so the attribute mismatch shouldn't be fatal.

@ThexXTURBOXx
Copy link
Owner

Alas, I am not sure if there is something, I am sorry. But honestly, I also have not yet had enough time to dig a bit deeper into this. I hope to be able to do this after finishing my Master's Thesis, but that will still take a while...

@stephentalley
Copy link
Author

I understand. Good luck on your thesis!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working hacktoberfest
Projects
None yet
Development

No branches or pull requests

2 participants