Importación de google-play-services lib en Intellij IDEA 12 (y 13)

Me gustaría importar (y usar) la biblioteca de Google Play Services en un proyecto de Android existente, pero estoy luchando con lo que debe ser un problema de dependencia.

Toda la documentación escrita por google se basa en Eclipse. Utilizamos IntelliJ IDEA.

Cosas que conozco:

  • Sé cómo importar módulos, bibliotecas, añadir dependencias, etc. en IntelliJ.
  • También sé que de acuerdo con la guía de inicio de Google , tienes que añadir google-play-services-lib en (Eclipse) como un proyecto (importando código existente en el espacio de trabajo) y que puedes hacerlo en IntelliJ Mediante la adición de un nuevo módulo del código existente. Es el mismo procedimiento, nombre diferente.
  • También entiendo lo que hace la pestaña Order and Export en Eclipse (IntelliJ lo hace también).

Cosas que he hecho:

  • Copié (por seguridad) la carpeta google-play-services_lib del SDK de Android a la raíz de mi proyecto. Así que tengo / myprj y / google-play-services_lib en el mismo nivel (también tengo / facebooksdk y / actionbarsherlock en el mismo nivel) y procedió a "importar módulo" (desde el origen existente). A continuación, haga clic en siguiente al lado siguiente … (funcionó, se reconoció).

La estructura del proyecto se ve así (nombre intencionalmente borroso):

Estructura del proyecto

  • Esto correctamente agregó un módulo (como se puede ver en la captura de pantalla anterior). Ahora tengo que añadir la dependencia para que mi proyecto principal sepa esto. Voy a mis módulos y en la lista, seleccione mi módulo principal y luego la ficha de dependencias . Puedo ver algunas bibliotecas (Joda tiempo, android-consulta, gson, etc) y dos módulos : FacebookSDK y actionbarsherlock . Hasta aquí todo bien. Y esto es cuando las cosas se ponen raras.

Dependencias que he intentado agregar .

NOTA : En la mayoría de los casos intenté comprobar y desmarcar la casilla de verificación de exportación y también intenté agregar esto al módulo sherlockbar al mismo tiempo, solo para probar. Sé que estas son muchas combinaciones, pero bueno.

1) Agregue un tarro o un directorio (sabiendo que esto estaba mal, lo intenté). Y señaló a la. Jar que está dentro del google play módulo / libs, llamado: google-play-services.jar.

2) Agregue una Biblioteca (y luego agregándola al (los) proyecto (s))

3) Agregue la dependencia del módulo , (mientras que mi proyecto principal seleccionado). Esto le muestra un pop-up como este:

Añadir dependencia

PROBLEMA

Incluso tho puedo referenciar un PlusClient y consigo las importaciones derechas, cuando intento agregar un SignInButton en mi xml de la disposición, consigo un error.

No tiene sentido pegar todo el XML Layout porque no tiene nada extraño, es sólo un RelativeLayout con algunas textviews. He añadido el botón g + de esta manera:

<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/logo_login" android:layout_marginBottom="30dip" /> 

Al igual que Google dice.

El primer signo de que algo puede estar fuera de orden es el hecho de que IntelliJ le advierte que el elemento es "no válido aquí", pero supongo que es una limitación del diseñador visual en lugar de un problema real.

Sin embargo , cuando ejecuto el proyecto, obtengo esto:

 07-30 17:50:44.854: ERROR/ActivityThread(22324): Failed to inflate android.view.InflateException: Binary XML file line #22: Error inflating class com.google.android.gms.common.SignInButton at android.view.LayoutInflater.createView(LayoutInflater.java:606) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at android.view.LayoutInflater.inflate(LayoutInflater.java:352) at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251) at com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:134) at com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:262) at com.myapp.ui.activities.LoginSignupActivity.onCreate(LoginSignupActivity.java:64) at android.app.Activity.performCreate(Activity.java:4465) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2033) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104) at android.app.ActivityThread.access$600(ActivityThread.java:132) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4575) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:417) at android.view.LayoutInflater.createView(LayoutInflater.java:586) ... 24 more Caused by: java.lang.NoClassDefFoundError: com.google.android.gms.R$drawable at com.google.android.gms.internal.aa.b(Unknown Source) at com.google.android.gms.internal.aa.a(Unknown Source) at com.google.android.gms.common.SignInButton.c(Unknown Source) at com.google.android.gms.common.SignInButton.d(Unknown Source) at com.google.android.gms.common.SignInButton.setStyle(Unknown Source) at com.google.android.gms.common.SignInButton.<init>(Unknown Source) at com.google.android.gms.common.SignInButton.<init>(Unknown Source) ... 27 more 

Aquí está la línea que obtiene mi atención:

Causado por: java.lang.NoClassDefFoundError: com.google.android.gms.R $ drawable

La siguiente excepción a continuación es:

 07-30 17:50:44.870: ERROR/AndroidRuntime(22324): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp/com.myapp.ui.activities.LoginSignupActivity}: android.view.InflateException: Binary XML file line #22: Error inflating class com.google.android.gms.common.SignInButton at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2079) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104) at android.app.ActivityThread.access$600(ActivityThread.java:132) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4575) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #22: Error inflating class com.google.android.gms.common.SignInButton at android.view.LayoutInflater.createView(LayoutInflater.java:606) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at android.view.LayoutInflater.inflate(LayoutInflater.java:352) at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251) at com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:134) at com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:262) at com.myapp.ui.activities.LoginSignupActivity.onCreate(LoginSignupActivity.java:64) at android.app.Activity.performCreate(Activity.java:4465) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2033) ... 11 more Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:417) at android.view.LayoutInflater.createView(LayoutInflater.java:586) ... 24 more Caused by: java.lang.NoClassDefFoundError: com.google.android.gms.R$drawable at com.google.android.gms.internal.aa.b(Unknown Source) at com.google.android.gms.internal.aa.a(Unknown Source) at com.google.android.gms.common.SignInButton.c(Unknown Source) at com.google.android.gms.common.SignInButton.d(Unknown Source) at com.google.android.gms.common.SignInButton.setStyle(Unknown Source) at com.google.android.gms.common.SignInButton.<init>(Unknown Source) at com.google.android.gms.common.SignInButton.<init>(Unknown Source) ... 27 more 

Si quito el código del Layout, funciona.

Mi idea es que esto tiene que ver con la forma en que Android maneja el R (esources) y por lo tanto no puede encontrar el recurso para el botón.

¿Alguien ha logrado utilizar: Intellij Idea (12+) con ActionbarSherlock y Google+ Library?

¿Si es así, cómo? 🙂

Por razones históricas, voy a reproducir lo que hice, tomado de aquí . Muchas gracias a @Hesam que lo encontró. Voy a votar para cerrar toda la pregunta.

Nota : los atajos son para OS X e Intellij 12 y 13.

Asegúrese de tener las últimas herramientas SDK / ADT y los servicios de reproducción. Cambian de vez en cuando y normalmente no son compatibles con versiones anteriores.

ACTUALIZACIÓN Tenía que hacer esto de nuevo, así que esta es la versión pulida de lo que hice.

Necesitas tener una copia (en lugar de usarla directamente desde la carpeta SDK), porque si Google la actualiza, las cosas se romperán al actualizar tu SDK, es más seguro guardar una copia (aunque sea más tediosa porque tendrás Para actualizar manualmente cuando sale una nueva versión). Descubrí que es mejor decidir cuándo actualizar que sorprenderse con errores críticos de compilación.

Con esto en mente, copie la biblioteca junto con su proyecto. Debería tener una estructura de carpetas que se vea así:

/something/yourmainmodule/

/something/any_other_module/

/something/modules.xml

/something/README.md (if you use github) :)

La biblioteca se encuentra en

"ANDROID-SDK"/extras/google/google_play_services/libproject/google-play-services_lib

ANDROID-SDK es dondequiera que haya almacenado el SDK cuando lo descargó. Google cambia esto de vez en cuando, así que solo lo encuentras, estará allí.

Copie esa carpeta entera para que su proyecto se vea así:

/something/yourmainmodule/

/something/any_other_module/

/something/google-play-services_lib/ <- ESTE ES EL NUEVO

/something/modules.xml

/something/README.md

Bueno, ahora vamos a importarlo a IntelliJ-IDEA de la manera correcta:

1) Seleccione su proyecto / módulo principal del panel del proyecto ( ⌘ 1 ) y pulse ⌘ ↓ para abrir la ventana de la estructura del proyecto o simplemente haga Archivo -> Estructura del proyecto.

2) Seleccione Módulos desde el panel izquierdo, luego pulse el botón + (o ⌘ N ), luego seleccione " import module " y vaya al google-play-services_lib que acaba de copiar junto a la carpeta del módulo del proyecto . ( /something/ ).

El asistente le hará una serie de preguntas, simplemente pulsa a continuación, los valores por defecto están bien, pero lee lo que está pasando, entiende lo que está sucediendo, este es un concepto básico en Java, Android e Intellij. Experimente si no sabe lo que está diciendo cada diálogo (o por qué algunos pueden estar vacíos).

Una vez que haya terminado, el proyecto google play se agregará a los módulos junto con su proyecto.

No cierre esta ventana (o abra de nuevo si lo hizo).

3) Aún en los módulos , seleccione su proyecto / módulo , luego seleccione " Dependencias " del panel derecho (es una pestaña ) y finalmente haga clic en el botón + en la parte inferior (o ⌘ N que funcionará si tiene el foco en esta pestaña) , A continuación, desde el popup eligió " 3 dependencias de módulo … " y seleccione "google-play-services_lib", que agregó en el paso anterior. Debe estar allí. Si no es así, no agregó el módulo en el paso 2.

4) Finalmente, haga clic en el botón + (o ⌘ N ) pero seleccione " 1 jars or directories … ", vaya a la carpeta "/ libs" de la ruta anterior y seleccione "google-play-services.jar" .

5) Haga clic en Aceptar y cierre la ventana de estructura del proyecto.

Si lo hizo, su módulo principal debería tener una dependencia que se vea así:

Dependencias

También asegúrese de que en la ventana Estructura del proyecto, ficha FACETS , los servicios de Google Play estén marcados . Es un módulo de biblioteca.

Nota : Asegúrese de no haber añadido el proyecto "google-play-services_lib" como biblioteca en "Bibliotecas" (panel izquierdo en Módulos). Si lo tiene, puede ir a " Bibliotecas y simplemente eliminarla. La Biblioteca de Google Play no debería aparecer en las bibliotecas .

Crédito : este texto viene de esta respuesta StackOverflow

  • No se puede resolver el símbolo BitmapFactory.decodeResource en InteliJ
  • La sincronización gradle falló en intellij idea 13.1.1
  • Intellij Android esquema de proyecto ¿URI no está registrado?
  • LibGDX IntelliJ IDEA no puede acceder a com.badlogic.gdx.Application
  • "Recurso no encontrado" al crear una aplicación para Android en IntelliJ 9.0 Maia Public Beta
  • ¿Es posible establecer pruebas para ejecutar continuamente en Android Studio?
  • Android studio no descargar fuentes y javadoc
  • Causa de "Esta aplicación contiene código que intenta omitir las protecciones de seguridad de Android"
  • Android Studio: Crea un punto de interrupción de excepción bien comportado
  • Android aapt.exe APPCRASH en proyecto de compilación con código de error -1073741819
  • El procesamiento de AndroidAnnotations falla en IntelliJ porque R.java no se genera
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.