2017-01-09 5 views
1

Я новичок в Android Developement, и я пытаюсь реализовать функции Bluetooth LE в своем приложении. У меня возникли трудности с запуском моего проекта Android с помощью RXAndroidBLE. Эта библиотека использует лямбда, и я не могу ее запустить.

Я обновил свой 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" 
} 

Когда я пытаюсь запустить следующий код в моем MainActivity, выводится сообщение об ошибке:

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) 

Я понятия не имею, почему это происходит не так.

Если бы кто-нибудь мог мне помочь, было бы здорово. Спасибо!

ответ

0

Я, наконец, нашел решение, удалив jackOptions. Теперь он работает как шарм.

+1

Не работает для меня. Если я удалю jackOptions, он подскажет мне добавить jackOptions. 'Jack необходим для поддержки функций языка java 8. Либо включить Джек, либо удалить исходную совместимость JavaVersion.VERSION_1_8.' – paakjis

0

Если бы эта проблема тоже. Но просто удалить jackOptions не получилось. Пришлось добавить retrolambda в мой проект. Моя сборка Gradle теперь выглядит следующим образом:

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

вы должны написать в файл build.gradle:

apply plugin: 'me.tatarka.retrolambda' 

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'me.tatarka:gradle-retrolambda:3.3.1' 
    } 
} 
Смежные вопросы