как я могу добавить файл aidl в студию Android (из примера биллинга в приложении)


136

В настоящее время я переношу приложение Eclipse на Android Studio. Это приложение использовало биллинг в приложении.

Моя основная проблема - скомпилировать проект и вспомогательный файл (я думаю, вы все используете этот файл )

Я получаю это сообщение об ошибке:

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

Итак, следуя некоторым руководствам, я перемещаю этот файл из com.mypackage.billing в src / main / aidl (см. Эту ссылку )

Но как только я это сделаю, я получаю следующее сообщение:

Gradle: не удалось выполнить задачу ': xxxxxxxxxxx: compileDebugAidl'.

Не удалось выполнить команду: (...) C: \ Users \ xxxx \ AndroidStudioProjects \ xxxxxxProject \ xxxxxxx \ src \ main \ aidl \ IInAppBillingService.aidl: 45 interface IInAppBillingService должен быть объявлен в файле с именем com \ xxxxxxxx \ billing \ IInAppBillingService .aidl.

Сообщение явно противоречит сообщению со страницы ошибок Google, на которую я ссылался выше.

Кому-нибудь удалось заставить этот вспомогательный файл работать и может мне помочь?

введите описание изображения здесь

Чтобы проинформировать, я перешел по некоторым ссылкам:


вопрос ... не должен ли быть этот вспомогательный файл /src/main/aidl/com/android/vending/billing?
— Селвин

1
Gradle: не удалось выполнить задачу ': MyProject: compileDebugAidl'. > Не удалось выполнить команду: 45 интерфейс IInAppBillingService должен быть объявлен в файле с именем com \ android \ vending \ billing \ IInAppBillingService.aidl.
— Waza_Be

1
что-то мне подсказывает, что вы все еще не кладете его в папку, о которой мы с Селвином говорим ...?
— Sam Dozor

только что добавил новый снимок экрана, кажется, я положил его в папку, которую вы мне сказали ..
— Waza_Be

selvin.pl/TrivialDriveProject.Gradle.zip (измените sdk dir в local.properties) ... gradlew.bat assembleи он работает как шарм ... вы уверены, что папка / src / main / aidl / com / android / vending / billing не /src/main/aidl/com.android.vending.billing? AS 0.2.1? Gradle 0.5. +?
— Селвин

Ответы:


163

Как говорится в сообщении об ошибке, вам нужно поместить IInAppBillingService.aidlв правильный каталог, продиктованный его пакетом (com.android.vending.billing).

В src/main/aidl/папке у вас уже есть, поместите .aidlфайл в com/android/vending/billing/.


5
Когда я это делаю, я получаю: Gradle: ошибка: не удается найти класс символов IInAppBillingService
— Waza_Be

9
так это в / src / main / aidl / com / android / vending / billing? Вы используете Gradle для сборки? Если это так, нажмите маленькую кнопку Gradle в правом верхнем углу Android Studio, чтобы настроить перезагрузку Gradle, или закройте / откройте Android Studio.
— Sam Dozor

80
Просто для уточнения. Создайте вспомогательный каталог в src / main /. Затем добавьте новый пакет com.android.vending.billing. Затем скопируйте файл aidl в новый пакет. См. Code.google.com/p/android/issues/detail?id=56755
— Wade,

2
@Kalel Wade Это было решение для меня, вы должны добавить его в качестве ответа.
— eski

3
Если у вас нет src / main, создайте каталог aidl где угодно и укажите в build.gradle: android {sourceSets {main {aidl {srcDirs 'actual_path ..'
— алеб

222

Добавил это в качестве ответа, поскольку, похоже, это помогло довольно многим людям.

  1. Создайте новый каталог с именем «aidl» в «src / main /». Он должен выглядеть как « src / main / aidl ».
  2. Добавление нового пакета имя « com.android.vending.BILLING » в каталог « SRC / главная / aidl »
  3. Найдите свое местоположение SDK и перейдите в «sdk \ extras \ google \ play_billing». Расположение SDK по умолчанию - «C: \ Program Files (x86) \ Android \ android-sdk». Если вы изменили его по собственному усмотрению, то вам придется определять местоположение через диспетчер sdk.
  4. Скопируйте IInAppBillingService.aidl в пакет, созданный выше. В итоге это должно выглядеть примерно так, как на изображении ниже.

Скриншот результата

  1. Восстановите проект, и все должно быть хорошо.

Примечание. Убедитесь, что вы включили необходимый импорт, если ваша ссылка не работает.

import com.android.vending.billing.IInAppBillingService;

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

Редактировать из комментария

После того как я это сделал, ссылки на IInAppBillingService в моем коде по-прежнему выделялись как ошибки, но после перестройки приложения класс был распознан


1
Для ясности: прочтите это внимательно! Я не ... чтобы еще раз подчеркнуть: это хорошее дополнение ... РАЗМЕСТИТЕ com.android.vending.billing В НОВЫЙ каталог 'main / aidl'!
— Boy

5
После того, как я это сделал, ссылки на IInAppBillingService в моем коде по-прежнему выделялись как ошибки, но после перестройки приложения класс был распознан.
— arlomedia

Это сработало, но почему не все происходит автоматически, когда вы решаете добавить модуль?
— разработчик Android

Спасибо за совет по проекту восстановления. Кроме того, папка и пакет могут быть созданы в стиле, не обязательно в главном. (Если, например, вы делаете биллинг только в одном
— варианте

4
Потратил 20 минут, пытаясь решить эту проблему, пока не пришел к вашему ответу. Затем я попытался проголосовать за него, чтобы получить сообщение об ошибке «Вы последний раз голосовали за этот ответ ...» Я думаю, некоторые люди никогда не узнают :)
— beetree

10

Остальные сообщения здесь не работали для меня, пока я не создал новую папку, как показано здесь.

введите описание изображения здесь


9
  • Создайте новый каталог под src/mainназваниемaidl
  • Щелкните правой кнопкой мыши каталог aidl, выберитеnew->add package
  • Введите название пакета com.android.vending.billing

  • Скопировать IInAppBillingService.aidlиз каталога Android/Sdk/extras/google/play_billingв каталогApp_name/app/src/main/aidl/com/android/vending/billing

  • Теперь продолжайте кодирование биллинга InApp, и при определении сервисов, связанных с InApp, вы получите сообщение об ошибке. can not resolve symbol IInAppBillingXXXXXX
  • Теперь Buildперейдите в меню студии Android, нажмите Rebuild Project. Это создаст IInAppBillingService.javaфайл внутри App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing. Это решит проблему.

@MOHSENNAVABI Без проблем :-)
— Praveena

Требуется ли после копирования файла "IInAppBillingService.aidl" изменить какую-либо строку этого файла? Я видел несколько примечаний с просьбой заменить имя пакета, поскольку оно исходит из образца, чтобы избежать ошибки "aidl.exe 'завершено с ненулевым значением выхода 1". Каковы конкретные инструкции для этого?
— Пабло Альфонсо

7

Добавьте этот код в build.gradle

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

Перестроить и импортировать вспомогательный класс


2

Вышеупомянутые ответы сосредоточены на местоположении файла, но, похоже, вы уже правильно его установили. У меня возникла такая же проблема в Android Studio, но ни один из перечисленных ответов не помог ее, и я бился головой о нее в течение часа. В конце концов я понял, что мне не хватает очевидного импорта:

 import com.android.vending.billing.IInAppBillingService;

Как только я добавил, что это сообщение об ошибке устранено.

Этот импорт не упоминается ни в одной из документов Google Billing и не включен ни в один из примеров кода, которые я нашел. Хотя опытным Java-разработчикам это может быть очевидно, новичкам, просто пытающимся изучить свой первый проект, может потребоваться явное указание на это.


1

Нам нужно добавить

  1. создайте папку - src / main / aidl / packagename и поместите в нее файл aidl.

  2. В файле helpl укажите название пакета. package имя_пакета

Теперь очистите проект, перестройте проект - мы можем создать соответствующий java-файл для помощника, сгенерированного в app \ build \ generated \ source \ aidl \ debug \ packagename \ youraidl.java.


1

Я знаю, это звучит так просто, но я копирую вставку из папки Google Sample all.

https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive/app/src/main

помощь / ком / андроид / вендинг / биллинг

скопировано в проект helpl (я установил представление проекта в Android Studio)

а затем я очищаю и перестраиваю проект, и он нашел ссылку.


0

Я пробовал все решения, но проблема заключалась в том, что Android Studio была скомпилирована по какой-либо очевидной причине в другом типе сборки модуля, который содержит пакеты AIDL, чем это было указано в настройках. От отладки до выпуска , поэтому другие модули не могли видеть пакет AIDL. Переход от отладки к выпуску и возвращение, решил мою проблему.


0

перезапуск Android Studio работал у меня

вторая глупость, на которую у меня ушло время. Я сбросил код в Android Studio, чтобы он мог создать файл, но он создал .java (как и ожидалось) вместо .aidl Jiji, глупо с моей стороны

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.