en utilisant facebook sdk dans le studio Android


104

Je suis le SDK Facebook pour Android en utilisant Android Studio . Lorsque j'exécute mon application, je reçois l'avertissement mentionné ci-dessous.

Gradle: module 'facebook' won't be compiled. Unfortunately you can't have non-Gradle Java module and Android-Gradle module in one project.

Comment dois-je résoudre ce problème?

J'ai essayé la réponse de @Scott Barta et j'obtiens le message d'erreur suivant.

    A problem occurred configuring project ':App'.
> Failed to notify project evaluation listener.
   > A problem occurred configuring project ':libraries:facebook'.
      > Failed to notify project evaluation listener.
         > Could not resolve all dependencies for configuration ':libraries:facebook:_DebugCompile'.
            > Could not find any version that matches com.android.support:support-v4:+.
              Required by:
                  MyApplication2.libraries:facebook:unspecified

Votre référentiel de support Android est-il installé dans votre gestionnaire de SDK pour le SDK que vous utilisez?
Scott Barta

Nan. Est-ce obligatoire?
Uma

Oui. C'est le message d'erreur que vous voyez. Je sais que ce n'est pas intuitif; l'améliorer est sur notre liste. Je mettrai à jour ma réponse pour refléter la nécessité de cela.
Scott Barta

Réponses:


250

REMARQUE

Pour Android Studio 0.5.5 et versions ultérieures, et avec les versions ultérieures du SDK Facebook, ce processus est beaucoup plus simple que ce qui est documenté ci-dessous (qui a été écrit pour les versions antérieures des deux). Si vous utilisez la dernière version, tout ce que vous avez à faire est la suivante:

  1. Téléchargez le SDK Facebook sur https://developers.facebook.com/docs/android/
  2. Décompressez l'archive
  3. Dans Android Studio 0.5.5 ou version ultérieure, choisissez "Module d'importation" dans le menu Fichier.
  4. Dans l'assistant, définissez le chemin source du module à importer en tant que répertoire "facebook" dans l'archive décompressée. (Remarque: si vous choisissez l'intégralité du dossier parent, il introduira non seulement la bibliothèque elle-même, mais également tous les exemples d'applications, chacun en tant que module distinct. Cela peut fonctionner, mais ce n'est probablement pas ce que vous voulez).
  5. Ouvrez la structure du projet par Ctrl + Shift + Alt + Set sélectionnez l'onglet dépendances. Cliquez sur le +bouton et sélectionnez Dépendance du module. Dans la nouvelle fenêtre contextuelle, sélectionnez:facebook.
  6. Vous devriez être prêt à partir.

Instructions pour l'ancien Android Studio et l'ancien SDK Facebook

Cela s'applique à Android Studio 0.5.4 et aux versions antérieures, et est le plus logique pour les versions du SDK Facebook avant que Facebook n'offre les fichiers de construction Gradle pour la distribution. Je ne sais pas dans quelle version du SDK ils ont effectué ce changement.

Les instructions de Facebook sous "Importer le SDK dans un projet Android Studio" sur leur page https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ sont fausses pour les projets basés sur Gradle (c'est-à-dire que votre projet a été construit à l'aide de l'assistant Nouveau projet d'Android Studio et / ou a un build.gradlefichier pour votre module d'application). Suivez plutôt ces instructions:

  1. Créez un librariesdossier sous le répertoire principal de votre projet. Par exemple, si votre projet est HelloWorldProject, vous créez un HelloWorldProject/librariesdossier.

  2. Copiez maintenant tout le facebookrépertoire de l'installation du SDK dans le librariesdossier que vous venez de créer.

  3. Supprimez le libsdossier du facebookrépertoire. Si vous le souhaitez, supprimez le project.properties, build.xml, .classpathet .project. fichiers également. Vous n'en avez pas besoin.

  4. Créez un build.gradlefichier dans le facebookrépertoire avec le contenu suivant:

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:0.6.+'
        }
    }
    
    apply plugin: 'android-library'
    
    dependencies {
        compile 'com.android.support:support-v4:+'
    }
    
    android {
        compileSdkVersion 17
        buildToolsVersion "19.0.0"
    
        defaultConfig {
            minSdkVersion 7
            targetSdkVersion 16
        }
    
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                res.srcDirs = ['res']
            }
        }
    }

    Notez que selon le moment où vous suivez ces instructions par rapport au moment où cela est écrit, vous devrez peut-être ajuster la classpath 'com.android.tools.build:gradle:0.6.+'ligne pour référencer une version plus récente du plugin Gradle. Bientôt, nous aurons besoin de la version 0.7 ou ultérieure. Essayez-le, et si vous obtenez une erreur indiquant qu'une version plus récente du plugin Gradle est requise, c'est la ligne que vous devez modifier.

  5. Assurez-vous que la bibliothèque de support Android de votre gestionnaire de SDK est installée.

  6. Modifiez votre settings.gradlefichier dans le répertoire principal de votre application et ajoutez cette ligne:

    include ':libraries:facebook'
  7. Si votre projet est déjà ouvert dans Android Studio, cliquez sur le bouton "Synchroniser le projet avec les fichiers Gradle" dans la barre d'outils. Une fois que c'est fait, le facebookmodule devrait apparaître. entrez la description de l'image ici

  8. Ouvrez la boîte de dialogue Structure du projet. Choisissez Modules dans la liste de gauche, cliquez sur le module de votre application, cliquez sur l'onglet Dépendances, et cliquez sur le bouton + pour ajouter une nouvelle dépendance. entrez la description de l'image ici
  9. Choisissez «Dépendance de module». Il fera apparaître une boîte de dialogue avec une liste de modules à choisir; sélectionnez «: bibliothèques: facebook». entrez la description de l'image ici
  10. Cliquez sur OK dans toutes les boîtes de dialogue. Android Studio resynchronisera automatiquement votre projet (il n'est donc pas nécessaire de cliquer à nouveau sur le bouton "Synchroniser le projet avec les fichiers Gradle") et récupérera la nouvelle dépendance. Vous devriez être prêt à partir.

1
/libraries/facebook/build.gradle me donne quelques erreurs. "Impossible de résoudre le symbole compileSdkVersion". La même chose avec le symbole compileSdkVersion, le manifeste et autres ...
sensorario

2
Cela a fonctionné pour moi, mais j'ai dû changer le chemin d'accès au projet de qualité des bibliothèques Facebook pour qu'il soit le chemin absolu, c'est- ":MyApp:libraries:facebook"à- dire dans le fichier de paramètres et le fichier build.grade de mon application principale
Mark

7
Très bien! Cette réponse devrait faire partie du didacticiel officiel du SDK Facebook.
Samuel Barbosa

1
Cette solution ne fonctionne pas pour moi. Après avoir sélectionné le répertoire facebook dans le répertoire facebook-android-sdk-3.16, l'assistant dit toujours «Sélectionner les modules à importer»: $. J'utilise Android Studio (beta) 0.8.2. Une idée?
Diego Palomar

2
Pourquoi ne peuvent-ils pas simplement rendre cette chose simple pour une fois?
Ojonugwa Jude Ochalifu

108

Facebook a en effet ajouté le SDK aux référentiels Maven Central. Pour configurer votre projet à l'aide de l'instance du repo maven, vous devez effectuer 2 choses:

  1. Dans le fichier build.gradle de niveau supérieur de vos projets , ajoutez les référentiels Maven Central. Le mien ressemble à ceci:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
  2. Dans le fichier build.grade au niveau de l' application , ajoutez la dépendance sdk Facebook:

    dependencies {
    
        compile 'com.facebook.android:facebook-android-sdk:4.5.0' // Adjust the version accordingly
        // All your other dependencies.
    }

Vous pouvez également ajuster la version spécifique du SDK Facebook. Pour une liste des versions disponibles dans le référentiel maven, cliquez sur ce lien.


1
Ça marche pour moi. C'est vraiment le meilleur moyen d'ajouter l'API Facebook sur Android Studio. Merci
Olkunmustafa

1
C'est la méthode sur les documents Facebook mais cela ne fonctionne pas. J'ai android studio 1.0 et sdk v 3.x.
Abhishek Balani

1
Notez que vous devez spécifier un numéro de version exact ou au moins une version majeure, comme 3.23. +. Facebook n'a pas peur de versionner rapidement l'API et d'apporter des modifications majeures, ce qui entraînera des échecs de build et des builds non répétables.
Greg Ennis

@GregEnnis - bonne entrée. J'ai légèrement mis à jour la réponse et ajouté un commentaire dans le code.
SBerg413

Donc, je n'ai pas besoin d'importer de bibliothèque externe et tout? Ajoutez simplement le sdk fb dans le fichier gradle ??
Kaveesh Kanwal

17

Facebook publie le SDK sur maven central:

Il suffit d'ajouter :

repositories {
    jcenter()       // IntelliJ main repo.
}

dependencies {
    compile 'com.facebook.android:facebook-android-sdk:+'
}

2
Ce n'est pas correct, vous avez besoin de mavenCentral () dans la section référentiels.
Booger

1
jcenter include mavenCentral
Romain

12

La solution de Scott Barta a fonctionné pour moi, sauf que j'ai dû les ajouter aux dépendances de mon fichier build.gradle de projet principal:

compile files('libs/android-support-v4.jar')
compile project(':libraries:facebook')

Il convient également de mentionner que vous devez vous assurer que:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

Sont les mêmes dans les deux fichiers build.gradle ... Une fois que j'ai fait cela, il a fonctionné comme un charme.


J'obtiens une erreur lors de la construction: Le projet avec le chemin «bibliothèques: facebook» n'a pas pu être trouvé dans le projet racine ... Des idées? (J'ai bien sûr ajouté le dossier selon la solution Scott Bs, même si je n'ai PAS de fichier settings.gradle?! (Projet créé dans Android Studio)
swebal

1
la ligne de projet de compilation doit correspondre à la structure de répertoire de votre projet. : bibliothèques: facebook implique que votre bibliothèque facebook se trouve dans un dossier appelé bibliothèques dans votre répertoire racine
doubleA

6

Lorsque vous utilisez git, vous pouvez facilement intégrer le dernier facebook-android-sdk.

  • Ajoutez facebook-android-sdk comme sous-module: git submodule add https://github.com/facebook/facebook-android-sdk.git
  • Ajouter sdk comme projet gradle: éditez settings.gradle et ajoutez une ligne: include ':facebook-android-sdk:facebook'
  • Ajoutez sdk en tant que dépendance au module: éditez build.gradle et ajoutez dans le bloc de dépendances: compile project(':facebook-android-sdk:facebook')

4

J'ai utilisé facebook sdk 4.10.0 pour intégrer la connexion dans mon application Android. Le tutoriel que j'ai suivi est:

connexion facebook studio android

Vous pourrez obtenir le prénom, le nom, l'adresse e-mail, le sexe, l'identifiant facebook et la date de naissance de facebbok.

Le didacticiel ci-dessus explique également comment créer une application dans la console de développement Facebook via la vidéo.

ajouter ci-dessous dans le build.gradle(Module:app)fichier:

repositories {
        mavenCentral()
    }

et

 compile 'com.facebook.android:facebook-android-sdk:4.10.0'

ajoutez maintenant ci-dessous dans le fichier AndroidManifest.xml:

 <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="your app id from facebook developer console"/>

     <activity android:name="com.facebook.FacebookActivity"
               android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
               android:theme="@android:style/Theme.Translucent.NoTitleBar"
               android:label="@string/app_name" />

ajoutez ce qui suit dans le fichier activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.demonuts.fblogin.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000"
        android:layout_marginLeft="10dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/text"/>

    <com.facebook.login.widget.LoginButton
        android:id="@+id/btnfb"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

Et dans le dernier ajout ci-dessous dans le fichier MainActivity.java:

import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.widget.TextView;

import com.facebook.AccessToken;
import com.facebook.AccessTokenTracker;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.Profile;
import com.facebook.ProfileTracker;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;

import org.json.JSONException;
import org.json.JSONObject;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;


public class MainActivity extends AppCompatActivity {

    private TextView tvdetails;
    private CallbackManager callbackManager;
    private AccessTokenTracker accessTokenTracker;
    private ProfileTracker profileTracker;
    private LoginButton loginButton;
    private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            GraphRequest request = GraphRequest.newMeRequest(
                    loginResult.getAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object, GraphResponse response) {
                            Log.v("LoginActivity", response.toString());

                            // Application code
                            try {
                                Log.d("tttttt",object.getString("id"));
                                String birthday="";
                                if(object.has("birthday")){
                                    birthday = object.getString("birthday"); // 01/31/1980 format
                                }

                                String fnm = object.getString("first_name");
                                String lnm = object.getString("last_name");
                                String mail = object.getString("email");
                                String gender = object.getString("gender");
                                String fid = object.getString("id");
                                tvdetails.setText(fnm+" "+lnm+" \n"+mail+" \n"+gender+" \n"+fid+" \n"+birthday);

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }
                    });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id, first_name, last_name, email, gender, birthday, location");
            request.setParameters(parameters);
            request.executeAsync();

        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        FacebookSdk.sdkInitialize(this);
        setContentView(R.layout.activity_main);

        tvdetails = (TextView) findViewById(R.id.text);

        loginButton = (LoginButton) findViewById(R.id.btnfb);

        callbackManager = CallbackManager.Factory.create();

        accessTokenTracker= new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {

            }
        };

        profileTracker = new ProfileTracker() {
            @Override
            protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) {

            }
        };

        accessTokenTracker.startTracking();
        profileTracker.startTracking();
        loginButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday", "user_friends"));
        loginButton.registerCallback(callbackManager, callback);

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);

    }

    @Override
    public void onStop() {
        super.onStop();
        accessTokenTracker.stopTracking();
        profileTracker.stopTracking();
    }

    @Override
    public void onResume() {
        super.onResume();
        Profile profile = Profile.getCurrentProfile();

    }

}

3

J'ai déployé le SDK Facebook Android sur le référentiel Sonatype.

Vous pouvez inclure cette bibliothèque en tant que dépendance Gradle:

repositories {
    maven {
        url 'https://oss.sonatype.org/content/groups/public'
    }
}

dependencies {
    compile 'com.shamanland:facebook-android-sdk:3.15.0-SNAPSHOT'
}

Message original ici .


Cela ne fonctionne plus, votre site est en panne. Tué tout mon IDE.
Mgamerz

Bizarre, j'ai utilisé des sites qui vérifient si un site est en panne et même votre page d'accueil ne se chargerait pas.
Mgamerz

2

Les personnes utilisant Android Studio 0.8.6 pourraient faire ceci:

  1. Téléchargez Facebook-android-sdk-xxx.zip et décompressez-le
  2. Copiez UNIQUEMENT le répertoire facebook sous le répertoire Facebook-android-sdk-xxx dans votre projet avec app /

    • ImAnApp /
      • | - application /
      • | - construire /
      • | - facebook /
  3. Vous devriez maintenant voir Android Studio affichant Facebook en tant que module

  4. Modifiez le build.gradle de Facebook en ceci.
    • fichiers fournis ('../ libs / bolts.jar') à provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) à compileSdkVersion 20 ou une autre version que vous avez définie dans l'application
    • buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION à buildToolsVersion '20.0.0'
    • minSdkVersion Integer.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) à minSdkVersion 14
    • targetSdkVersion Integer.parseInt (project.ANDROID_BUILD_TARGET_SDK_VERSION) à targetSdkVersion 20

    apply plugin: 'android-library'

    dependencies {
        compile 'com.android.support:support-v4:19.1.+'
        provided files('./libs/bolts.jar')
    }

    android {
        compileSdkVersion 20
        buildToolsVersion '20.0.0'

        defaultConfig {
            minSdkVersion 14
            targetSdkVersion 20
        }

        lintOptions {
            abortOnError false
        }

        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                res.srcDirs = ['res']
            }
        }
    }

Resynchronisez votre fichier gradle et cela devrait fonctionner correctement!


2

J'ai réparé le

"Impossible de trouver la propriété 'ANDROID_BUILD_SDK_VERSION' sur le projet ': facebook'."

erreur sur le build.gradlefichier, en ajoutant gradle.propertiesles valeurs:

ANDROID_BUILD_TARGET_SDK_VERSION=21<br>
ANDROID_BUILD_MIN_SDK_VERSION=15<br>
ANDROID_BUILD_TOOLS_VERSION=21.1.2<br>
ANDROID_BUILD_SDK_VERSION=21<br>

Source: https://stackoverflow.com/a/21490651/2161698


1

Créez le fichier build.gradle dans le projet facebook sdk:

apply plugin: 'android-library'

dependencies {
    compile 'com.android.support:support-v4:18.0.+'
}

android {
    compileSdkVersion 8
    buildToolsVersion "19.0.0"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

Ajoutez ensuite include ':libs:facebook'égal <project_directory>/libs/facebook(chemin vers la bibliothèque) dans settings.gradle.


J'ai déjà fait ça. Il montre toujours l'erreur. Je pense que l'erreur dit que Facebook n'est pas gradé et qu'il ne peut donc pas être commpiled. Mais je ne suis pas sûr
Uma

Essayez de construire via la console: ./gradlew clean assembleDebug
Vladimir


0

utiliser facebook sdk dans android studio est assez simple, ajoutez simplement la ligne suivante dans votre gradle

  compile 'com.facebook.android:facebook-android-sdk:[4,5)'

et assurez-vous que vous avez mis à jour le référentiel de support Android, sinon, mettez-le à jour à l'aide du gestionnaire sdk autonome

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.