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


Me gustaría importar (y usar) la biblioteca de Servicios de Google Play en un proyecto 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. Usamos la IDEA IntelliJ.

Cosas que sé:

  • sé cómo importar Módulos, Bibliotecas, agregar Dependencias, etc. in IntelliJ.
  • También sé que de acuerdo con la guía de introducción en Google , tienes que agregar la google-play-services-lib into (Eclipse) como un proyecto (importando código existente en el espacio de trabajo), y que puede hacer esto en IntelliJ agregando un nuevo módulo a partir de código existente. Es el mismo procedimiento, nombre diferente.
  • También entiendo lo que hace la pestaña Orden y Exportación en Eclipse (IntelliJ también lo hace).

Cosas que he hecho:

  • Copié (por seguridad) la carpeta google-play-services_lib del SDK de Android a mi proyecto arraigar. Así que tengo /myprj y / google-play-services_lib en el mismo nivel (también tengo /facebooksdk y /actionbarsherlock en el mismo nivel) y procedí a "Importar Módulo" (de la fuente existente). Luego hizo clic en siguiente siguiente siguiente next (funcionó, fue reconocido).

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

Estructura del Proyecto

  • Esto agregó correctamente un módulo (como puede ver en la captura de pantalla anterior). Ahora necesito agregar la dependencia para mi proyecto principal lo sabe. Voy a mis módulos y en la lista, selecciono mi módulo principal y luego la pestaña dependencias. Puedo ver algunas bibliotecas (Joda time, android-query, gson, etc.) y dos módulos : FacebookSDK y actionbarsherlock. Hasta ahora todo bien. Y aquí es cuando las cosas se ponen raras.

Dependencias he intentado añadir.

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

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

2) Agregue una Biblioteca (y luego agregarla al proyecto (s))

3) Agregue la Dependencia del módulo , (mientras tenga mi proyecto principal seleccionado). Esto te muestra una ventana emergente como esta:

añadir dependencia

PROBLEMA

Incluso si puedo hacer referencia a un PlusClient y obtengo las importaciones correctas, cuando intento agregar un SignInButton en mi xml de diseño, obtengo un error.

No tiene sentido pegar todo el diseño XML porque no tiene nada extraño, es solo un RelativeLayout con algunas vistas de texto. He añadido el botón g + así:

  <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 decir.

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

Sin embargo , cuando corro 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 llama mi atención:

Causado por: java.lang.NoClassDefFoundError: com.Google.androide.gms.R {drawable

La siguiente excepció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 elimino el código del Diseño, funciona.

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

¿Alguien ha logrado usar: Intellij Idea (12+) con ActionBarSherlock y la biblioteca de Google+?

Si es así, ¿cómo? :)

Author: Martin Marconcini, 2013-07-31

1 answers

, Por razones históricas, voy a reproducir lo que hice, tomado de aquí. Muchas gracias a @Hesam quien lo encontró. Votaré para cerrar toda la cuestión.

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

Asegúrate de tener las herramientas SDK/ADT más recientes y los servicios play. Cambian de vez en cuando y generalmente no son compatibles con versiones anteriores.

UPDATE Tuve que hacer esto de nuevo, así que esto es la versión pulida de lo que hice.

Necesita tener una copia (en lugar de usarla directamente desde la carpeta SDK), porque si Google la actualiza, las cosas se van a romper cuando actualice su SDK, es más seguro mantener una copia (aunque más tedioso porque tendrá que actualizar manualmente cuando salga una nueva versión). Descubrí que es mejor decidir cuándo actualizar que sorprenderme con errores crípticos de compilación.

Con eso en mente, copie la biblioteca junto tu proyecto. Debe tener una estructura de carpetas que se vea como:

/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 donde guardaste el SDK cuando lo descargaste. Google cambia esto de vez en cuando, así que solo encuéntralo, estará allí.

Copie toda la carpeta 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: {[17]]}

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

2) Seleccione Modules desde el panel izquierdo, luego presione el botón + (o N N ) luego seleccione " import module " y navegue hasta el google-play-services_lib que acabas de copiar junto a la carpeta del módulo de tu proyecto. (/something/).

El asistente hará una serie de preguntas, simplemente presione siguiente, los valores predeterminados están bien, pero lea lo que está pasando, entienda lo que está sucediendo, este es un concepto central en Java, Android e Intellij. Experimente si no sabe lo que dice cada diálogo (o por qué algunos pueden estar vacíos).

Después de que haya terminado, el Proyecto de Google play se agregará a Módulos junto con su proyecto.

No cierre esta ventana (o vuelva a abrirla si lo hizo).

3) Aún en los módulos , seleccione su proyecto/módulo , luego seleccione "Dependencias " desde el panel derecho (es una pestaña ) y finalmente haga clic en + botón en la parte inferior (o N N que funcionará si tiene el foco en esta pestaña), luego de la ventana emergente elija " 3 Dependencias del módulo... "y seleccione" google-play-services_lib", que agregaste en el paso anterior. Debería estar ahí. Si no lo es, no agregaste el módulo en el paso 2.

4) Finalmente, Haga clic nuevamente en el botón + (o N N) pero esta vez seleccione " 1 jars o directorios...", vaya a la carpeta "/libs" de la ruta anterior y seleccione "google-play-services.frasco".

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

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

Dependencia

También asegúrese de que en la ventana Estructura del Proyecto, Pestaña FACETAS, los Servicios de Google Play tengan el "Módulo de Biblioteca" marcado. Es un módulo de biblioteca.

Nota : Asegúrese de no haber agregado el proyecto "google-play-services_lib" como biblioteca en "Bibliotecas" (panel izquierdo bajo Módulos). Si lo tiene, puede ir a " Libraries y simplemente eliminarlo. La Biblioteca De Google Play No Debe Aparecer En Las Bibliotecas .

Credit : este texto viene de esta respuesta de StackOverflow

 96
Author: Martin Marconcini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:24:58