web-dev-qa-db-fra.com

comment puis-je ajouter le fichier aidl à Android Studio (à partir de l'exemple de facturation intégrée à l'application)

Je suis en train de migrer une application Eclipse vers Android Studio . Cette application utilisait la facturation intégrée à l'application.

Mon problème principal est de compiler le projet et le fichier aidl (je suppose que vous utilisez tous ce fichier )

Je reçois ce message d'erreur: 

Gradle: error: cannot find symbol class IInAppBillingService
Gradle: error: package IInAppBillingService does not exist

Ainsi, après quelques tutoriels, je déplace ce fichier de com.mypackage.billing vers src/main/aidl (Voir this reference )

Mais dès que je fais ça, je reçois ce message:

Titre: Échec de l'exécution pour la tâche ': xxxxxxxxxxx: compileDebugAidl'.

Échec de l'exécution de la commande: (...) C:\Utilisateurs\xxxx\AndroidStudioProjects\xxxxxxProject\xxxxxxx\src\main\aidl\IInAppBillingService.aidl: 45 L'interface IInAppBillingService doit être déclarée dans un fichier nommé com\xxxxxxxx\billing\IInAppBillingService.aidl.

Le message est clairement une contradiction avec le message de la page de bogue Google que j'ai liée ci-dessus.

Quelqu'un a réussi à faire fonctionner ce fichier et peut m'aider?

enter image description here

Juste pour informer, quelques liens que j'ai suivis:

132
Waza_Be

Tout comme le message d'erreur le dit, vous devez mettre IInAppBillingService.aidl dans le bon répertoire, dicté par son package (com.Android.vending.billing).

Dans le dossier src/main/aidl/ que vous avez déjà, placez le fichier .aidl dans com/Android/vending/billing/.

159
Sam Dozor

Ajouter cela comme une réponse, car cela semblait aider pas mal de gens.

  1. Créez un nouveau répertoire nommé 'aidl' sous 'src/main /'. Cela devrait ressembler à 'src/main/aidl'.
  2. Ajoutez un nouveau package nom 'com.Android.vending.billing' dans le répertoire 'src/main/aidl'
  3. Localisez votre emplacement sdk et accédez à "sdk\extras\google\play_billing". "C:\Program Files (x86)\Android\android-sdk" est l'emplacement par défaut du sdk. Si vous l'avez modifié, vous devrez déterminer l'emplacement via le gestionnaire de SDK.
  4. Copiez 'IInAppBillingService.aidl' dans le package créé ci-dessus. En fin de compte, il devrait ressembler à l'image ci-dessous.

Screenshot of result

  1. Rebuild project et ça devrait être bien d'aller.

Remarque: assurez-vous d'inclure l'importation nécessaire si votre référence ne fonctionne pas.

import com.Android.vending.billing.IInAppBillingService;

https://issuetracker.google.com/issues/36973270

Editer un commentaire

Après cela, les références à IInAppBillingService dans mon code étaient toujours signalées comme des erreurs, mais après la reconstruction de l'application, la classe était reconnue.

216
Kalel Wade

Le reste des messages ici ne fonctionnait pas pour moi jusqu'à ce que je crée un nouveau dossier comme indiqué ici.

 enter image description here

9
zeeawan
  • Créer un nouveau répertoire sous src/main appelé aidl
  • Faites un clic droit sur le répertoire aidl, sélectionnez new->add package
  • Entrez le nom du paquet com.Android.vending.billing

  • Copiez IInAppBillingService.aidl du répertoire Android/Sdk/extras/google/play_billing dans le répertoire App_name/app/src/main/aidl/com/Android/vending/billing

  • Continuez maintenant avec le codage de facturation InApp et lors de la définition des services liés à InApp, vous obtiendrez une erreur can not resolve symbol IInAppBillingXXXXXX
  • Maintenant, allez à Build du menu du studio Android, cliquez sur Rebuild Project. Cela générera un fichier IInAppBillingService.Java dans App_Name/app/build/generated/source/aidl/debug/com/Android/vending/billing. Cela résoudra le problème.
7
Praveena

Ajoutez ce code dans build.gradle

Android {
    sourceSets {
        main {
            aidl.srcDirs = ['src']
        }
    }
}

Reconstruire et importer une classe d'aide

5
Ahmad Aghazadeh

Les réponses ci-dessus se concentrent sur l'emplacement du fichier, mais il semble que vous l'avez déjà défini correctement. J'ai rencontré le même problème dans Android Studio, mais aucune des réponses répertoriées ne l'a résolu et je me suis cogné la tête pendant une heure. Finalement, j'ai réalisé qu'il me manquait une importation évidente:

 import com.Android.vending.billing.IInAppBillingService;

Une fois que j'ai ajouté qu'il résolvait ce message d'erreur.

Cette importation n'est mentionnée dans aucune des documentations Google Billing ni dans les exemples de code que j'ai trouvés. Bien que cela puisse sembler évident aux développeurs Java expérimentés, les débutants qui souhaitent simplement apprendre leur premier projet peuvent avoir besoin de le mentionner explicitement.

2
Nicholas

Nous devons ajouter 

  1. créer un dossier - src/main/aidl/packagename et placer le fichier aidl sous celui-ci.

  2. Dans le fichier aidl, indiquez le nom du package . Package nom_package

Maintenant, nettoyez le projet, reconstruisez-le. Nous pouvons trouver le fichier Java correspondant à l'aide générée dans app\build\généré\source\aidl\debug\nomdu paquet\nomaid.Java

1
Aag1189

Je sais que cela semble si facile, mais je copie coller de google sample all folder 

https://github.com/googlesamples/Android-play-billing/tree/master/TrivialDrive/app/src/main

aidl/com/Android/distributeurs automatiques/facturation

copié dans project aidl (j'avais défini la vue du projet dans Android Studio)

et ensuite j'ai nettoyé et reconstruit le projet et il a trouvé une référence. 

1
Natalia Majkowska

redémarrer Android Studio a fonctionné pour moi

une deuxième chose stupide qui m'a pris un certain temps. J'ai laissé tomber le code sur Android Studio pour lui permettre de créer le fichier, mais il a créé un .Java (comme prévu) à la place d'un .aidl Jiji, stupide de ma part.

0
pellyadolfo

J'ai essayé toutes les solutions, mais le problème était qu'Android Studio avait compilé, sans aucune raison apparente, dans un type de version du module contenant les packages AIDL différent de celui spécifié par les paramètres . From debug pour libérer , afin que les autres modules ne puissent pas voir le paquet AIDL . Passer de debug à release et revenir en arrière, a résolu mon problème.

0
Alessandro Borile