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

Langage Delphi Discussion :

[Android] résultat différent pour le même code compilé sous Delphi 11 CE ou Delphi 12 CE


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 349
    Points : 150
    Points
    150
    Par défaut [Android] résultat différent pour le même code compilé sous Delphi 11 CE ou Delphi 12 CE
    Bonjour,
    Je vais de découverte en découverte avec Delphi 12 CE.
    J'ai un code tout simple que j'utilise sous delphi 11 CE pour demander les autorisations, notamment, Lire et écrire des fichiers et enregistrer du son.
    Sous delphi 11 lorsque je lance le programme pour la première fois, cela me demande bien les autorisations correspondante.
    Sous delphi 12, les autorisations de lecture et écriture des fichiers ne sont pas demandées et apparaissent comme refusées alors que la demande d'autorisation enregistrer du son apparaît bien.
    J'ai donc chercher longtemps pourquoi et je me suis aperçu lors d'une fausse manoeuvre que même si les autorisations de lecture et écriture de fichiers apparaissaient comme refusées, je pouvais quand même faire des opérations sur fichier !
    Il suffit de cocher les cases correspondantes dans les options du projet et il n'y a plus besoin de demander les autorisations par programme !
    J'ai remarqué que les fichiers manifest sont différents selon delphi 11 ou 12. Voici les parties différentes :
    Delphi 11 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="32" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    Delphi 12
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="34" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
        <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    Est-ce que ça pourrait venir de android:targetSdkVersion="34" sur la première ligne et android:maxSdkVersion="32" pour les lignes READ et WRITE_EXTERNAL_STORAGE ?
    Je n'ai pas assez de connaissances sur la syntaxe de ces fichiers pour savoir ce que ça veut dire même si je crois deviner.

    C'est assez pénible ces différences sur android selon le compilateur ... déjà ces demandes d'autorisations c'est très pénible.

    Merci d'avance pour vos lumières.

    Bien cordialement.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 573
    Points : 25 206
    Points
    25 206
    Par défaut
    Cela revient souvent sur le forum, je ne fais pas de FMX ni d'android mais chaque version de Delphi cherche à supporter le plus haut sdk que possible
    Il est donc logique que par défaut, D12 cible la version 34 et gère par retro-compatibilité la version 32

    C'est le problème d'Android, cela impose un tas de truc à chaque fois qu'il sorte une nouvelle version de l'OS, Delphi ne fait que suivre les préconisations.
    Là c'est Android 14
    Sache qu'il y a déjà Android 15 donc level 35, ... Delphi étant un peu en retard sur Android Studio, et l'on trouve énormément ce genre de questions pour Android Studio !
    Même l'outil de dev officiel, les devs ont des galères pour comprendre ces permissions qui changent tous les ans.

    Et avant de changer de version de Delphi, se renseigner sur les évolutions d'Android est un pré-requis.
    je te recommande de lire Gérer tous les fichiers d'un périphérique de stockage - Déclarez l'autorisation MANAGE_EXTERNAL_STORAGE dans le fichier manifeste.

    et la dépréciation en sdk 33 de READ_EXTERNAL_STORAGE qui a changé entre Android 9, 10 et 11 mais qui devient obsolète en 13 - Autorisations de stockage

    Note: Starting in API level 33, this permission has no effect. If your app accesses other apps' media files, request one or more of these permissions instead: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO. Learn more about the storage permissions that are associated with media files.
    Lors de l'ajout de MANAGE_EXTERNAL_STORAGE en version 30, cela ne posait pas de problème pour READ_EXTERNAL_STORAGE
    Mais avec le passage en version 33 (Android 13), c'est une permission qui n'existe plus c'est détaillé ici : Google publie la première bêta d'Android 13 « Tiramisu » : L'OS mobile dispose d'un nouveau système d'autorisation pour les fichiers multimédias de 2022
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 349
    Points : 150
    Points
    150
    Par défaut
    Merci pour toutes ces informations dont je prendrais connaissance en détail ce soir
    Comme d'habitude très pointu shai !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 349
    Points : 150
    Points
    150
    Par défaut
    Alors je viens de lire tout ce que tu m'as conseillé ... et je n'ai quasiment rien compris !
    Ce langage java est vraiment incompréhensible pour moi (comme le C).
    Rien n'est clair comme en pascal.
    Pourquoi compliquer autant la gestion et l'accès aux fichiers ?
    Sous windows, ça n'a jamais provoqué de grosses catastrophes que les fichiers soient quasiment tous accessibles ... et quelle facilité de parcourir toute l'arborescence même depuis la racine. Je me demande si finalement ce n'est pas parce que sans ces restrictions android serait finalement très peu robuste, voire fragile même.
    Et je me suis essayé à gérer quelques fichiers sous mac et c'est quand même beaucoup plus simple.
    Je n'ai toujours pas compris l'objectif de la complexité des opérations sur fichiers (mais pas que !) sous Android et ce n'est pas la doc dont tu m'as transmis les coordonnées qui vont faciliter ma compréhension.
    Mais je vais persister et faire des tests pour essayer de comprendre.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 102
    Points : 41 095
    Points
    41 095
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    J'ajoute mon grain de sel à ce que déjà dit par ShaiLeTroll.
    Il est indiqué dans les notes de versions qu'une migration de programmes android nécessite de vérifier que le manifeste doit migrer (soit en effçant ce dernier, soit en mettant à jour via le menu contextuel (j'ai déjà répondu il y a peu sur le même sujet)
    Une fois cela fait reste les oukazes de Google qui se fait un plaisir de changer régulièrement (tous les ans !) le système de permissions. Ne jetez pas la pierre à Embarcadero s'ils essaient de suivre le mouvement il y a hélas toujours un délai.

    Ma reflexion troll : on commence souvent à être mis le dos au mur avec ces OS Google, Apple et même Microsoft nous prennent de plus en plus en otage !
    Je ne suis pas un adepte de la pomme mais je suis faché par google en encore plus avec Microsoft suite à mes problèmes récurrents d'écrans bleus (à chaque mise à jour , on dirait un forcing pour passer à W11 )
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 349
    Points : 150
    Points
    150
    Par défaut
    Merci Sergio
    Je n'en ai pas après delphi mais après android/google ou la pomme ou Microsoft.
    Tout à fait d'accord avec toi, j'ai de gros problèmes avec ma vieille carte graphique nvidia 8800gts et les dernières maj. Il faut que je réinstalle manuellement les vieux drivers après chaque maj Windows sinon je ne peux plus utiliser la mise en veille prolongée... il faut avouer que mon PC a plus de 16 ans maintenant et même si je l'ai up gradé avec un proc xeon modifié et des ssd il accuse son âge...
    Alors avec les modif logicielles en plus c'est pas terrible
    Par exemple hier soir en lançant delphi 12 ce récemment installé après quelques freezes il a mis plus de 20 minutes à se lancer ! Il était bloqué dans les services d'arrière plan et les chargements des éléments pendant le splash screen à pris des plombes ... pourquoi ? Je me demande s'il n'y a pas quelque chose en tâche de fond pour scanner le PC pour vérifier que les conditions de la version community edition sont bien respectées...

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 349
    Points : 150
    Points
    150
    Par défaut
    Et puis aussi une surprise hier soir avec les colonnes des grid
    Jusqu'à delphi 11 je gérais manuellement l'alignement des titres de colonne en intervenant par code dans le header et en 12 ça ne marche plus ... debogages ... recherches ... jusqu'à ce que je m'aperçoive que ces propriétés sont maintenant accessibles dans le composant à la conception !
    Donc reprendre toutes les grid et les parties de code qui gèrent la création dynamique de colonne pour définir aussi le headersettings (je crois) de chaque colonne ... cette modification de propriétés publiées m'avait échappé... et il y en aura d'autres... comme l'erreur firedac si une table est filtered et que filter est vide ...
    Ça entretient les neurones ...

Discussions similaires

  1. Exécution sur une cible XP d'un code compilé sous W7
    Par TaZStars dans le forum Visual C++
    Réponses: 13
    Dernier message: 31/10/2010, 14h31
  2. lecteur code barre sous delphi
    Par haganidjamel dans le forum Delphi
    Réponses: 3
    Dernier message: 20/12/2006, 19h51
  3. Code compilable sous Windows et Unix
    Par xzed dans le forum C
    Réponses: 9
    Dernier message: 16/05/2006, 16h06
  4. utilisation d'un lecteur de code barre sous delphi
    Par bm10 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 19/11/2005, 20h05

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