IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Programmation OpenGL pour Android sous Eclipse


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 108
    Points : 97
    Points
    97
    Par défaut Programmation OpenGL pour Android sous Eclipse
    Bonjour,

    Je voudrais faire du développement OpenGL pour mon Asus Transformer

    Je viens donc d'installer Eclipse 3.7.2 et le SDK Android avec son API version 15 (d'après ce que j'ai compris, c'est la version 15 de l'API Android qu'il faut utiiiser avec la version Android 4.0.3 que j'ai sur mon Asus Transformer TFT101).

    Mais sur le premier exemple BasicGLSurfaceView que je viens d'essayer, il me génère 2 erreurs
    Call require API level 3
    et 1 erreur
    Call require API level 8
    Alors que cet exemple semble pourtant vraiment hyper basique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package com.example.android.basicglsurfaceview;
     
    import android.content.Context;
    import android.opengl.GLSurfaceView;
     
    import android.opengl.GLES20;
     
    class BasicGLSurfaceView extends GLSurfaceView {
        public BasicGLSurfaceView(Context context) {
            super(context);
            setEGLContextClientVersion(2);
            setRenderer(new GLES20TriangleRenderer(context));
        }
    }
    Apparemment, il faut utiliser plusieurs versions d'API sous Android car semble-t-il, il n'y a pas de compatibilité entre les différentes versions/API ?
    Certes, quelques fonctions / méthodes / objets peuvent être dépréciés en route mais bon, en général ça devrait quand même rester relativement compatible d'une version à l'autre, non ?

    A priori, je pensais que Java devait être hyper compatible d'une version et/ou d'une plateforme à l'autre car utilisant du byte code interprété.

    Sinon, dois-je m'attendre à ce qu'il faille la version 2.6.9rev12 de l'API pour l'équivalent en Java du printf() en C, la version 3.4.38rev7 pour l'équivalent du read() et la version 5.2.9rev1398 pour le write()... ?

    Ai-je un problème avec mon installation d'Eclipse + SDK Android sur mon Ubuntu 12.04 ou c'est la gestion des différentes versions des API du SDK Android qui a un problème ?

    Quelqu'un saurait-il m'éclairer par rapport à ces problèmes ?

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 89
    Points : 86
    Points
    86
    Par défaut
    Salut,

    Déjà, la classe GLSurfaceView n'existe que depuis l'API 3 de Android, qu'il te faut spécifier dans le AndroidManifest (avec la balise <use-sdk android:minSdkVersion=[VERSION] />

    Et la fonction : setEGLContextClientVersion que tu utilises, n'est valable que depuis l'API 8 =)

    D'où tes erreurs je pense
    Après, pour pouvoir compiler avec une API 'petite' des fonctionnalités qui n'existaient pas encore, il te faut regarder la balise @TargetApi =)

  3. #3
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 108
    Points : 97
    Points
    97
    Par défaut
    J'ai ça dans le AndroidManifest.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    ** See the License for the specific language governing permissions and
    ** limitations under the License.
    */
    -->
     
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.android.basicglsurfaceview" android:versionCode="11">
        <uses-sdk android:targetSdkVersion="15" android:minSdkVersion="8"/>
        <uses-feature android:glEsVersion="0x00020000"/>
        <application
                android:label="@string/app_name">
            <activity android:name="BasicGLSurfaceViewActivity"
                    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                    android:launchMode="singleTask"
                    android:configChanges="orientation|keyboardHidden">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>
    Et maintenant il me met une fenêtre "Your project contains error(s), please fix them before running your application"

    => peut-on effectuer la compil directement en ligne de commande ?
    (parceque j'ai comme l'impression que c'est Eclipse qui crée plus de pb qu'autre chose ... et en plus je préfère largement directement modifier le manifest à la main plutôt que devoir passer par Eclipse pour le faire, histoire de vraiment comprendre ce que je fais )

    PS : en C sous Linux, c'est "gcc monprogramme.c -o monprogram -lGL -lGLU -lglut" pour compiler un programme qui utilise OpenGL/GLU/GLUT
    => pas besoin de spécifier tout un tas de versions minimum, maximum, target, ... + l'âge du capitaine et de je ne sais encore quoi d'autre dans le manifest.xml et/ou 1000 trucs à modifier/installer/bidouiller sous Eclipse pour ça dédaigne se compiler

    => je viens de trouver un tuto sur ANT, ça m'a l'air d'être le genre de truc
    que je recherche


    @+
    Yannoo

  4. #4
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 108
    Points : 97
    Points
    97
    Par défaut
    J'ai trouvé à l'aide de ces 2 liens

    http://blog.freelan.org/2010/11/22/d...iliser-eclipse

    et

    http://blog.rom1v.com/2012/03/androi...ne-de-commande

    Grace à ces liens, j'ai enfin maintenant le HelloWord de base qui s'affiche sur mon Transformer
    => ça paraît donc tout bon

    Et le plus fort, c'est que ça a marché du 1er coup ...
    (comme je le pensais, Eclipse resemble plus à un gros boulet qui met très longtemps à se charger et qui crée bien plus de problêmes qu'il n'en résoud => bien content de m'être débarrassé de ce mastodonte pataud et lent ... )

    PS : comment fait-on pour avoir un émulateur Android fonctionnel sous Linux [et qui puisse y faire tourner OpenGL] mais qui ne bouffe pas 97% du CPU pour simplement afficher un logo ANDROID avec un effet de lumière/surbrillance qui scrolle ???


    @+
    Yannoo

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par yannoo95170 Voir le message
    Et le plus fort, c'est que ça a marché du 1er coup ...
    (comme je le pensais, Eclipse resemble plus à un gros boulet qui met très longtemps à se charger et qui crée bien plus de problêmes qu'il n'en résoud => bien content de m'être débarrassé de ce mastodonte pataud et lent ... )
    Ca sent le troll .....

    Non sans déconner, rien ne t'oblige à utiliser Eclipse, mais eclipse utilise lui même des bouts de ant en arrière plan (et on peut très bien lui dire de compiler directement avec ant et ne pas utiliser son compilateur par défaut). On peut aussi préférer maven....
    Je n'ai par contre jamais réussi à utiliser Lint depuis ant...

    Et maintenant il me met une fenêtre "Your project contains error(s), please fix them before running your application"
    Et c'est quoi l'erreur ? Tu as essayé de la corriger ?

    => pas besoin de spécifier tout un tas de versions minimum, maximum, target, ... + l'âge du capitaine et de je ne sais encore quoi d'autre dans le manifest.xml et/ou 1000 trucs à modifier/installer/bidouiller sous Eclipse pour ça dédaigne se compiler
    Il faut aller lire un peu de documentation android....

    Tout ce qui est dans le manifest ne sert à rien à la compilation java, RIEN DU TOUT ... Par contre Lint (l'outil de validation) lui s'en sert, pour valider l'ensemble de l'application et les settings.... Si on peut compiler sans Lint, c'est une grossière erreur que de vouloir s'en séparer...

    android:minSdkVersion et android:maxSdkVersion indiquent aux téléphones quelles sont les versions supportées... par exemple, entre 5 et 10... Ça veut dire que l'application ne fonctionne pas sur un systeme level 11 (Honeycomb / 3.0), et nécessite des fonctions apparue avec le level 5 (Eclair / 2.0). Ces valeurs servent non seulement au système pour refuser/autoriser l'installation d'une application, mais aussi lors de la mise à jour du système pour revalider les applications déjà installée... Enfin, elles sont utilisées comme filtre sur GooglePlay pour afficher ou non l'application en fonction du device....

    android:targetSdkVersion indique quelle version du SDK a été utilisée pour compiler... elle est utilisée par le système android pour mettre en place des solutions de rétrocompatibilité (par exemple le menu qui devient action-bar d'ICS, etc...).

    LINT va donc regarder dans les settings du projet quel SDK est utilisé (et le level), il va vérifier que le targetSdkVersion du manifest correspond bien à celui-ci... si c'est pas le cas => erreur.
    Ensuite il va s'assurer que le minSdkVersion est <=, et le maxSdkVersion est >= (si présent).
    Pour finir, il va dans le code, s'assurer qu'il n'y a pas d'appel à une fonction apparue APRES le minSdkVersion... si c'est le cas, il va coller un warning (ou erreur d'ailleurs), à MOINS d'avoir mis l'annotation @TargetApi qui va bien (et qui dit à LINT: je ne rentre dans ce code *que* dans le cas ou le système est en level XX).

    Dans l'exemple ci-dessus, il faut vérifier que le projet est bien en API 15...

  6. #6
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 108
    Points : 97
    Points
    97
    Par défaut
    Merci, GabrielS et Nicroman

    C'est bon, j'ai maintenant une animation OpenGL qui s'execute sur mon Asus Transformer

    Je suis parti de ce lien http://www.scigems.org/Articles/Episode1.php et pris le code source donné par le lien http://www.scigems.org/Articles/episode1.part2.tgz que j'ai décompacté sous un répertoire que j'ai nommé MyAndroidGL

    Puis créer le projet MyAndroidGL avec cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    android update project -p MyAndroidGL -t 1
     
    cd MyAndroidGL
    A noter que j'ai dû un tout petit peu modifier le fichier manifest.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.ellismarkov"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:label="episode1" android:icon="@drawable/icon" android:debuggable="true">
            <activity android:name=".Episode1"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>
    (cf. simplement rajouter le point devant le Episode1 de <activity android:name= )


    Puis lancé ces commandes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ant debug 
     
    adb -s 037c61c344206397 install bin/Episode1-debug.apk
     
    adb shell am start -a android.intent.action.MAIN -n com.ellismarkov/.Episode1
    (pas sûr que le adb -s ai servi à grand chose car je ne vois pas où il a mis ça sur la tablette)


    => et hop là, j'ai maintenant mon premier programme OpenGL fonctionnel qui tourne sur le Transformer

    PS : y'a pas, Eclipse c'est vraiment un boulet ce truc ....
    (enfin de mon point de vue, c'est peut-être assez sûrement un super IDE pour d'autres car il semble pouvoir gérer plein de languages)

    PS2 : je ferais d'ici quelques jours un petit .sh qui regroupera tout ça afin d'automatiser la compilation et le transfert du programme OpenGL ... quand j'aurais vraiment compris comment recopier le programme + son icône où je veux sur le Transformer
    (bon ok, c'est vrai que j'ai des fois un peu tendance à y aller à l'arrache )


    @+
    Yannoo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/05/2011, 16h00
  2. 5554:Android sous Eclipse
    Par LordDaedalus dans le forum Android
    Réponses: 9
    Dernier message: 16/11/2009, 17h09
  3. Dépendances pour Tomcat sous Eclipse
    Par f_aubertin dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 01/04/2009, 14h06
  4. [Plugin]Quel plugin pour JSF sous Eclipse ?
    Par Gabbe_pro dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 03/06/2005, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo