aidl dosyasını Android stüdyosuna nasıl ekleyebilirim (uygulama içi faturalandırma örneğinden)


136

Şu anda bir Eclipse uygulamasını Android Studio'ya taşıyorum. Bu uygulama, uygulama içi faturalandırmayı kullanıyordu.

Benim asıl sorun proje ve aidl dosyasını derlemek (sanırım hepiniz bu dosyayı kullanmak )

Bu hata iletisini alıyorum:

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

Bu nedenle, bazı öğreticilerden sonra bu dosyayı com.mypackage.billing'ten src / main / aidl'e taşıyorum ( bu referansa bakın )

Ama bunu yapar yapmaz, şu mesajı alıyorum:

Gradle: ': xxxxxxxxxxx: compileDebugAidl' görevi için yürütme başarısız oldu.

Komut çalıştırılamadı: (...) C: \ Users \ xxxx \ AndroidStudioProjects \ xxxxxxProject \ xxxxxxx \ src \ main \ aidl \ IInAppBillingService.aidl: 45 arabirimi IInAppBillingService com \ xxxxxxxx \ billing \ IInAppBillingService adlı bir dosyada bildirilmelidir .aidl.

İleti, yukarıda bağlantı verdiğim Google hata sayfasındaki gönderiyle açıkça bir çelişki.

Herkes bu aidl dosyasını çalışmak için başarılı oldu ve bana yardımcı olabilir?

resim açıklamasını buraya girin

Sadece bilgilendirmek için takip ettiğim bazı bağlantılar:


soru ... bu aidl dosyası olmamalı /src/main/aidl/com/android/vending/billing?
Selvin

1
Gradle: '' Projem: compileDebugAidl 'görevi için yürütme başarısız oldu. > Komut çalıştırılamadı: 45 arabirimi IInAppBillingService, com \ android \ vending \ billing \ IInAppBillingService.aidl adlı bir dosyada bildirilmelidir.
Waza_Be

1
bir şey bana hala Selvin ve ben dediğim klasöre koymadığını söylüyor ...?
Sam Dozor

yeni bir ekran görüntüsü ekledim, sanırım bana söylediğin klasöre koydum ..
Waza_Be

selvin.pl/TrivialDriveProject.Gradle.zip ( local.properties içinde sdk dizinini değiştirin) ... gradlew.bat assembleve bir cazibe gibi çalışır ... klasörün / src / main / aidl / com / android / vending / billing olduğundan emin misiniz? /src/main/aidl/com.android.vending.billing değil mi? AS 0.2.1? Kepçe 0.5. +?
Selvin

Yanıtlar:


162

Hata mesajının söylediği gibi, IInAppBillingService.aidlpaketinin belirlediği doğru dizini (com.android.vending.billing) koymanız gerekir .

İçinde src/main/aidl/zaten sahip klasörde, koyun .aidldosyayı com/android/vending/billing/.


5
Bunu yaptığımda şunu alıyorum: Gradle: error: sembol sınıfı IInAppBillingService
Waza_Be

9
yani / src / main / aidl / com / android / vending / billing? İnşa etmek için kepçe mi kullanıyorsun? Öyleyse, derecelendirme yeniden yükleme yapılandırması için Android Studio'nun sağ üst kısmındaki küçük derecelendirme düğmesine basın veya Android Studio'yu kapatın / açın.
Sam Dozor

80
Sadece netleştirmek için. Src / main / altında bir dizin aidl oluşturun. Ardından yeni bir paket com.android.vending.billing ekleyin. Ardından aidl dosyasını yeni pakete kopyalayın. Bkz. Code.google.com/p/android/issues/detail?id=56755
Kalel Wade

2
@Kalel Wade Bu benim için bir çözümdü, bir cevap olarak eklemelisin.
eski

3
Src / main dosyanız yoksa, aidl dizinini herhangi bir yerde oluşturun ve build.gradle içinde belirtin: android {sourceSets {main {aidl {srcDirs 'actual_path ..'
aleb

221

Bunu bir cevap olarak eklemek, birkaç insana yardımcı gibi görünüyordu.

  1. 'Src / main /' altında 'aidl' adlı yeni bir dizin oluşturun . ' Src / main / aidl ' şeklinde görünmelidir .
  2. ' Src / main / aidl ' dizinine ' com.android.vending.billing ' adlı yeni bir paket adı ekleyin
  3. Sdk konumunuzu bulun ve "sdk \ extras \ google \ play_billing" e gidin. Sdk için varsayılan konum "C: \ Program Files (x86) \ Android \ android-sdk" şeklindedir. Özel olarak değiştirdiyseniz, konumu sdk yöneticisi aracılığıyla anlamanız gerekir.
  4. 'IInAppBillingService.aidl' dosyasını yukarıda oluşturulan pakete kopyalayın . Sonunda, aşağıdaki resme benzer görünmelidir.

Sonucun ekran görüntüsü

  1. Projeyi yeniden oluştur ve gitmek iyi olmalı.

Not: Başvurunuz çalışmıyorsa gerekli içe aktarmayı eklediğinizden emin olun

import com.android.vending.billing.IInAppBillingService;

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

Yorumdan Düzenle

Bunu yaptıktan sonra, kodumdaki IInAppBillingService referansları hala hata olarak vurgulanmıştı, ancak uygulamayı yeniden oluşturduktan sonra sınıf tanındı


1
Açık olmak gerekirse: bunu iyice okuyun! Ben tekrar vurgulamak için yapmadım: Bu iyi bir ektir ... com.android.vending.billing YENİ 'main / aidl' dizinine koyun!
Erkek

5
Bunu yaptıktan sonra, kodumdaki IInAppBillingService referansları hala hata olarak vurgulanmıştı, ancak uygulamayı yeniden oluşturduktan sonra sınıf tanındı.
arlomedia

Bu işe yaradı, ancak modülü eklemeyi seçtiğinizde neden hepsi otomatik değil?
android geliştirici

Yeniden oluşturma projesi için teşekkürler. Ayrıca klasör ve paket bir lezzet içinde oluşturulabilir, ana olmak zorunda değildir. (Örneğin, yalnızca uygulamanızın bir lezzetinde uygulama faturalandırması yaparsanız)
Mike Fosker

4
Cevabınıza gelene kadar bu sorunu çözmeye çalışırken 20 dakika geçirdim. Sonra "Bu cevaba en son oy verdiniz ..." hatasını almayı denedim ve sanırım bazı insanlar asla öğrenmiyor :)
beetree

10

Burada gösterilen gibi yeni bir klasör oluşturana kadar buradaki diğer yayınlar benim için çalışmadı .

resim açıklamasını buraya girin


9
  • src/mainAranan altında yeni dizin oluşturaidl
  • Dizinde sağ tıklayın aidl, seçmeknew->add package
  • Paketin adını girin com.android.vending.billing

  • Kopya IInAppBillingService.aidldizinden Android/Sdk/extras/google/play_billingdizineApp_name/app/src/main/aidl/com/android/vending/billing

  • Şimdi InApp faturalandırma kodlaması ile devam edin ve InApp ile ilgili hizmetleri tanımlarken bir hata alırsınız can not resolve symbol IInAppBillingXXXXXX
  • Şimdi Buildandroid stüdyo menüsünden gidin, tıklayın Rebuild Project. Bu IInAppBillingService.javaiçeride dosya oluşturur App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing. Bu sorunu çözecektir.

@MOHSENNAVABI Sorun değil :-)
Praveena

"IInAppBillingService.aidl" dosyasını kopyaladıktan sonra, bu dosyanın herhangi bir satırını değiştirmek gerekiyor mu? Hata "aidl.exe 'sıfır olmayan çıkış değeri 1 ile bitmiş" hata önlemek için bir örnek geliyor paket adını değiştirmek isteyen bazı notlar gördüm. Bunu yapmak için özel talimatlar nelerdir?
Pablo Alfonso

7

Bu kodu build.gradle içine ekleyin

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

Yardım sınıfını yeniden oluşturma ve içe aktarma


2

Yukarıdaki yanıtlar dosya konumuna odaklanır, ancak doğru ayarladığınız anlaşılıyor. Aynı sorunu Android Studio'da da yaşadım, ancak listelenen cevapların hiçbiri bunu çözmedi ve bir saat boyunca başımı ona çarptım. Sonunda, belirgin bir ithalat eksik olduğumu fark ettim:

 import com.android.vending.billing.IInAppBillingService;

Bunu ekledikten sonra bu hata mesajını çözdü.

Bu içe aktarma işlemi, Google Faturalandırma dokümanlarının hiçbirinde belirtilmedi veya bulduğum kod örneklerinin hiçbirine dahil edilmedi. Deneyimli Java geliştiricileri için açık olsa da, sadece ilk projelerini öğrenmeye başlayan yeni başlayanlar, açıkça belirtilmesi gerekebilir.


1

Eklememiz gerek

  1. klasör oluştur - src / main / aidl / packagename ve aidl dosyasını bunun altına yerleştirin.

  2. Aidl dosyasında - paket adını belirtin. paket paket adı

Şimdi projeyi temizleyin, projeyi yeniden oluşturun - app \ build \ created \ source \ aidl \ debug \ packagename \ youraidl.java içinde oluşturulan aidl için ilgili java dosyasını yapabiliriz



0

Her çözümü denedim, ancak sorun, Android Studio'nun, herhangi bir nedenden ötürü, AIDL paketlerini içeren modülün ayarlar tarafından belirtilenden farklı bir yapı türünde derlemiş olmasıydı. Gönderen Hata ayıklamak açıklamasına , diğer modüller AIDL pkg göremiyordu böylece. Hata ayıklamadan serbest bırakma ve geri dönme, sorunumu çözdü.


0

Android Studio'yu yeniden başlatmak benim için çalıştı

beni biraz zaman alan ikinci aptalca şey. Dosyayı oluşturmasına izin vermek için Android Studio'daki kodu bıraktım, ancak benim aptal yerine .aidl Jiji yerine bir .java (beklendiği gibi) oluşturdu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.