Wie kann ich die Hilfedatei zu Android Studio hinzufügen (aus dem In-App-Abrechnungsbeispiel)?

136

Ich migriere derzeit eine Eclipse-App nach Android Studio. Diese App verwendete die In-App-Abrechnung.

Mein Hauptproblem ist das Kompilieren des Projekts und der Hilfedatei (ich denke, Sie alle verwenden diese Datei )

Ich erhalte diese Fehlermeldung:

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

Nach einigen Tutorials verschiebe ich diese Datei von com.mypackage.billing nach src / main / aidl (siehe diese Referenz ).

Aber sobald ich das tue, bekomme ich folgende Nachricht:

Gradle: Ausführung für Task ': xxxxxxxxxxx: compileDebugAidl' fehlgeschlagen.

Befehl konnte nicht ausgeführt werden: (...) C: \ Benutzer \ xxxx \ AndroidStudioProjects \ xxxxxxProject \ xxxxxxx \ src \ main \ aidl \ IInAppBillingService.aidl: 45 Schnittstelle IInAppBillingService sollte in einer Datei mit dem Namen com \ xxxxxxxx \ billing \ IInAppBillingService deklariert werden .aidl.

Die Nachricht ist eindeutig ein Widerspruch zu dem Beitrag von der Google-Fehlerseite, die ich oben verlinkt habe.

Hat es jemand geschafft, diese Hilfedatei zum Laufen zu bringen und kann mir helfen?

Geben Sie hier die Bildbeschreibung ein

Nur zur Information, einige Links, denen ich gefolgt bin:

Waza_Be
quelle
Frage ist ... sollte diese Hilfedatei nicht sein /src/main/aidl/com/android/vending/billing?
Selvin
1
Gradle: Ausführung für Aufgabe ': MyProject: compileDebugAidl' fehlgeschlagen. > Befehl konnte nicht ausgeführt werden: 45 Schnittstelle IInAppBillingService sollte in einer Datei mit dem Namen com \ android \ vending \ billing \ IInAppBillingService.aidl deklariert werden.
Waza_Be
1
Etwas sagt mir, dass Sie es immer noch nicht in den Ordner legen, den Selvin und ich sagen ...?
Sam Dozor
Ich habe gerade einen neuen Screenshot hinzugefügt. Ich glaube, ich habe ihn in den Ordner gelegt, den Sie mir gesagt haben.
Waza_Be
selvin.pl/TrivialDriveProject.Gradle.zip (sdk-Verzeichnis in local.properties ändern) ... gradlew.bat assembleund es funktioniert wie ein Zauber ... sind Sie sicher, dass der Ordner / src / main / aidl / com / android / vending / billing ist nicht /src/main/aidl/com.android.vending.billing? AS 0.2.1? Gradle 0,5. +?
Selvin

Antworten:

162

Wie in der Fehlermeldung angegeben, müssen Sie IInAppBillingService.aidldas richtige Verzeichnis eingeben, das vom Paket vorgegeben wird (com.android.vending.billing).

src/main/aidl/Legen Sie die .aidlDatei in dem Ordner ab, den Sie bereits haben com/android/vending/billing/.

Sam Dozor
quelle
5
Wenn ich das mache, bekomme ich: Gradle: Fehler: Symbolklasse IInAppBillingService
Waza_Be
9
Also ist es in / src / main / aidl / com / android / vending / billing? Verwenden Sie Gradle zum Bauen? Wenn ja, klicken Sie auf die kleine Gradle-Schaltfläche oben rechts in Android Studio, um die Gradle-Reload-Konfiguration zu erhalten, oder schließen / öffnen Sie Android Studio.
Sam Dozor
80
Nur um klarzustellen. Erstellen Sie eine Verzeichnishilfe unter src / main /. Fügen Sie dann ein neues Paket com.android.vending.billing hinzu. Kopieren Sie dann die Hilfedatei in das neue Paket. Siehe code.google.com/p/android/issues/detail?id=56755
Kalel Wade
2
@ Kalel Wade Dies war die Lösung für mich, Sie sollten es als Antwort hinzufügen.
Eski
3
Wenn Sie nicht über src / main verfügen, erstellen Sie das Verzeichnis aidl an einer beliebigen Stelle und geben Sie in build.gradle Folgendes an: android {sourceSets {main {aidl {srcDirs 'actual_path ..'
aleb
221

Dies als Antwort hinzuzufügen, da es einigen Menschen zu helfen schien.

  1. Erstellen Sie ein neues Verzeichnis mit dem Namen 'aidl' unter 'src / main /'. Es sollte wie ' src / main / aidl ' aussehen .
  2. Fügen Sie dem Verzeichnis ' src / main / aidl ' einen neuen Paketnamen ' com.android.vending.billing ' hinzu.
  3. Suchen Sie Ihren SDK-Speicherort und gehen Sie zu "SDK \ Extras \ Google \ Play_Billing". Der Standardspeicherort für das SDK ist "C: \ Programme (x86) \ Android \ android-sdk". Wenn Sie es benutzerdefiniert geändert haben, müssen Sie den Speicherort über den SDK-Manager ermitteln.
  4. Kopieren Sie 'IInAppBillingService.aidl' in das oben erstellte Paket. Am Ende sollte es ähnlich wie im Bild unten aussehen.

Screenshot des Ergebnisses

  1. Projekt neu erstellen und es sollte gut sein zu gehen.

Hinweis: Stellen Sie sicher, dass Sie den erforderlichen Import einschließen, wenn Ihre Referenz nicht funktioniert

import com.android.vending.billing.IInAppBillingService;

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

Aus Kommentar bearbeiten

Nachdem ich dies getan hatte, wurden die Verweise auf IInAppBillingService in meinem Code immer noch als Fehler hervorgehoben, aber nach dem erneuten Erstellen der App wurde die Klasse erkannt

Kalel Wade
quelle
1
Um ganz klar zu sein: Lesen Sie dies gründlich durch! Ich habe nicht ... um noch einmal zu betonen: Es ist eine gute Ergänzung ... Legen Sie die com.android.vending.billing in das neue 'main / aidl'-Verzeichnis!
Junge
5
Nachdem ich dies getan hatte, wurden die Verweise auf IInAppBillingService in meinem Code immer noch als Fehler hervorgehoben, aber nach dem erneuten Erstellen der App wurde die Klasse erkannt.
Arlomedia
Das hat funktioniert, aber warum ist das nicht alles automatisch, wenn Sie das Modul hinzufügen?
Android-Entwickler
Vielen Dank für den Tipp zum Wiederaufbau des Projekts. Auch der Ordner und das Paket können in einer Variante erstellt werden, es muss nicht in main sein. (Wenn Sie zum Beispiel nur eine App in einer App abrechnen)
Mike Fosker
4
Ich habe 20 Minuten damit verbracht, dieses Problem zu lösen, bis ich zu Ihrer Antwort kam. Dann habe ich versucht, es zu verbessern, um den Fehler "Sie haben zuletzt über diese Antwort abgestimmt ..." zu erhalten. Ich denke, einige Leute lernen nie :)
Beetree
10

Der Rest der Beiträge hier hat bei mir nicht funktioniert, bis ich einen neuen Ordner wie hier gezeigt erstellt habe.

Geben Sie hier die Bildbeschreibung ein

Zeeawan
quelle
9
  • Erstellen Sie ein neues Verzeichnis unter src/mainaufgerufenaidl
  • Klicken Sie mit der rechten Maustaste auf das Verzeichnis aidlund wählen Sienew->add package
  • Geben Sie den Namen des Pakets ein com.android.vending.billing

  • Kopieren Sie IInAppBillingService.aidlaus dem Verzeichnis Android/Sdk/extras/google/play_billingin das VerzeichnisApp_name/app/src/main/aidl/com/android/vending/billing

  • Fahren Sie nun mit der InApp-Abrechnungscodierung fort. Beim Definieren von InApp-bezogenen Diensten wird eine Fehlermeldung angezeigt can not resolve symbol IInAppBillingXXXXXX
  • Gehen Sie nun zum BuildAndroid Studio-Menü und klicken Sie auf Rebuild Project. Dadurch wird eine IInAppBillingService.javaDatei im Inneren generiert App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing. Dies wird das Problem lösen.
Praveena
quelle
@ MOHSENNAVABI Kein Problem :-)
Praveena
Muss nach dem Kopieren der Datei "IInAppBillingService.aidl" eine Zeile dieser Datei geändert werden? Ich habe einige Notizen gesehen, in denen darum gebeten wurde, den Paketnamen zu ersetzen, da er aus einem Beispiel stammt, um den Fehler "aidl.exe 'mit einem Exit-Wert ungleich Null von 1 zu vermeiden" zu vermeiden. Was sind die spezifischen Anweisungen, um dies zu tun?
Pablo Alfonso
7

Fügen Sie diesen Code in build.gradle hinzu

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

Hilfeklasse neu erstellen und importieren

Ahmad Aghazadeh
quelle
2

Die obigen Antworten konzentrieren sich auf den Speicherort der Datei, aber anscheinend haben Sie diese bereits richtig eingestellt. Ich hatte das gleiche Problem in Android Studio, aber keine der aufgelisteten Antworten löste es und ich schlug eine Stunde lang mit dem Kopf dagegen. Schließlich stellte ich fest, dass mir ein offensichtlicher Import fehlte:

 import com.android.vending.billing.IInAppBillingService;

Einmal habe ich hinzugefügt, dass es diese Fehlermeldung behoben hat.

Dieser Import wird in keinem der Google Billing-Dokumente erwähnt oder in einem der Codebeispiele enthalten, die ich gefunden habe. Während es für erfahrene Java-Entwickler offensichtlich sein mag, müssen Anfänger, die nur versuchen, ihr erstes Projekt zu lernen, möglicherweise ausdrücklich darauf hingewiesen werden.

Nikolaus
quelle
1

Wir müssen hinzufügen

  1. Erstelle einen Ordner - src / main / aidl / packagename und platziere die Aidl-Datei darunter.

  2. Geben Sie in der Hilfedatei den Paketnamen an. Paket Paketname

Bereinigen Sie nun das Projekt, erstellen Sie das Projekt neu. Wir können die entsprechende Java-Datei für die Hilfe in app \ build \ generate \ source \ aidl \ debug \ packagename \ youraidl.java erstellen

Aag1189
quelle
0

Ich habe alle Lösungen ausprobiert, aber das Problem war, dass Android Studio aus irgendeinem offensichtlichen Grund einen anderen Build-Typ des Moduls kompiliert hatte, der die AIDL-Pakete enthält, als in den Einstellungen angegeben. Vom Debug bis zur Veröffentlichung konnten die anderen Module das AIDL-Paket nicht sehen. Der Wechsel vom Debug zum Release und das Zurückkehren haben mein Problem gelöst.

Alessandro Borile
quelle
0

Der Neustart von Android Studio hat bei mir funktioniert

eine zweite dumme Sache, die mich eine Weile gekostet hat. Ich habe den Code in Android Studio gelöscht, damit er die Datei erstellen kann, aber er hat eine .java (wie erwartet) anstelle einer .aidl Jiji erstellt, dumm von mir

Pellyadolfo
quelle