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

Android: No virtual method position(I)Ljava/nio/ByteBuffer #516

Closed
dbrgn opened this issue Nov 21, 2019 · 10 comments · Fixed by #567
Closed

Android: No virtual method position(I)Ljava/nio/ByteBuffer #516

dbrgn opened this issue Nov 21, 2019 · 10 comments · Fixed by #567
Assignees
Labels

Comments

@dbrgn
Copy link

dbrgn commented Nov 21, 2019

Since version 0.8.19, our Android CI (using Android 5 and 6 devices) started failing on a msgpack test. Here's a simplified reproducer:

@RunWith(AndroidJUnit4.class)
@SmallTest
public class MsgpackTest {
	@Test
	public void testPutString() throws Exception {
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		MessagePacker packer = MessagePack.newDefaultPacker(out);
		packer.packString("hello android");
	}
}

The error message:

java.lang.NoSuchMethodError: No virtual method position(I)Ljava/nio/ByteBuffer; in class Ljava/nio/ByteBuffer; or its super classes (declaration of 'java.nio.ByteBuffer' appears in /system/framework/core-libart.jar)
  at org.msgpack.core.buffer.MessageBufferU.resetBufferPosition(MessageBufferU.java:70)
  at org.msgpack.core.buffer.MessageBufferU.putBytes(MessageBufferU.java:232)
  at org.msgpack.core.MessagePacker.addPayload(MessagePacker.java:1073)
  at org.msgpack.core.MessagePacker.addPayload(MessagePacker.java:1043)
  at org.msgpack.core.MessagePacker.packStringWithGetBytes(MessagePacker.java:659)
  at org.msgpack.core.MessagePacker.packString(MessagePacker.java:732)
  ...

This is most probably due to the changes in #514 (cc @ppkarwasz). The test succeeds when running with msgpack-core version 0.8.18.

@xerial xerial added the bug label Nov 21, 2019
@ppkarwasz
Copy link
Contributor

ppkarwasz commented Nov 22, 2019

I believe the library must have been compiled against the wrong JRE (i.e. Java's 11 JRE was used instead of Java's 7/8): in Java 8 the classByteBuffer inherits the position method from Bufferand has a return type of java.nio.Buffer. On Java 11 the method is overridden with an implementation that returns java.nio.ByteBuffer.

@dbrgn: can you compile the library from source and check if it still fails the tests?

@bananaumai
Copy link

I also faced same issues. I'm using this library for Android Project. As @ppkarwasz said, jvmTarget is configured as 1.8.

@dbrgn
Copy link
Author

dbrgn commented Nov 26, 2019

@dbrgn: can you compile the library from source and check if it still fails the tests?

My local Java version:

$ java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)

I compiled the library locally:

./sbt publishM2

Then I added the local maven repo to my gradle file:

repositories {
    ...
    maven { url "/home/<user>/.m2/repository" }
}

...and finally forced msgpack to resolve to the snapshot version:

configurations.all {
    resolutionStrategy.force 'org.msgpack:msgpack-core:0.8.20-SNAPSHOT'
}

With that configuration, the test passes, so I think you're right. Maybe you can release a fix?

@ppkarwasz
Copy link
Contributor

@xerial, can you make another release? Version 0.8.19 is almost certainly compiled against JRE 11 and linking problems occur, when using another JRE.

Maybe it is possible to setup Travis CI to run the test against the jar file, so oversights like this don't occur?

@xerial
Copy link
Member

xerial commented Nov 27, 2019

Got it. Thanks for the investigation.

We can add such an integration test using GitHub Action. First, I'll try to automate the release process to make sure to produce Java8 compatible jar files.

@xerial xerial self-assigned this Nov 27, 2019
@xerial
Copy link
Member

xerial commented Nov 27, 2019

Released 0.8.20 built with jdk8.

@dbrgn
Copy link
Author

dbrgn commented Nov 28, 2019

Tthank you!

@dbrgn
Copy link
Author

dbrgn commented May 15, 2021

@xerial unfortunately this problem is back, the test in the initial post fails again on Android 5 with msgpack-core 0.8.23, but it works fine with 0.8.22.

@xerial
Copy link
Member

xerial commented May 17, 2021

@dbrgn Thanks for reporting. We have changed the release process to use GitHub Action, and now it will always use JDK8 for the release. Just release 0.8.24 built with JDK8.

@dbrgn
Copy link
Author

dbrgn commented May 17, 2021

@xerial great, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants