comment puis-je ajouter le fichier aidl au studio Android (à partir de l'exemple de facturation dans l'application)

136

Je migre actuellement une application Eclipse vers Android Studio. Cette application utilisait la facturation intégrée à l'application.

Mon principal problème 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

Donc, suite à quelques tutoriels, je déplace ce fichier de com.mypackage.billing vers src / main / aidl (voir cette référence )

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

Gradle: L'exécution a échoué pour la tâche «: xxxxxxxxxxx: compileDebugAidl».

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

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

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

entrez la description de l'image ici

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

Waza_Be
la source
la question est ... ne devrait pas être ce fichier aidl /src/main/aidl/com/android/vending/billing?
Selvin
1
Gradle: l'exécution a échoué pour la tâche «: MyProject: compileDebugAidl». > Impossible d'exécuter la commande: l'interface 45 IInAppBillingService doit être déclarée dans un fichier appelé com \ android \ vending \ billing \ IInAppBillingService.aidl.
Waza_Be
1
quelque chose me dit que vous ne le mettez toujours pas dans le dossier que Selvin et moi disons ...?
Sam Dozor
vient d'ajouter une nouvelle capture d'écran, je pense que je l'ai mise dans le dossier que vous m'avez dit ..
Waza_Be
selvin.pl/TrivialDriveProject.Gradle.zip (changez le répertoire sdk dans local.properties) ... gradlew.bat assembleet cela fonctionne comme un charme ... êtes-vous sûr que ce dossier est / src / main / aidl / com / android / vending / billing pas /src/main/aidl/com.android.vending.billing? AS 0.2.1? Gradle 0,5. +?
Selvin

Réponses:

162

Tout comme le message d'erreur l'indique, vous devez mettre IInAppBillingService.aidldans le bon répertoire dicté par son package (com.android.vending.billing).

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

Sam Dozor
la source
5
Quand je fais cela, j'obtiens: Gradle: erreur: impossible de trouver la classe de symboles IInAppBillingService
Waza_Be
9
donc c'est dans / src / main / aidl / com / android / vending / billing? Utilisez-vous gradle pour construire? Si tel est le cas, appuyez sur le petit bouton Gradle en haut à droite d'Android Studio pour avoir la configuration de rechargement gradle, ou fermez / ouvrez Android Studio.
Sam Dozor
80
Juste pour clarifier. Créez un répertoire aidl sous src / main /. Ajoutez ensuite un nouveau package com.android.vending.billing. Copiez ensuite le fichier aidl dans le nouveau package. Voir code.google.com/p/android/issues/detail?id=56755
Kalel Wade
2
@Kalel Wade C'était la solution pour moi, vous devriez l'ajouter comme réponse.
eski
3
Si vous n'avez pas src / main, créez le répertoire aidl n'importe où et spécifiez dans build.gradle: android {sourceSets {main {aidl {srcDirs 'actual_path ..'
aleb
221

Ajouter cela comme 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 nom de package ' com.android.vending.billing ' au répertoire ' src / main / aidl '
  3. Localisez l'emplacement de votre sdk et accédez à "sdk \ extras \ google \ play_billing". L'emplacement par défaut du SDK est "C: \ Program Files (x86) \ Android \ android-sdk". Si vous l'avez personnalisé, vous devrez déterminer l'emplacement via le gestionnaire SDK.
  4. Copiez «IInAppBillingService.aidl» dans le package créé ci-dessus. En fin de compte, cela devrait ressembler à l'image ci-dessous.

Capture d'écran du résultat

  1. Projet de reconstruction et il devrait être prêt à partir.

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

Modifier à partir du commentaire

Après avoir fait cela, les références à IInAppBillingService dans mon code étaient toujours mises en évidence comme des erreurs, mais après la reconstruction de l'application, la classe a été reconnue

Kalel Wade
la source
1
Juste pour être clair: lisez ceci attentivement! Je n'ai pas ... pour souligner à nouveau: C'est un bon ajout ... METTEZ LE com.android.vending.billing DANS LE NOUVEAU répertoire 'main / aidl'!
Garçon
5
Après cela, les références à IInAppBillingService dans mon code étaient toujours mises en évidence comme des erreurs, mais après la reconstruction de l'application, la classe a été reconnue.
arlomedia
Cela a fonctionné, mais pourquoi tout cela n'est-il pas automatique, lorsque vous choisissez d'ajouter le module?
développeur android
Merci pour le conseil de projet de reconstruction. De plus, le dossier et le package peuvent être créés dans une saveur, il n'est pas nécessaire que ce soit dans main. (Si, par exemple, vous ne faites que la facturation de l'application dans une seule version de votre application)
Mike Fosker
4
J'ai passé 20 minutes à essayer de résoudre ce problème jusqu'à ce que j'arrive à votre réponse. Ensuite, j'ai essayé de voter pour obtenir l'erreur "Vous avez voté pour la dernière fois sur cette réponse ..." Je suppose que certaines personnes n'apprennent jamais :)
beetree
10

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

entrez la description de l'image ici

Zeeawan
la source
9
  • Créer un nouveau répertoire sous src/mainappeléaidl
  • Faites un clic droit sur le répertoire aidl, sélectionneznew->add package
  • Entrez le nom du package com.android.vending.billing

  • Copier IInAppBillingService.aidldu répertoire Android/Sdk/extras/google/play_billingvers le répertoireApp_name/app/src/main/aidl/com/android/vending/billing

  • Maintenant, continuez 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 dans le Buildmenu du studio Android, cliquez sur Rebuild Project. Cela générera un IInAppBillingService.javafichier à l'intérieur App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing. Cela résoudra le problème.
Praveena
la source
@MOHSENNAVABI Pas de problème :-)
Praveena
Après avoir copié le fichier "IInAppBillingService.aidl", est-il nécessaire de changer une ligne de ce fichier? J'ai vu quelques notes demandant de remplacer le nom du paquet car il provient d'un échantillon pour éviter l'erreur "aidl.exe 'terminé avec une valeur de sortie non nulle 1". Quelles sont les instructions spécifiques pour ce faire?
Pablo Alfonso
7

Ajoutez ce code dans build.gradle

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

Reconstruire et importer la classe d'aide

Ahmad Aghazadeh
la source
2

Les réponses ci-dessus se concentrent sur l'emplacement du fichier, mais il semble que vous l'aviez déjà défini correctement. J'ai rencontré ce 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 a résolu ce message d'erreur.

Cette importation n'est mentionnée dans aucun des documents de facturation Google ni incluse dans l'un des exemples de code que j'ai trouvés. Bien que cela puisse être évident pour les développeurs Java expérimentés, les débutants qui essaient simplement d'apprendre leur premier projet peuvent avoir besoin de le signaler explicitement.

Nicolas
la source
1

Nous devons ajouter

  1. créez un dossier - src / main / aidl / nom du pack et placez le fichier aidl sous celui-ci.

  2. Dans le fichier aidl - mentionnez le nom du package. nom du paquet

Maintenant, nettoyez le projet, reconstruisez le projet - Nous pouvons le fichier java correspondant pour l'aide générée dans app \ build \ generated \ source \ aidl \ debug \ packagename \ youraidl.java

Aag1189
la source
0

J'ai essayé toutes les solutions, mais le problème était qu'Android Studio avait compilé, avec une raison apparente, dans un type de construction différent du module contenant les packages AIDL que celui spécifié par les paramètres. Du débogage à la publication , les autres modules ne pouvaient donc pas voir le paquet AIDL. Passer du débogage à la version et revenir en arrière a résolu mon problème.

Alessandro Borile
la source
0

le redémarrage d'Android Studio a fonctionné pour moi

une deuxième chose stupide qui m'a pris du 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

Pellyadolfo
la source