come posso aggiungere il file aidl ad Android Studio (dall'esempio di fatturazione in-app)


136

Attualmente sto migrando un'app Eclipse su Android Studio. Questa app utilizzava la fatturazione in-app.

Il mio problema principale è compilare il progetto e il file aidl (immagino che tutti voi usiate questo file )

Ricevo questo messaggio di errore:

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

Quindi, seguendo alcuni tutorial, sposto questo file da com.mypackage.billing a src / main / aidl (vedi questo riferimento )

Ma non appena lo faccio, ricevo questo messaggio:

Grado: esecuzione non riuscita per l'attività ': xxxxxxxxxxx: compileDebugAidl'.

Impossibile eseguire il comando: (...) C: \ Users \ xxxx \ AndroidStudioProjects \ xxxxxxProject \ xxxxxxx \ src \ main \ aidl \ IInAppBillingService.aidl: 45 interfaccia IInAppBillingService deve essere dichiarata in un file chiamato com \ xxxxxxx \ billing \ IInAppBillingService .aidl.

Il messaggio è chiaramente in contraddizione con il post dalla pagina bug di Google che ho linkato sopra.

Qualcuno è riuscito a far funzionare questo file helpl e mi può aiutare?

inserisci qui la descrizione dell'immagine

Solo per informare, alcuni link che ho seguito:


domanda è ... non dovrebbe essere questo file di aiuto in /src/main/aidl/com/android/vending/billing?
Selvin,

1
Gradle: esecuzione non riuscita per l'attività ': MyProject: compileDebugAidl'. > Impossibile eseguire il comando: 45 interfaccia IInAppBillingService deve essere dichiarata in un file chiamato com \ android \ vending \ billing \ IInAppBillingService.aidl.
Waza_Be,

1
qualcosa mi dice che non lo stai ancora mettendo nella cartella che Selvin e io stiamo dicendo ...?
Sam Dozor,

appena aggiunto un nuovo screenshot, penso di averlo messo nella cartella che mi hai detto ..
Waza_Be

selvin.pl/TrivialDriveProject.Gradle.zip (cambia dir sdk in local.properties) ... gradlew.bat assemblee funziona come un incantesimo ... sei sicuro che la cartella sia / src / main / aidl / com / android / vending / billing non /src/main/aidl/com.android.vending.billing? AS 0.2.1? Grado 0,5. +?
Selvin,

Risposte:


162

Proprio come dice il messaggio di errore, è necessario inserire IInAppBillingService.aidlla directory corretta dettata dal pacchetto (com.android.vending.billing).

Nella src/main/aidl/cartella che hai già, inserisci il .aidlfile com/android/vending/billing/.


5
Quando lo faccio, ottengo: Grado: errore: impossibile trovare la classe di simboli IInAppBillingService
Waza_Be

9
quindi è in / src / main / aidl / com / android / vending / fatturazione? Stai usando Gradle per costruire? In tal caso, premi il piccolo pulsante Gradle in alto a destra di Android Studio per avere la configurazione di ricarica Gradle o chiudi / apri Android Studio.
Sam Dozor,

80
Tanto per chiarire. Crea una directory helpl in src / main /. Quindi aggiungere un nuovo pacchetto com.android.vending.billing. Quindi copia il file aidl nel nuovo pacchetto. Vedi code.google.com/p/android/issues/detail?id=56755
Kalel Wade il

2
@Kalel Wade Questa è stata la soluzione per me, dovresti aggiungerla come risposta.
eski

3
Se non hai src / main, crea la directory aidl ovunque e specifica in build.gradle: android {sourceSets {main {aidl {srcDirs 'actual_path ..'
aleb

221

Aggiungendo questo come una risposta poiché sembrava aiutare parecchie persone.

  1. Crea una nuova directory chiamata 'aidl' sotto 'src / main /'. Dovrebbe apparire come ' src / main / aidl '.
  2. Aggiungi un nuovo nome di pacchetto ' com.android.vending.billing ' alla directory ' src / main / aidl '
  3. Individua la tua posizione sdk e vai su "sdk \ extras \ google \ play_billing". Il percorso predefinito per sdk è "C: \ Programmi (x86) \ Android \ android-sdk". Se l'hai modificato su misura, dovrai capire la posizione tramite il gestore sdk.
  4. Copia "IInAppBillingService.aidl" nel pacchetto creato sopra. Alla fine, dovrebbe apparire simile all'immagine qui sotto.

Schermata del risultato

  1. Ricostruisci il progetto e dovrebbe andare bene.

Nota: assicurati di includere l'importazione necessaria se il tuo riferimento non funziona

import com.android.vending.billing.IInAppBillingService;

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

Modifica dal commento

Dopo averlo fatto, i riferimenti a IInAppBillingService nel mio codice erano ancora evidenziati come errori, ma dopo aver ricostruito l'app, la classe è stata riconosciuta


1
Giusto per essere chiari: leggi attentamente! Non ho ... enfatizzato di nuovo: è una buona aggiunta ... Metti la com.android.vending.billing nella nuova directory 'main / aidl'!
Ragazzo,

5
Dopo averlo fatto, i riferimenti a IInAppBillingService nel mio codice erano ancora evidenziati come errori, ma dopo aver ricostruito l'app, la classe è stata riconosciuta.
arlomedia,

Ha funzionato, ma perché non è tutto automatico, quando si sceglie di aggiungere il modulo?
sviluppatore Android il

Grazie per il consiglio di ricostruzione del progetto. Anche la cartella e il pacchetto possono essere creati in un certo modo, non deve essere in main. (Se, ad esempio,
esegui

4
Ho passato 20 minuti a cercare di risolvere questo problema fino a quando non sono arrivato alla tua risposta. Poi ho provato a votarlo per ottenere l'errore "Hai votato per l'ultima volta su questa risposta ..." Suppongo che alcune persone non impareranno mai :)
Beetree,

10

Il resto dei post qui non ha funzionato per me fino a quando non ho creato una nuova cartella come mostrato qui.

inserisci qui la descrizione dell'immagine


9
  • Crea una nuova directory sotto src/mainchiamataaidl
  • Fare clic con il tasto destro sulla directory aidl, selezionarenew->add package
  • Inserisci il nome del pacchetto com.android.vending.billing

  • Copia IInAppBillingService.aidldalla directory Android/Sdk/extras/google/play_billingalla directoryApp_name/app/src/main/aidl/com/android/vending/billing

  • Ora vai avanti con la codifica di fatturazione InApp e durante la definizione dei servizi correlati a InApp riceverai un errore can not resolve symbol IInAppBillingXXXXXX
  • Ora vai al Buildmenu Android Studio, fai clic su Rebuild Project. Questo genererà IInAppBillingService.javafile all'interno App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing. Questo risolverà il problema.

@MOHSENNAVABI Nessun problema :-)
Praveena,

Dopo aver copiato il file "IInAppBillingService.aidl", è necessario modificare una riga di questo file? Ho visto alcune note che chiedono di sostituire il nome del pacchetto in quanto proviene da un campione per evitare l'errore "aidl.exe 'finito con valore di uscita diverso da zero 1". Quali sono le istruzioni specifiche per farlo?
Pablo Alfonso,

7

Aggiungi questo codice in build.gradle

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

Ricostruisci e importa la classe helpl


2

Le risposte sopra si concentrano sulla posizione del file, ma sembra che tu l'abbia già impostato correttamente. Ho riscontrato lo stesso problema in Android Studio, ma nessuna delle risposte elencate lo ha risolto e ho sbattuto la testa per un'ora. Alla fine, mi sono reso conto che mi mancava un'importazione ovvia:

 import com.android.vending.billing.IInAppBillingService;

Una volta ho aggiunto che ha risolto questo messaggio di errore.

Questa importazione non è menzionata in nessuno dei documenti di fatturazione di Google o inclusa in nessuno degli esempi di codice che ho trovato. Mentre può essere ovvio per gli sviluppatori Java esperti, i principianti che stanno solo cercando di imparare il loro primo progetto potrebbero averne bisogno esplicitamente sottolineato.


1

Dobbiamo aggiungere

  1. crea cartella - src / main / aidl / nomepacchetto e posiziona il file aidl sotto questo.

  2. Nel file helpl - menziona il nome del pacchetto. nome pacchetto pacchetto

Ora ripulisci il progetto, ricostruisci il progetto - Possiamo il file java corrispondente per l'helpl generato in app \ build \ generate \ source \ aidl \ debug \ nomepacchetto \ youraidl.java



0

Ho provato tutte le soluzioni, ma il problema era che Android Studio aveva compilato, con qualsiasi motivo apparente, un tipo di build diverso del modulo che contiene i pacchetti AIDL rispetto a quanto specificato dalle impostazioni. Dal debug al rilascio , quindi gli altri moduli non potevano vedere il pacchetto AIDL. Passare dal debug al rilascio e tornare indietro, risolto il mio problema.


0

riavviare Android Studio ha funzionato per me

una seconda cosa sciocca che mi ha richiesto un po 'di tempo. Ho lasciato cadere il codice su Android Studio per consentirgli di creare il file, ma ha creato un .java (come previsto) anziché un .aidl Jiji, stupido da parte mia

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.