2017-01-09 1 views
1

Je suis nouveau dans le développement Android et j'essaie d'implémenter les fonctionnalités Bluetooth LE sur mon application. J'ai quelques difficultés pour exécuter mon projet android avec RXAndroidBLE. Cette librairie utilise lambda et je ne suis pas capable de la faire fonctionner.

J'ai mis à jour mon dossier gradle:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "com.example.maxime.applicationtest" 
     minSdkVersion 18 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
     jackOptions { 
      enabled true 
     } 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:25.1.0' 
    testCompile 'junit:junit:4.12' 
    compile "com.polidea.rxandroidble:rxandroidble:1.1.0" 
} 

Lorsque je tente d'exécuter le code suivant dans mon MainActivity, une erreur apparaît:

protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 
     RxBleClient rxBleClient = RxBleClient.create(this); 
 

 
     Subscription scanSubscription = rxBleClient.scanBleDevices() 
 
       .subscribe(
 
         rxBleScanResult -> { 
 
          // Process scan result here. 
 
          Log.e("DEVICE", rxBleScanResult.getBleDevice().getName()); 
 
         }, 
 
         throwable -> { 
 
          // Handle an error here. 
 
         } 
 
       ); 
 

 
// When done, just unsubscribe. 
 
     scanSubscription.unsubscribe(); 
 
    }

FATAL EXCEPTION: Thread-4847 
    Process: com.example.maxime.applicationtest, PID: 27342 
     java.lang.NoSuchMethodError: No virtual method com_polidea_rxandroidble_internal_radio_RxBleRadioImpl$$Lambda$1_lambda$new$0()V in class Lcom/polidea/rxandroidble/internal/radio/RxBleRadioImpl; or its super classes (declaration of 'com.polidea.rxandroidble.internal.radio.RxBleRadioImpl' appears in /data/app/com.example.maxime.applicationtest-1/base.apk) 
     at com.polidea.rxandroidble.internal.radio.RxBleRadioImpl$$Lambda$1.run(Unknown Source) 
     at java.lang.Thread.run(Thread.java:818) 

Je ne sais pas pourquoi ça ne va pas.

Si quelqu'un pouvait m'aider ce serait génial. Merci!

Répondre

0

J'ai finalement trouvé une solution en supprimant jackOptions. Maintenant, cela fonctionne comme un charme.

+1

ne fonctionne pas pour moi. Si je supprime jackOptions, il me dit d'ajouter jackOptions. 'Jack est requis pour prendre en charge les fonctions de langage Java 8. Activez Jack ou supprimez sourceCompatibility JavaVersion.VERSION_1_8.' – paakjis

0

J'ai également eu ce problème. Mais juste enlever jackOptions n'a pas fonctionné. J'ai dû ajouter retrolambda à mon projet. Mon build gradle ressemble maintenant à ceci:

apply plugin: 'com.android.application' 
apply plugin: 'me.tatarka.retrolambda' 

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'me.tatarka:gradle-retrolambda:3.3.1' 
    } 
} 

repositories { 
    mavenLocal() 
} 

android { 
    compileSdkVersion 24 
    buildToolsVersion "24.0.3" 
    defaultConfig { 
     applicationId "com.trump.islove" 
     minSdkVersion 18 
     targetSdkVersion 24 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:24.2.1' 
    compile "com.polidea.rxandroidble:rxandroidble:1.1.0" 
    compile 'com.jakewharton:butterknife:8.4.0' 
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' 
    testCompile 'junit:junit:4.12' 
} 
0

vous devez écrire à votre fichier build.gradle:

apply plugin: 'me.tatarka.retrolambda' 

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'me.tatarka:gradle-retrolambda:3.3.1' 
    } 
}