¿Cómo puedo agregar el archivo aidl a Android Studio (del ejemplo de facturación en la aplicación)

136

Actualmente estoy migrando una aplicación Eclipse a Android Studio. Esta aplicación estaba usando la facturación en la aplicación.

Mi principal problema es compilar el proyecto y el archivo de ayuda (supongo que todos usan este archivo )

Me sale este mensaje de error:

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

Entonces, siguiendo algunos tutoriales, muevo este archivo de com.mypackage.billing a src / main / aidl (vea esta referencia )

Pero tan pronto como hago eso, recibo este mensaje:

Gradle: la ejecución falló para la tarea ': xxxxxxxxxxx: compileDebugAidl'.

Error al ejecutar el comando: (...) C: \ Users \ xxxx \ AndroidStudioProjects \ xxxxxxProject \ xxxxxxx \ src \ main \ aidl \ IInAppBillingService.aidl: 45 interface IInAppBillingService debe declararse en un archivo llamado com \ xxxxxxxx \ billing \ IInAppBillingService .aidl.

El mensaje es claramente una contradicción con la publicación de la página de error de Google que he vinculado anteriormente.

¿Alguien logró hacer que este archivo de ayuda funcione y me puede ayudar?

ingrese la descripción de la imagen aquí

Solo para informar, algunos enlaces que seguí:

Waza_Be
fuente
la pregunta es ... ¿no debería estar este archivo de ayuda /src/main/aidl/com/android/vending/billing?
Selvin
1
Gradle: Falló la ejecución de la tarea ': MiProyecto: compileDebugAidl'. > Error al ejecutar el comando: 45 interfaz IInAppBillingService debe declararse en un archivo llamado com \ android \ vending \ billing \ IInAppBillingService.aidl.
Waza_Be
1
algo me dice que todavía no lo estás poniendo en la carpeta que Selvin y yo estamos diciendo ...?
Sam Dozor
Acabo de agregar una nueva captura de pantalla, creo que la puse en la carpeta que me dijiste ..
Waza_Be
selvin.pl/TrivialDriveProject.Gradle.zip (cambie el directorio sdk en local.properties) ... gradlew.bat assembley funciona de maravilla ... ¿está seguro de que la carpeta es / src / main / aidl / com / android / vending / billing no /src/main/aidl/com.android.vending.billing? AS 0.2.1? Gradle 0.5. +?
Selvin

Respuestas:

162

Tal como dice el mensaje de error, debe poner IInAppBillingService.aidl el directorio correcto dictado por su paquete (com.android.vending.billing).

Dentro de la src/main/aidl/carpeta que ya tiene, coloque el .aidlarchivo com/android/vending/billing/.

Sam Dozor
fuente
55
Cuando hago esto, obtengo: Gradle: error: no puedo encontrar la clase de símbolo IInAppBillingService
Waza_Be
9
entonces está en / src / main / aidl / com / android / vending / billing? ¿Estás usando gradle para construir? Si es así, presione el pequeño botón gradle en la esquina superior derecha de Android Studio para configurar Gradle reload, o cierre / abra Android Studio.
Sam Dozor
80
Solo para aclarar. Cree un directorio aidl bajo src / main /. Luego agregue un nuevo paquete com.android.vending.billing. Luego copie el archivo aidl en el nuevo paquete. Ver code.google.com/p/android/issues/detail?id=56755
Kalel Wade
2
@Kalel Wade Esta fue la solución para mí, debería agregarla como respuesta.
eski
3
Si no tiene src / main, cree el directorio aidl en cualquier lugar y especifique en build.gradle: android {sourceSets {main {aidl {srcDirs 'actual_path ..'
aleb
221

Agregar esto como respuesta, ya que parecía ayudar a algunas personas.

  1. Cree un nuevo directorio llamado 'aidl' en 'src / main /'. Debería verse como ' src / main / aidl '.
  2. Agregue un nuevo nombre de paquete ' com.android.vending.billing ' al directorio ' src / main / aidl '
  3. Localice su ubicación de SDK y vaya a "SDK \ extras \ google \ play_billing". La ubicación predeterminada para el SDK es "C: \ Archivos de programa (x86) \ Android \ android-sdk". Si lo modificó de forma personalizada, tendrá que averiguar la ubicación a través del administrador de SDK.
  4. Copie 'IInAppBillingService.aidl' en el paquete creado anteriormente. Al final, debería ser similar a la imagen de abajo.

Captura de pantalla del resultado

  1. Reconstruya el proyecto y debería estar listo.

Nota: asegúrese de incluir la importación necesaria si su referencia no funciona

import com.android.vending.billing.IInAppBillingService;

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

Editar desde comentario

Después de hacer esto, las referencias a IInAppBillingService en mi código todavía se resaltaron como errores, pero después de reconstruir la aplicación, se reconoció la clase

Kalel Wade
fuente
1
Para que quede claro: ¡lea esto a fondo! No lo hice ... para enfatizar nuevamente: ES una buena adición ... ¡PONGA EL com.android.vending.billing EN EL NUEVO directorio 'main / aidl'!
Niño
55
Después de hacer esto, las referencias a IInAppBillingService en mi código todavía se resaltaron como errores, pero después de reconstruir la aplicación, se reconoció la clase.
arlomedia
Esto funcionó, pero ¿por qué no es todo esto automático cuando elige agregar el módulo?
Desarrollador de Android
Gracias por la sugerencia del proyecto de reconstrucción. Además, la carpeta y el paquete se pueden crear en un sabor, no tiene que estar en main. (Si, por ejemplo, solo lo hace en la facturación de la aplicación en un sabor de su aplicación)
Mike Fosker
44
Pasé 20 minutos tratando de resolver este problema hasta que llegué a su respuesta. Luego traté de votar para obtener el error "Usted votó por última vez esta respuesta ..." Creo que algunas personas nunca aprenden :)
Beetree
10

El resto de las publicaciones aquí no funcionaron para mí hasta que creé una nueva carpeta como se muestra aquí.

ingrese la descripción de la imagen aquí

zeeawan
fuente
9
  • Crear nuevo directorio bajo src/mainllamadoaidl
  • Haga clic derecho en el directorio aidl, seleccionenew->add package
  • Ingrese el nombre del paquete com.android.vending.billing

  • Copiar IInAppBillingService.aidldel directorio Android/Sdk/extras/google/play_billingal directorioApp_name/app/src/main/aidl/com/android/vending/billing

  • Ahora continúe con la codificación de facturación de InApp y al definir los servicios relacionados con InApp obtendrá un error can not resolve symbol IInAppBillingXXXXXX
  • Ahora vaya al Buildmenú del estudio de Android, haga clic en Rebuild Project. Esto generará el IInAppBillingService.javaarchivo dentro App_Name/app/build/generated/source/aidl/debug/com/android/vending/billing. Esto resolverá el problema.
Praveena
fuente
@MOHSENNAVABI No hay problema :-)
Praveena
Después de copiar el archivo "IInAppBillingService.aidl", ¿es necesario cambiar alguna línea de este archivo? He visto algunas notas que piden reemplazar el nombre del paquete, ya que proviene de una muestra para evitar el error "aidl.exe 'terminado con un valor de salida distinto de cero 1". ¿Cuáles son las instrucciones específicas para hacer esto?
Pablo Alfonso
7

Agregue este código en build.gradle

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

Reconstruir e importar clase de ayuda

Ahmad Aghazadeh
fuente
2

Las respuestas anteriores se concentran en la ubicación del archivo, pero parece que ya lo tenía configurado correctamente. Experimenté este mismo problema en Android Studio, pero ninguna de las respuestas enumeradas lo resolvió, y me golpeé la cabeza durante una hora. Finalmente, me di cuenta de que me faltaba una importación obvia:

 import com.android.vending.billing.IInAppBillingService;

Una vez que agregué que resolvió este mensaje de error.

Esta importación no se menciona en ninguno de los documentos de facturación de Google ni se incluye en ninguno de los ejemplos de código que encontré. Si bien puede ser obvio para los desarrolladores experimentados de Java, los principiantes que solo intentan aprender su primer proyecto pueden necesitarlo explícitamente.

Nicholas
fuente
1

Necesitamos agregar

  1. crear carpeta - src / main / aidl / packagename y colocar el archivo aidl debajo de esto.

  2. En el archivo aidl, mencione el nombre del paquete. paquete nombrepaquete

Ahora limpie el proyecto, reconstruya el proyecto: podemos obtener el archivo java correspondiente para la ayuda generada en la aplicación \ build \ generate \ source \ aidl \ debug \ packagename \ youraidl.java

Aag1189
fuente
0

He intentado todas las soluciones, pero el problema era que Android Studio había compilado, con alguna razón aparente, en un tipo de compilación diferente del módulo que contiene los paquetes AIDL que lo especificado por la configuración. Desde la depuración hasta el lanzamiento , por lo que los otros módulos no pudieron ver el paquete AIDL. Pasar de depurar a liberar y volver, resolvió mi problema.

Alessandro Borile
fuente
0

reiniciar Android Studio funcionó para mí

Una segunda tontería que me llevó un tiempo. Solté el código en Android Studio para permitirle crear el archivo, pero creó un .java (como se esperaba) en lugar de un .aidl Jiji, estúpido de mi parte

pellyadolfo
fuente