atomashpolskiy / bt

BitTorrent library and client with DHT, magnet links, encryption and more
https://atomashpolskiy.github.io/bt/
Apache License 2.0
2.42k stars 381 forks source link

java.lang.NoSuchMethodError: No virtual method getAnnotatedSuperclass()Ljava/lang/reflect/AnnotatedType; in class Ljava/lang/Class; or its super classes (declaration of 'java.lang.Class' appears in /apex/com.android.art/javalib/core-oj.jar) #215

Open md-rifatkhan opened 2 years ago

md-rifatkhan commented 2 years ago

java.lang.NoSuchMethodError: No virtual method getAnnotatedSuperclass()Ljava/lang/reflect/AnnotatedType; in class Ljava/lang/Class; or its super classes (declaration of 'java.lang.Class' appears in /apex/com.android.art/javalib/core-oj.jar)

CombustibleIce commented 1 year ago

java.lang.NoSuchMethodError: No virtual method getAnnotatedSuperclass()Ljava/lang/reflect/AnnotatedType; in class Ljava/lang/Class; or its super classes (declaration of 'java.lang.Class' appears in /apex/com.android.art/javalib/core-oj.jar)

have you solved it?

pvishnyakov commented 1 year ago

This is because Class in ART doesn't have the methods required by MapBinder (Guice extension). In standard Java RT the methods are in place. I have managed it to work in Android, need to do several things:

  1. Add Cling repository to the project Gradle repositories (allprojects):

        maven {
            url 'http://4thline.org/m2'
            allowInsecureProtocol = true
        }
  2. Create module's Gradle dependencies as follows - comment UPnP library, exclude original Guice, add Roboguice:

    implementation 'org.roboguice:roboguice:4.0.0'
    compileOnly 'org.roboguice:roboblender:4.0.0'
    implementation ('com.google.inject.extensions:guice-multibindings:4.0') {
        exclude module: 'guice'
    }
    implementation 'org.fourthline.cling:cling-core:2.1.2';
    implementation 'org.fourthline.cling:cling-support:2.1.2';
    implementation ('com.github.atomashpolskiy:bt-core:1.10') {exclude group: 'com.google.inject', module: 'guice'}
    implementation ('com.github.atomashpolskiy:bt-http-tracker-client:1.10') {exclude group: 'com.google.inject', module: 'guice'}
    implementation ('com.github.atomashpolskiy:bt-dht:1.10') {exclude group: 'com.google.inject', module: 'guice'}
    implementation ('com.github.atomashpolskiy:bt-bencoding:1.10') {exclude group: 'com.google.inject', module: 'guice'}
    //    implementation ('com.github.atomashpolskiy:bt-upnp:1.10') {exclude group: 'com.google.inject', module: 'guice'}
  3. Download the source code of BT-UPnP, copy "bt" folder and all its contents to the module's src/main

  4. Modify "JettyAsyncUpnpServiceConfiguration.java" to make the class declaration like this:

    public class JettyAsyncUpnpServiceConfiguration extends AndroidUpnpServiceConfiguration

Basically that's all, should start working. But I have another problem now, only 2 peers are connected and only 3 pieces are downloaded while the same code works fine in desktop Java.