как я могу добавить файл 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, на которую я ссылался выше.

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

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

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

Waza_Be
источник
вопрос ... не должен ли быть этот вспомогательный файл /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.

Aag1189
источник
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, глупо с моей стороны

Pellyadolfo
источник