36 votes

Importation de la librairie google-play-services dans Intellij IDEA 12 (et 13)

J'aimerais d'importation (et d'utiliser) les Google Play Services de la bibliothèque dans un projet Android, mais j'ai du mal avec ce qui doit être un problème de dépendance.

L'ensemble de la documentation écrite par google est basé sur Eclipse. Nous utilisons IntelliJ IDEA.

Les choses que je connais:

  • Je sais comment faire pour importer des Modules, des Bibliothèques, ajouter des Dépendances, etc. dans IntelliJ.
  • Je sais aussi que, selon le guide de démarrage Google, vous devez ajouter le google-play-services-lib dans (Eclipse) en tant que projet (par l'importation de code existant dans l'espace de travail), et que vous pouvez le faire à l'Ide, par l'ajout d'un nouveau module de code existant. C'est la même procédure, autre nom.
  • Je comprends aussi ce que l'Ordre et l'Exportation de l'onglet dans Eclipse (Ide, est-il trop).

Les choses que j'ai fait:

  • J'ai copié (pour la sécurité) de la google-play-services_lib le dossier du SDK Android à ma racine du projet. J'ai donc /myprj et /google-play-services_lib au même niveau (j'ai aussi /facebooksdk et /actionbarsherlock au même niveau) et a procédé à l' "Module d'Importation" (à partir de la source existante). Puis cliqué sur suivant, suivant, suivant... (il a travaillé, il a été reconnu).

Le projet de la structure ressemble à ceci (nom intentionnellement floue):

Project Structure

  • Cette correctement ajouté un module (comme vous pouvez le voir dans la capture ci-dessus). Maintenant, j'ai besoin d'ajouter la dépendance donc mon principal projet sait à ce sujet. Je vais à mon modules et dans la liste, sélectionnez mon principal module puis dépendances onglet. Je peux voir un peu de bibliothèques (Joda time, android requête, gson, etc.) et de deux modules: FacebookSDK et actionbarsherlock. So far So good. Et c'est quand les choses deviennent étranges.

Dépendances que j'ai essayé d'ajouter.

REMARQUE: Dans la plupart des cas, j'ai essayé en cochant et décochant la case à cocher exporter et j'ai aussi essayé d'ajouter ce point à l'sherlockbar module en même temps, juste pour le test. Je sais il y a beaucoup de combinaisons, mais bon.

1) Ajout d'un Pot ou d'un répertoire (sachant que c'était faux, j'ai essayé). et souligne le .jar qui est à l'intérieur du google play module /libs, nommé: google-play-services.jar.

2) Ajouter une Bibliothèque (et puis l'ajouter au projet(s))

3) Ajouter le Module de Dépendance, (tout en ayant mon principal projet est sélectionné). Il affiche un pop-up comme ceci:

add dependency

PROBLÈME

Même quand je peut faire référence à une PlusClient , et j'ai le droit importations, lorsque j'essaie d'ajouter un SignInButton dans ma mise en page xml, j'obtiens une erreur.

Il n'y a aucun point dans le collage de l'ensemble de la Mise en page XML car il n'a pas quelque chose d'étrange, c'est juste un RelativeLayout avec un peu de textviews. J'ai ajouté le g+ bouton comme ceci:

  <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" />

Tout comme Google dit.

Le premier signe que quelque chose peut être de l'ordre est le fait que IntelliJ avertissements vous dire que l'élément "n'est pas valide ici", mais je suppose que c'est une limitation de la concepteur visuel plutôt que d'un réel problème.

Cependant, lorsque je lance le projet, j'obtiens ceci:

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

Voici la ligne qui attire mon attention:

Causés par: java.lang.NoClassDefFoundError: com.google.android.gms.R$drawable

L'exception suivante ci-dessous:

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 je supprime le code à partir de la Mise en page, il fonctionne.

Mon idée est que cela a à voir avec la façon dont Android gère le R(moyens) et, par conséquent, il peut ne pas être de trouver de la ressource pour le bouton.

Personne n'a réussi à utiliser: Intellij Idea (12+) avec ActionbarSherlock et Google+ de la Bibliothèque?

Si oui, comment? :)

95voto

Martín Marconcini Points 7420

Pour des raisons historiques, je vais reproduire ce que j'ai fait, prises à partir d' ici. Merci beaucoup à @Hesam qui l'a trouvé. Je vote pour la fermeture complète de la question.

Remarque: les raccourcis sont pour OS X et l'Ide, 12 et 13.

Assurez-vous d'avoir le dernier SDK/ADT Outils et les services. Ils changent chaque maintenant et puis et ne sont généralement pas compatibles.

Mise à JOUR , j'ai eu à le faire à nouveau, donc c'est la version polie de ce que j'ai fait.

Vous avez besoin d'une copie (par opposition à l'aide directement à partir du dossier SDK), parce que si les mises à jour de Google, les choses vont pause lorsque vous mettez à jour votre kit de développement, il est plus sûr de garder une copie (quoique plus fastidieux, parce que vous devrez manuellement la mise à jour quand une nouvelle version sort). J'ai trouvé qu'il est préférable de décider de la date de mise à jour que d'être surpris avec cryptique des erreurs de compilation.

Avec cela à l'esprit, la copie de la bibliothèque à côté de votre projet. Vous devriez avoir une structure de dossier qui ressemble à:

/something/yourmainmodule/

/something/any_other_module/

/something/modules.xml

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

La bibliothèque est située dans

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

ANDROID SDK est partout où vous avez stocké le SDK lorsque vous l'avez téléchargé. Google modifie ce que chaque maintenant et puis, si juste de le trouver, il sera là.

Copie de l'ensemble de ce dossier si votre projet ressemble maintenant à ceci:

/something/yourmainmodule/

/something/any_other_module/

/something/google-play-services_lib/ <-- C'EST LE NOUVEAU

/something/modules.xml

/something/README.md

Bon, maintenant, nous allons importer sur IntelliJ IDÉE de la bonne façon:

1) Sélectionnez votre projet/module principal du panneau projet (⌘ 1) et appuyez sur ⌘ ↓ afin d'ouvrir le projet de la structure de la fenêtre ou tout simplement faire Fichier -> Structure de Projet.

2) Sélectionnez les Modules de panneau de gauche, puis cliquez sur le bouton + (ou ⌘ N), puis sélectionnez "importer le module" et accédez à la google-play-services_lib que vous venez de copier à côté de votre projet du dossier du module. (/something/).

L'assistant va vous poser une série de questions, il suffit de frapper à côté, les valeurs par défaut sont très bien, mais lire ce qu'il se passe, de comprendre ce qui se passe, c'est un concept de base en Java, Android et Intellij. L'expérience si vous ne savez pas ce que chaque dialogue est à dire (ou pourquoi certains peuvent être vides).

Après vous avez terminé, le google play Projet sera ajouté à des Modules de côté avec votre projet.

Ne fermez pas cette fenêtre (ou de l'ouvrir à nouveau, si vous n'avez).

3) Toujours dans les modules, sélectionnez votre projet/module, puis sélectionnez "Dépendances" de la droite de l'écran (c'est un onglet) et enfin, Cliquez sur le + bouton en bas de page (ou ⌘ N qui ne fonctionnera que si vous avez l' accent dans cet onglet), puis dans le menu choisissez "3 Module de dépendances..." et sélectionnez "google-play-services_lib", auquel vous avez ajouté à l'étape précédente. Il devrait être là. Si elle ne l'est pas, vous n'avez pas d'ajouter le module à l'étape 2.

4) Enfin, Cliquez sur + nouveau sur le bouton (ou ⌘ N), mais cette fois, sélectionnez "1 des pots ou des répertoires...", accédez à l' "/libs" le dossier de la au-dessus de chemin d'accès et sélectionnez "google-play-services.jar".

5) Cliquez sur ok et fermez le projet de la structure de la fenêtre.

Si vous avez fait cela, votre module principal doit avoir une dépendance qui ressemble à ceci:

Dependencies

Assurez-vous également que, dans le Projet de la Structure de la fenêtre, les FACETTES de l'Onglet, les Google Play Services a la Bibliothèque "Module" est cochée. C'est un module de la bibliothèque.

Remarque: assurez-vous que vous n'avez pas ajouté de "google-play-services_lib" projet de la bibliothèque dans "Bibliothèques" (panneau de gauche sous des Modules). Si vous avez, vous pouvez aller à "Bibliothèques et simplement le supprimer. Google Play Bibliothèque Ne Doit Pas Apparaître Dans Les Bibliothèques.

Crédit: ce texte vient de ce StackOverflow répondre

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X