web-dev-qa-db-fra.com

PeripheralManagerService émet NoClassDefFoundError

J'ai le code suivant dans mon application pour accéder à PeripheralManagerService:

PeripheralManagerService service = new PeripheralManagerService();
Gpio ledGpio;
try {
    ledGpio = service.openGpio("BCM6");
    ledGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
} catch (IOException e) {
    Log.e(TAG, "Error configuring GPIO pins", e);
}

Après la mise à jour vers la dernière version d'Android Things (Developer Preview 7), mon application génère maintenant Un NoClassDefFoundError:

Java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/Android/things/pio/PeripheralManagerService;
...
Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.google.Android.things.pio.PeripheralManagerService" on path: DexPathList[...]

Ce code fonctionnait auparavant, pourquoi cela a-t-il commencé après la mise à jour?

5
Devunwired

À compter de Preview 7, les services de l'API Android Things ne sont pas construits en tant que nouvelles instances . Au lieu de cela, ils sont accessibles en tant que singletons via getInstance() pour être plus conformes aux paradigmes des API Android. Certaines des classes, telles que PeripheralManagerService ont également été renommées.

Assurez-vous de mettre à jour votre application pour utiliser le kit de développement Preview 7:

dependencies {
    compileOnly 'com.google.Android.things:androidthings:0.7-devpreview'
}

Puis modifiez votre code pour accéder à la PeripheralManager à la place:

PeripheralManager manager = PeripheralManager.getInstance();
Gpio ledGpio;
try {
    ledGpio = manager.openGpio("BCM6");
    ledGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
} catch (IOException e) {
    Log.e(TAG, "Error configuring GPIO pins", e);
}

Passez en revue les objets Android Référence de l'API Pour vérifier si l'un des autres API que vous appelez a changé.

13
Devunwired

Plutôt que d'utiliser PeripheralManagerService service = new PeripheralManagerService(); use 

PeripheralManager peripheralManager=PeripheralManager.getInstance();
0
Koustuv Ganguly

J'ai rencontré le même problème mais la solution ci-dessus n'a pas fonctionné pour moi. J'essayais de créer un projet d'affichage alphanumérique en choisissant new-> project et en choisissant Android Things. Le fichier de construction de gradle généré ressemblait à celui ci-dessous. Notez que le pilote pour ht16k33 a la version 0.3. Cela a causé le problème. Une fois que j'ai changé à 1.0 le problème ClassNotFound est parti.

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.google.Android.things.contrib:driver-ht16k33:0.3'
    implementation 'com.Android.support:support-v4:28.0.0-beta01'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.Android.support.test:runner:1.0.2'
    androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
    compileOnly 'com.google.Android.things:androidthings:+'

}

0
Mir3