studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android intellij-idea actionbarsherlock google-play-services

android - programacion - Importación de la biblioteca de google-play-services en Intellij IDEA 12(y 13)



manual de programacion android pdf (1)

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

Cosas que sé:

  • Sé cómo importar módulos, bibliotecas, agregar dependencias, etc. en IntelliJ.
  • También sé que, de acuerdo con la guía de introducción en Google , debes agregar google-play-services-lib en (Eclipse) como proyecto (al importar código existente en el área de trabajo), y que puedes hacerlo en IntelliJ agregando un nuevo módulo desde el código existente. Es el mismo procedimiento, diferente nombre.
  • También entiendo lo que hace la pestaña Ordenar y Exportar 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 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 procedí a "Importar módulo" (desde la fuente existente). Luego haz clic en siguiente siguiente ... (funcionó, se reconoció).

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

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

Dependencias que he intentado agregar

NOTA : en la mayoría de los casos intenté marcar 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 directorio (sabiendo que esto estaba mal, lo intenté). y señaló el .jar que está dentro del módulo / libs de google play, llamado: google-play-services.jar.

2) Agregue una biblioteca (y luego agreguela al proyecto (s))

3) Agregue la Dependencia del Módulo , (mientras tiene mi proyecto principal seleccionado). Esto te muestra un pop-up como este:

PROBLEMA

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

No tiene sentido pegar todo el diseño XML porque no tiene nada extraño, es solo un RelativeLayout con algunas textviews. Agregué 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" />

Como dice Google.

La primera señal de que algo puede estar fuera de servicio es el hecho de que IntelliJ te advierte que el elemento "no es 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 me llama la 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 elimino el código del diseño, funciona.

Mi idea es que esto tiene que ver con la forma en que Android maneja los R (recursos) y, por lo tanto, puede que no encuentre 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? :)


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

Nota : los accesos directos 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 generalmente no son retrocompatibles.

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

Debe 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 guardar una copia (aunque sea más tedioso porque tendrá para actualizar manualmente cuando sale una nueva versión). Descubrí que es mejor decidir cuándo actualizar que sorprenderse con errores de compilación crípticos.

Con eso 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 está ubicada en

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

ANDROID-SDK es donde almacenó el SDK cuando lo descargó. Google cambia esto de vez en cuando, así que solo encuentralo, 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

Bien, ahora importémoslo a IntelliJ-IDEA de la manera correcta:

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

2) Seleccione Módulos desde el panel izquierdo, luego presione el botón + (o ⌘ N ) luego seleccione " importar módulo " y navegue hasta google-play-services_lib que acaba de copiar al lado de la carpeta del módulo de su proyecto . ( /something/ ).

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

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

No cierre esta ventana (o ábrala nuevamente 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) , en la ventana emergente, seleccione " 3 dependencias del 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) Por último, vuelva a hacer clic en el botón + (o ⌘ N ), pero esta vez seleccione " 1 jarras o directorios ... ", 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 hiciste esto, tu módulo principal debería tener una dependencia que se vea así:

También asegúrese de que en la ventana Estructura del proyecto, pestaña FACETS , los Servicios de Google Play tengan marcado el "Módulo de biblioteca". 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 debajo de Módulos). Si es así, puede ir a " Bibliotecas y simplemente eliminarlo. La Biblioteca de Google Play no debería aparecer en las bibliotecas .

Crédito : este texto proviene de here