CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Android, compilation et niveaux d'API

Arkwolf
Arkwolf
Niveau 29
21 mai 2014 à 16:15:26

Bonjour :hap:

Sur google play j'ai eu un rapport d'erreur avec cette exception : java.lang.NoSuchMethodError: java.util.LinkedList.peekFirst

Et en effet, l'appareil en question utilise Android 2.2 et cette méthode n'est apparue qu'à l'API 9 (Android 2.3) donc c'est ma faute si ça marche pas sur des appareils sous android 2.2 qui ont l'API 8, soit.

Donc dans éclipse je choisis de compiler avec pour cible android 2.2 (qui n'a donc pas cette fonction)
http://puu.sh/8Vcqt.png

mais j'arrive quand même à faire un APK, sans erreur, alors que la fonction que j'appelle n'est pas sensée exister :( Il se passe quoi du coup ? ça plantera quand même sur un appareil avec android 2.2 n'est-ce pas ? :(

Du coup je sais pas trop comment m'assurer que mon appli fonctionne sur android 2.2 (je pense qu'il n'y a que l'appelle à la méthode qui pose problème, mais j'en suis pas sûr!)

je peux pas tester avec l'émulteur non plus parce que mon application utilise de l'opengl es 2.0 et à priori si on lance l'émulateur on peut pas utiliser opengl es 2.0 sur la version 2.2 d'android donc je suis coincé, je peux pas tester :mort:

mais je comprend pas pourquoi il veut bien compiler mon APK alors que j'ai choisis le niveau d'API 8 et que dans ce niveau d'API LinkedList.peekFirst n'est pas sensé exister :mort:

sachant que j'utilise du code d'un autre projet (dans le build path j'importe un autre projet) et c'est de là que le code qui marche pas vient

Pourquoi ça fait ça :question:
Vous avez une idée de comment je peux me débrouiller ? :(
Y'a pas un outil qui analyse le code et qui défini par exemple le niveau minimal d'API sur lequel ça fonctionnerait ? et ensuite au pire j'essaye de deviner les méthodes qui sont pas disponibles au dessus de l'api 8 :(

c'est la première fois que je rencontre un soucis du genre, et j'ai pas envie de dire que le niveau d'api minimal c'est 9 si effectivement une seule méthode pose ce soucis

vous avez une idée ou je tente à l'aveugle de retirer l'appel à la méthode (de le remplacer uniquement avec java.util.LinkedList.getFirst() qui avait l'air d'exister) et de voir si on va m'envoyer d'autre rapports d'erreurs ? :noel:

Arkwolf
Arkwolf
Niveau 29
21 mai 2014 à 16:33:46

et je précise que dans le manifest j'ai ça à la base

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />

mais même si je le remplace par ça

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" />

ça compile quand même sans erreurs ni warning :doute:

Arkwolf
Arkwolf
Niveau 29
21 mai 2014 à 16:41:50

Bon en fait c'est un soucis d'éclipse, je peux importer du code d'un autre projet sans qu'il fasse de warning / d'erreurs mais si je met ce code dans le projet android en lui même là il sera pas content :(

en gros eclipse vérifie pas les projets qu'il importe c'est un peu nul :(

Bunyan
Bunyan
Niveau 17
21 mai 2014 à 16:58:14

Blâmer l'outil lorsque l'on ne comprend pas les choses... typique :/

Non, Eclipse fonctionne bien de ce côté-là.
Le minSdk et le targetSdk n'ont STRICTEMENT rien à voir avec le "pourquoi ça compile ?".
Le minSdk dans le manifest est une information que tu mets pour dire "j'ai testé sur ces terminaux, ça fonctionnera".
Le targetSdk dans le manifest est une information que tu mets pour dire "j'ai développé mon application pour cette version d'Android, c'est sur elle que ça fonctionnera le mieux".
Ces deux données n'ont strictement rien à voir avec le compilateur, ce sont des informations sur l'application à destination des stores.

Ton problème est que tu utilises une méthode dispo depuis l'API 9.
L'outil "Lint" te permet de relever ce genre de problème en inspection statique.

Ton étonnement sur le fait que ça compile n'a pas lieu d'être : tu n'as pas changé la version que tu utilisais pour compiler.
Pour le faire, ça devrait se trouver dans "Project -> Properties". N'utilisant pas Eclipse, je ne peux pas aider plus.

Ps : j'adore taper sur Eclipse et être légèrement de mauvaise foi dessus :D

Arkwolf
Arkwolf
Niveau 29
21 mai 2014 à 17:01:45

Je peux pas utiliser lint pour ce bout de code justement vu que j'importe le code d'un autre projet, qui est pas forcément d'android (et du coup à la base c'est une LinkedList de l'API java de base)

"Ton étonnement sur le fait que ça compile n'a pas lieu d'être : tu n'as pas changé la version que tu utilisais pour compiler. "
:d) comment ça ? j'ai choisi de compiler uniquement vers l'API 8 non ? (cf le screen que j'avais posté http://puu.sh/8Vcqt.png ) y'a autre chose à faire ? :question:
c'est pour ça que j'avais parlé du manifest

Arkwolf
Arkwolf
Niveau 29
21 mai 2014 à 17:15:29

(quand je dis importer un projet sur eclipse je parle pas de mettre le code dedans, mais utiliser un projet qui peut être utilisé dans d'autres pojets, en l'occurrence j'ai par exemple projet-core, et ensuite projet-desktop, projet-android)
donc c'est normal que projet-core sans rien compile puisque la méthode est présente dans le java "normal"
mais projet-android, qui utilise projet-core, devrait pas compiler, et pourtant eclipse fait pas cette vérification et autorise quand même la compilation)

en fait l'idéal ce serait de pouvoir utiliser lint sur un projet non-android, ce qu'éclipse permet pas (et lint non plus on dirait) :(

Bunyan
Bunyan
Niveau 17
21 mai 2014 à 17:29:41

"Le minSdk dans le manifest est une information que tu mets pour dire "j'ai testé sur ces terminaux, ça fonctionnera".
Le targetSdk dans le manifest est une information que tu mets pour dire "j'ai développé mon application pour cette version d'Android, c'est sur elle que ça fonctionnera le mieux".
Ces deux données n'ont strictement rien à voir avec le compilateur, ce sont des informations sur l'application à destination des stores."

"Pour le faire, ça devrait se trouver dans "Project -> Properties". N'utilisant pas Eclipse, je ne peux pas aider plus. "

Je ne vois pas trop quoi te dire de plus ^^

Arkwolf
Arkwolf
Niveau 29
21 mai 2014 à 17:34:38

Non mais j'ai compris que le minSDK et target SDK c'est juste pour le store en gros :hap:
D'ailleurs je m'en doutais mais je me posais la question de si ça fait autre chose à cause de mon problème, mais visiblement non

Et le truc dans project properties je l'ai visiblement bien fait aussi, puisque la méthode n'est même pas proposée si je l'insère dans le projet d'android

je pense donc que c'est un problème au niveau de la gestion des différents projets dans eclipse

enfin c'est pas grave, j'ai pas utilisé d'autres méthodes louche depuis je pense donc je vais juste utiliser linkedlist.getfirst() et basta :noel:

merci quand même :hap:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment