jak mogę dodać plik AIDL do Android Studio (z przykładu rozliczenia w aplikacji)

136

Obecnie przeprowadzam migrację aplikacji Eclipse do Android Studio. Ta aplikacja korzystała z rozliczeń w aplikacji.

Moim głównym problemem jest skompilowanie projektu i pliku pomocy (chyba wszyscy używacie tego pliku )

Otrzymuję ten komunikat o błędzie:

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

Tak więc, po kilku samouczkach, przenoszę ten plik z com.mypackage.billing do src / main / aidl (zobacz to odniesienie )

Ale gdy tylko to zrobię, otrzymuję wiadomość:

Gradle: nie powiodło się wykonanie zadania „: xxxxxxxxxxx: compileDebugAidl”.

Nie udało się uruchomić polecenia: (...) C: \ Users \ xxxx \ AndroidStudioProjects \ xxxxxxProject \ xxxxxxx \ src \ main \ aidl \ IInAppBillingService.aidl: 45 interfejs IInAppBillingService należy zadeklarować w pliku o nazwie com \ xxxxxxxx \ billing \ IInAppBillingService .aidl.

Wiadomość jest wyraźnie sprzeczna z postem ze strony błędów Google, do której linkowałem powyżej.

Czy ktoś zdołał sprawić, by ten plik pomocy działał i może mi pomóc?

wprowadź opis obrazu tutaj

Dla przypomnienia kilka linków, które poszedłem:

Waza_Be
źródło
pytanie brzmi ... czy nie powinien być ten plik pomocy /src/main/aidl/com/android/vending/billing?
Selvin,
1
Gradle: wykonanie nie powiodło się dla zadania „: MyProject: compileDebugAidl”. > Błąd uruchomienia polecenia: 45 interfejs IInAppBillingService należy zadeklarować w pliku o nazwie com \ android \ vending \ billing \ IInAppBillingService.aidl.
Waza_Be,
1
coś mi mówi, że nadal nie umieszczasz tego w folderze, o którym mówimy z Selvinem ...?
Sam Dozor,
właśnie dodałem nowy zrzut ekranu, myślę, że umieściłem go w folderze, który mi powiedziałeś ..
Waza_Be
selvin.pl/TrivialDriveProject.Gradle.zip (zmień katalog sdk w local.properties) ... gradlew.bat assemblei działa jak marzenie ... jesteś pewien, że folder to / src / main / aidl / com / android / vending / billing nie /src/main/aidl/com.android.vending.billing? AS 0.2.1? Gradle 0.5. +?
Selvin,

Odpowiedzi:

162

Tak jak mówi komunikat o błędzie, musisz umieścić IInAppBillingService.aidlw odpowiednim katalogu podyktowanym przez jego pakiet (com.android.vending.billing).

Wewnątrz src/main/aidl/folderu masz już, umieścić .aidlplik com/android/vending/billing/.

Sam Dozor
źródło
5
Kiedy to zrobić, uzyskać: Gradle: błąd: nie można odnaleźć klasy symbol IInAppBillingService
Waza_Be
9
więc jest w / src / main / aidl / com / android / vending / billing? Czy używasz Gradle do budowania? Jeśli tak, naciśnij mały przycisk gradle w prawym górnym rogu Android Studio, aby skonfigurować ponowne załadowanie gradle, lub zamknij / otwórz Android Studio.
Sam Dozor,
80
Aby wyjaśnic. Utwórz katalog aidl w src / main /. Następnie dodaj nowy pakiet com.android.vending.billing. Następnie skopiuj plik pomocy do nowego pakietu. Zobacz code.google.com/p/android/issues/detail?id=56755
Kalel Wade,
2
@Kalel Wade To było dla mnie rozwiązanie, należy je dodać jako odpowiedź.
eski
3
Jeśli nie masz src / main, utwórz katalog aidl w dowolnym miejscu i określ w build.gradle: android {sourceSets {main {aidl {srcDirs 'current_path ..' '
aleb
221

Dodając to jako odpowiedź, ponieważ wydawało się, że pomogło to wielu osobom.

  1. Utwórz nowy katalog o nazwie „aidl” w katalogu „src / main /”. Powinien wyglądać jak „ src / main / aidl ”.
  2. Dodaj nową nazwę pakietucom.android.vending.billing ” do katalogu „ src / main / aidl
  3. Zlokalizuj swoją lokalizację sdk i przejdź do „sdk \ extras \ google \ play_billing”. Domyślna lokalizacja pakietu SDK to „C: \ Program Files (x86) \ Android \ android-sdk”. Jeśli zmieniłeś to na zamówienie, będziesz musiał ustalić lokalizację za pomocą menedżera SDK.
  4. Skopiuj „IInAppBillingService.aidl” do utworzonego powyżej pakietu. Ostatecznie powinien wyglądać podobnie do poniższego obrazu.

Zrzut ekranu wyniku

  1. Przebuduj projekt i powinno być dobrze.

Uwaga: upewnij się, że uwzględnisz niezbędny import, jeśli Twój plik referencyjny nie działa

import com.android.vending.billing.IInAppBillingService;

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

Edytuj z komentarza

Po wykonaniu tej czynności odwołania do IInAppBillingService w moim kodzie nadal były podświetlane jako błędy, ale po przebudowaniu aplikacji klasa została rozpoznana

Kalel Wade
źródło
1
Dla jasności: przeczytaj to dokładnie! Nie ... aby jeszcze raz podkreślić: To jest dobry dodatek ... WSTAWCIE com.android.vending.billing W NOWYM katalogu „main / aidl”!
Boy
5
Po tym, jak to zrobiłem, odwołania do IInAppBillingService w moim kodzie były nadal podświetlane jako błędy, ale po przebudowaniu aplikacji klasa została rozpoznana.
arlomedia
To zadziałało, ale dlaczego nie dzieje się to automatycznie, kiedy zdecydujesz się dodać moduł?
programista Androida
Dzięki za wskazówkę dotyczącą projektu przebudowy. Również folder i paczka mogą być tworzone w stylu, nie muszą być w main. (Jeśli na przykład rozliczasz się tylko w jednej wersji aplikacji)
Mike Fosker,
4
Spędziłem 20 minut, próbując rozwiązać ten problem, aż doszedłem do twojej odpowiedzi. Następnie próbowałem zagłosować za nim, aby uzyskać błąd „Ostatni raz głosowałeś na tę odpowiedź ...” Myślę, że niektórzy ludzie nigdy się nie uczą :)
beetree
10

Reszta postów tutaj nie działała, dopóki nie utworzyłem nowego folderu, jak pokazano tutaj.

wprowadź opis obrazu tutaj

zeeawan
źródło
9
  • Utwórz nowy katalog pod src/mainnazwanymaidl
  • Kliknij katalog prawym przyciskiem myszy aidl, wybierznew->add package
  • Wpisz nazwę pakietu com.android.vending.billing

  • Skopiuj IInAppBillingService.aidlz katalogu Android/Sdk/extras/google/play_billingdo kataloguApp_name/app/src/main/aidl/com/android/vending/billing

  • Teraz przejdź do kodowania rozliczeń InApp, a podczas definiowania usług powiązanych z InApp pojawi się błąd can not resolve symbol IInAppBillingXXXXXX
  • Teraz Buildprzejdź do menu studia Android, kliknij Rebuild Project. Spowoduje to wygenerowanie IInAppBillingService.javapliku wewnątrz App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing. To rozwiąże problem.
Praveena
źródło
@MOHSENNAVABI Nie ma problemu :-)
Praveena
Czy po skopiowaniu pliku „IInAppBillingService.aidl” wymagana jest zmiana dowolnego wiersza tego pliku? Widziałem kilka notatek z prośbą o zastąpienie nazwy pakietu, ponieważ pochodzi z próbki, aby uniknąć błędu „aidl.exe” zakończony niezerową wartością wyjścia 1 ”. Jakie są szczegółowe instrukcje, aby to zrobić?
Pablo Alfonso
7

Dodaj ten kod w pliku build.gradle

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

Przebuduj i zaimportuj klasę AIDL

Ahmad Aghazadeh
źródło
2

Powyższe odpowiedzi koncentrują się na lokalizacji pliku, ale wydaje się, że masz już to ustawione poprawnie. Doświadczyłem tego samego problemu w Android Studio, ale żadna z wymienionych odpowiedzi go nie rozwiązała i przez godzinę waliłem w to głową. W końcu zdałem sobie sprawę, że brakuje mi oczywistego importu:

 import com.android.vending.billing.IInAppBillingService;

Kiedy dodałem, że rozwiązało ten komunikat o błędzie.

Ten import nie jest wspomniany w żadnym dokumencie rozliczeniowym Google ani w żadnym ze znalezionych przykładów kodu. Chociaż może to być oczywiste dla doświadczonych programistów Java, początkujący użytkownicy, którzy chcą się nauczyć swojego pierwszego projektu, mogą wymagać wyraźnego wskazania go.

Mikołaja
źródło
1

Musimy dodać

  1. utwórz folder - src / main / aidl / packagename i umieść pod nim plik aidl.

  2. W pliku pomocy - podaj nazwę pakietu. nazwa pakietu

Teraz wyczyść projekt, odbuduj projekt - możemy odpowiadać plikowi java dla pomocy wygenerowanej w app \ build \ generated \ source \ aidl \ debug \ nazwa_pakietu \ youraidl.java

Aag1189
źródło
0

Wypróbowałem wszystkie rozwiązania, ale problem polegał na tym, że Android Studio skompilowało, z jakiegokolwiek wyraźnego powodu, w innym typie kompilacji modułu, który zawiera pakiety AIDL, niż określono w ustawieniach. Od debugowania do wydania , więc inne moduły nie widziały pakietu AIDL. Przełączenie się z debugowania na wydanie i odwrócenie rozwiązało mój problem.

Alessandro Borile
źródło
0

ponowne uruchomienie Android Studio zadziałało dla mnie

druga głupia rzecz, która zajęła mi chwilę. Upuściłem kod w Android Studio, aby umożliwić mu utworzenie pliku, ale stworzył plik .java (zgodnie z oczekiwaniami) zamiast .aidl Jiji, głupi z mojej strony

pellyadolfo
źródło