como posso adicionar o arquivo aidl ao Android studio (no exemplo de cobrança no aplicativo)

136

Atualmente, estou migrando um aplicativo Eclipse para o Android Studio. Este aplicativo estava usando o faturamento no aplicativo.

Meu principal problema é compilar o projeto e o arquivo aidl (acho que todos vocês usam esse arquivo )

Recebo esta mensagem de erro:

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

Portanto, seguindo alguns tutoriais, movo esse arquivo de com.mypackage.billing para src / main / aidl (consulte esta referência )

Mas assim que faço isso, recebo esta mensagem:

Gradle: Falha na execução da tarefa ': xxxxxxxxxxx: compileDebugAidl'.

Falha ao executar o comando: (...) C: \ Users \ xxxx \ AndroidStudioProjects \ xxxxxxProject \ xxxxxxx \ src \ main \ aidl \ IInAppBillingService.aidl: 45 A interface IInAppBillingService deve ser declarada em um arquivo chamado com \ xxxxxxxx \ billing \ IInAppBillingService .aidl.

A mensagem é claramente uma contradição com a postagem da página de bug do Google que eu vinculei acima.

Alguém conseguiu fazer esse arquivo de ajuda funcionar e pode me ajudar?

insira a descrição da imagem aqui

Só para informar, alguns links que eu segui:

Waza_Be
fonte
pergunta é ... não deve ser este arquivo de ajuda /src/main/aidl/com/android/vending/billing?
Selvin
1
Gradle: Falha na execução da tarefa ': MyProject: compileDebugAidl'. > Falha ao executar o comando: 45 a interface IInAppBillingService deve ser declarada em um arquivo chamado com \ android \ vending \ billing \ IInAppBillingService.aidl.
24513 Waza_Be
1
algo me diz que você ainda não está colocando na pasta que Selvin e eu estamos dizendo ...?
Sam Dozor
acabou de adicionar uma nova imagem, eu acho que eu colocá-lo na pasta que você me disse ..
Waza_Be
selvin.pl/TrivialDriveProject.Gradle.zip (alterar o diretório sdk em local.properties) ... gradlew.bat assemblee funciona como um encanto ... você tem certeza de que a pasta é / src / main / aidl / com / android / vending / billing não /src/main/aidl/com.android.vending.billing? AS 0.2.1? Nível 0,5 +?
Selvin

Respostas:

162

Assim como a mensagem de erro diz, você precisa colocar IInAppBillingService.aidlno diretório correto, ditado por seu pacote (com.android.vending.billing).

Dentro da src/main/aidl/pasta que você já tem, coloque o .aidlarquivo no com/android/vending/billing/.

Sam Dozor
fonte
5
Quando eu fizer isso, eu recebo: Gradle: erro: Não é possível localizar a classe símbolo IInAppBillingService
Waza_Be
9
então está em / src / main / aidl / com / android / vending / billing? Você está usando gradle para construir? Nesse caso, pressione o pequeno botão gradle no canto superior direito do Android Studio para ter a configuração de recarga gradle ou feche / abra o Android Studio.
Sam Dozor
80
Só para esclarecer. Crie um diretório aidl em src / main /. Em seguida, adicione um novo pacote com.android.vending.billing. Em seguida, copie o arquivo aidl para o novo pacote. Consulte code.google.com/p/android/issues/detail?id=56755
Kalel Wade
2
@Kalel Wade Esta foi a solução para mim, você deve adicioná-la como resposta.
Eski
3
Se você não tem src / main, criar o lugar diretório AIDL e especificar em build.gradle: Android {sourceSets {{principal AIDL { 'actual_path ..' srcDirs
aleb
221

Adicionando isso como uma resposta, pois parecia ajudar algumas pessoas.

  1. Crie um novo diretório chamado 'aidl' em 'src / main /'. Deve parecer ' src / main / aidl '.
  2. Adicione um novo nome de pacote ' com.android.vending.billing ' ao diretório ' src / main / aidl '
  3. Localize a sua localização sdk e vá para "sdk \ extras \ google \ play_billing". O local padrão do sdk é "C: \ Arquivos de Programas (x86) \ Android \ android-sdk". Se você o alterou, precisará descobrir o local através do gerenciador do sdk.
  4. Copie 'IInAppBillingService.aidl' no pacote criado acima. No final, deve ser semelhante à imagem abaixo.

Captura de tela do resultado

  1. Reconstrua o projeto e deve ser bom ir.

Nota: Certifique-se de incluir a importação necessária se sua referência não estiver funcionando

import com.android.vending.billing.IInAppBillingService;

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

Editar do comentário

Depois disso, as referências a IInAppBillingService no meu código ainda eram destacadas como erros, mas após a reconstrução do aplicativo, a classe foi reconhecida

Kalel Wade
fonte
1
Só para ficar claro: leia isso completamente! Não ... enfatizei novamente: É uma boa adição ... COLOQUE o com.android.vending.billing NO NOVO diretório 'main / aidl'!
Garoto
5
Depois disso, as referências a IInAppBillingService no meu código ainda eram destacadas como erros, mas após a reconstrução do aplicativo, a classe foi reconhecida.
Arlomedia 18/09/2014
Isso funcionou, mas por que não é tudo automático quando você escolhe adicionar o módulo?
developer android
Obrigado pela dica do projeto de reconstrução. Além disso, a pasta e o pacote podem ser criados com um sabor, não precisam estar no principal. (Se, por exemplo, você só faz no faturamento aplicativo em um sabor do seu app)
Mike Fosker
4
Passei 20 minutos tentando resolver esse problema até chegar à sua resposta. Então eu tentei upvote-lo para obter o erro "Você última votada esta resposta ..." Eu acho que algumas pessoas nunca aprendem :)
beetree
10

O restante das postagens aqui não funcionou para mim até eu criar uma nova pasta, como mostrado aqui.

insira a descrição da imagem aqui

zeeawan
fonte
9
  • Crie um novo diretório src/mainchamadoaidl
  • Clique com o botão direito do mouse no diretório aidl, selecionenew->add package
  • Digite o nome do pacote com.android.vending.billing

  • Copie IInAppBillingService.aidldo diretório Android/Sdk/extras/google/play_billingpara o diretórioApp_name/app/src/main/aidl/com/android/vending/billing

  • Agora vá em frente com a codificação de cobrança do InApp e, ao definir os serviços relacionados ao InApp, você receberá um erro can not resolve symbol IInAppBillingXXXXXX
  • Agora vá para o Buildmenu do estúdio android, clique em Rebuild Project. Isso irá gerar o IInAppBillingService.javaarquivo dentro App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing. Isso resolverá o problema.
Praveena
fonte
@MOHSENNAVABI No problem :-)
Praveena
Depois de copiar o arquivo "IInAppBillingService.aidl", é necessário alterar qualquer linha deste arquivo? Eu vi algumas anotações pedindo para substituir o nome do pacote, pois ele vem de uma amostra para evitar o erro "aidl.exe 'concluído com um valor de saída diferente de zero 1". Quais são as instruções específicas para fazer isso?
Pablo Alfonso
7

Adicione este código em build.gradle

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

Reconstruir e importar classe de auxílio

Ahmad Aghazadeh
fonte
2

As respostas acima concentram-se no local do arquivo, mas parece que você já o definiu corretamente. Tive o mesmo problema no Android Studio, mas nenhuma das respostas listadas o resolveu e bati com a cabeça por uma hora. Eventualmente, percebi que estava faltando uma importação óbvia:

 import com.android.vending.billing.IInAppBillingService;

Uma vez eu adicionei que resolveu esta mensagem de erro.

Essa importação não é mencionada em nenhum dos documentos de faturamento do Google nem incluída em nenhum dos exemplos de código que encontrei. Embora possa ser óbvio para desenvolvedores Java experientes, os iniciantes que estão apenas tentando aprender seu primeiro projeto podem precisar explicitamente dele.

Nicholas
fonte
1

Precisamos adicionar

  1. crie uma pasta - src / main / aidl / packagename e coloque o arquivo aidl nele.

  2. No arquivo aidl - mencione o nome do pacote. pacote packagename

Agora limpe o projeto, reconstrua-o - Podemos o arquivo java correspondente para o aidl gerado em app \ build \ gerados \ source \ aidl \ debug \ packagename \ youraidl.java

Aag1189
fonte
0

Eu tentei todas as soluções, mas o problema era que o Android Studio havia compilado, por qualquer motivo aparente, em um tipo de compilação diferente do módulo que contém os pacotes AIDL do que o especificado pelas configurações. Da depuração à liberação , para que os outros módulos não pudessem ver o pacote do AIDL. Mudar de depuração para lançamento e voltar, resolveu meu problema.

Alessandro Borile
fonte
0

reiniciar o Android Studio funcionou para mim

uma segunda coisa boba que me levou um tempo. Larguei o código no Android Studio para permitir que ele criasse o arquivo, mas ele criou um .java (como esperado) em vez de um .aidl Jiji, estúpido da minha parte

pellyadolfo
fonte