usando facebook sdk en Android studio

104

Estoy siguiendo el SDK de Facebook para Android con Android Studio . Cuando ejecuto mi aplicación, recibo la advertencia que se menciona a continuación.

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

¿Cómo debo solucionar esto?

Probé la respuesta de @Scott Barta y recibí el siguiente mensaje de error.

    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
Uma
fuente
¿Su repositorio de soporte de Android está instalado en su administrador de SDK para el SDK que está usando?
Scott Barta
No ¿Es obligatorio?
Uma
Si. Ese es el mensaje de error que está viendo. Sé que no es intuitivo; mejorarlo está en nuestra lista. Actualizaré mi respuesta para reflejar la necesidad de esto.
Scott Barta

Respuestas:

250

NOTA

Para Android Studio 0.5.5 y posteriores, y con versiones posteriores del SDK de Facebook, este proceso es mucho más simple que lo que se documenta a continuación (que fue escrito para versiones anteriores de ambos). Si está ejecutando la última versión, todo lo que necesita hacer es esto:

  1. Descargue el SDK de Facebook desde https://developers.facebook.com/docs/android/
  2. Descomprime el archivo
  3. En Android Studio 0.5.5 o posterior, elija "Importar módulo" en el menú Archivo.
  4. En el asistente, configure la ruta de origen del módulo a importar como el directorio "facebook" dentro del archivo descomprimido. (Nota: si elige la carpeta principal completa, no solo incluirá la biblioteca en sí, sino también todas las aplicaciones de muestra, cada una como un módulo separado. Esto puede funcionar, pero probablemente no sea lo que desea).
  5. Abra la estructura del proyecto Ctrl + Shift + Alt + Sy luego seleccione la pestaña de dependencias. Haga clic en el +botón y seleccione Módulo de dependencia. En la nueva ventana emergente, seleccione:facebook.
  6. Usted debe ser bueno para ir.

Instrucciones para Android Studio y SDK de Facebook más antiguos

Esto se aplica a Android Studio 0.5.4 y versiones anteriores, y tiene más sentido para las versiones del SDK de Facebook antes de que Facebook ofreciera archivos de compilación de Gradle para la distribución. No sé en qué versión del SDK hicieron ese cambio.

Las instrucciones de Facebook en "Importar el SDK a un proyecto de Android Studio" en su página https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ son incorrectas para proyectos basados ​​en Gradle (es decir, su proyecto se creó con el asistente de Nuevo proyecto de Android Studio y / o tiene un build.gradlearchivo para el módulo de su aplicación). En su lugar, siga estas instrucciones:

  1. Crea una librariescarpeta debajo del directorio principal de tu proyecto. Por ejemplo, si su proyecto es HelloWorldProject, crearía una HelloWorldProject/librariescarpeta.

  2. Ahora copie todo el facebookdirectorio de la instalación del SDK en la librariescarpeta que acaba de crear.

  3. Elimina la libscarpeta del facebookdirectorio. Si lo desea, eliminar el project.properties, build.xml, .classpath, y .project. archivos también. No los necesitas.

  4. Cree un build.gradlearchivo en el facebookdirectorio con el siguiente contenido:

    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']
            }
        }
    }
    

    Tenga en cuenta que dependiendo de cuándo esté siguiendo estas instrucciones en comparación con cuando está escrito, es posible que deba ajustar la classpath 'com.android.tools.build:gradle:0.6.+'línea para hacer referencia a una versión más nueva del complemento de Gradle. Pronto necesitaremos la versión 0.7 o posterior. Pruébelo, y si recibe un error que indica que se requiere una versión más reciente del complemento de Gradle, esa es la línea que debe editar.

  5. Asegúrese de que esté instalada la biblioteca de soporte de Android en su administrador de SDK.

  6. Edite su settings.gradlearchivo en el directorio principal de su aplicación y agregue esta línea:

    include ':libraries:facebook'
  7. Si tu proyecto ya está abierto en Android Studio, haz clic en el botón "Sincronizar proyecto con archivos Gradle" en la barra de herramientas. Una vez hecho esto, facebookdebería aparecer el módulo. ingrese la descripción de la imagen aquí

  8. Abra el cuadro de diálogo Estructura del proyecto. Elija Módulos de la lista de la izquierda, haga clic en el módulo de su aplicación, haga clic en la pestaña Dependencias y haga clic en el botón + para agregar una nueva dependencia. ingrese la descripción de la imagen aquí
  9. Elija "Dependencia del módulo". Aparecerá un cuadro de diálogo con una lista de módulos para elegir; seleccione “: bibliotecas: facebook”. ingrese la descripción de la imagen aquí
  10. Haga clic en Aceptar en todos los cuadros de diálogo. Android Studio resincronizará automáticamente tu proyecto (por lo que no es necesario hacer clic en el botón "Sincronizar proyecto con archivos Gradle" nuevamente) y seleccionará la nueva dependencia. Usted debe ser bueno para ir.
Scott Barta
fuente
1
/libraries/facebook/build.gradle me da algunos errores. "No se puede resolver el símbolo compileSdkVersion". Lo mismo con el símbolo compileSdkVersion, manifiesto y otros ...
sensorario
2
Esto funcionó para mí, pero tuve que cambiar la ruta al proyecto de calificación de las bibliotecas de Facebook para que sea la ruta absoluta, es decir, ":MyApp:libraries:facebook"tanto en el archivo de configuración como en el archivo build.grade para mi aplicación principal
Mark
7
¡Muy bien! Esta respuesta debería ser parte del tutorial oficial del SDK de Facebook.
Samuel Barbosa
1
Esta solución no me funciona. Después de seleccionar el directorio de Facebook dentro del directorio facebook-android-sdk-3.16, el asistente todavía dice 'Seleccionar módulos para importar': $. Yo uso Android Studio (beta) 0.8.2. ¿Alguna idea?
Diego Palomar
2
¿Por qué no pueden hacer esto sencillo por una vez?
Ojonugwa Jude Ochalifu
108

De hecho, Facebook ha agregado el SDK a los repositorios de Maven Central. Para configurar su proyecto utilizando la instancia del repositorio de maven, deberá hacer 2 cosas:

  1. En el archivo build.gradle de nivel superior de su proyecto , agregue los repositorios de Maven Central. El mío se ve así:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
    
  2. En el archivo build.grade de nivel de aplicación , agregue la dependencia sdk de Facebook:

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

También puede ajustar la versión específica del SDK de Facebook. Para obtener una lista de las versiones disponibles en el repositorio de maven, haga clic en este enlace.

SBerg413
fuente
1
Me está funcionando. Realmente es la mejor manera de agregar Facebook api en Android Studio. Gracias
Olkunmustafa
1
Este es el método de los documentos de Facebook, pero no funciona. Tengo android studio 1.0 y sdk v 3.x.
Abhishek Balani
1
Tenga en cuenta que debe especificar un número de versión exacto o al menos una principal, como 3.23. +. Facebook no tiene miedo de versionar la API rápidamente y realizar cambios importantes, lo que provocará fallas en la compilación y compilaciones no repetibles.
Greg Ennis
@GregEnnis - buena entrada. Actualicé la respuesta ligeramente y también agregué un comentario en el código.
SBerg413
Entonces, ¿no tengo que importar ninguna biblioteca externa y todo? Simplemente agregue el fb sdk en el archivo gradle.
Kaveesh Kanwal
17

Facebook publica el SDK en maven central:

Solo agrega :

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

dependencies {
    compile 'com.facebook.android:facebook-android-sdk:+'
}
Romain
fuente
2
Esto no es correcto, necesita mavenCentral () en la sección de repositorios.
Booger
1
jcenter include mavenCentral
Romain
12

La solución de Scott Barta funcionó para mí, excepto que tuve que agregarlos a las dependencias de mi archivo principal build.gradle del proyecto:

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

También vale la pena mencionar que debe asegurarse de:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

Son iguales en ambos archivos build.gradle ... Una vez que hice esto, funcionó como un encanto.

usuario2129635
fuente
Recibo un error al compilar: El proyecto con la ruta 'bibliotecas: facebook' no se pudo encontrar en el proyecto raíz ... ¿Alguna idea? (Por supuesto, he agregado la carpeta de acuerdo con la solución Scott Bs, ¡aunque NO tengo un archivo settings.gradle?! (Proyecto creado en Android Studio)
swebal
1
la línea del proyecto de compilación debe coincidir con la estructura del directorio del proyecto. : bibliotecas: facebook implica que su biblioteca de Facebook está en una carpeta llamada bibliotecas dentro de su directorio raíz
doubleA
6

Al usar git, puede incorporar el más nuevo facebook-android-sdk con facilidad.

  • Agregue facebook-android-sdk como submódulo: git submodule add https://github.com/facebook/facebook-android-sdk.git
  • Agregue sdk como proyecto gradle: edite settings.gradle y agregue una línea: include ':facebook-android-sdk:facebook'
  • Agregue sdk como dependencia al módulo: edite build.gradle y agregue dentro del bloque de dependencias: compile project(':facebook-android-sdk:facebook')
Pepijn
fuente
4

He usado Facebook SDK 4.10.0 para integrar el inicio de sesión en mi aplicación de Android. El tutorial que seguí es:

facebook iniciar sesión android studio

Podrá obtener el nombre, apellido, correo electrónico, género, identificación de Facebook y fecha de nacimiento de facebbok.

El tutorial anterior también explica cómo crear una aplicación en la consola de desarrollo de Facebook a través de un video.

agregar abajo en el build.gradle(Module:app)archivo:

repositories {
        mavenCentral()
    }

y

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

ahora agregue a continuación en el archivo 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" />

agregue lo siguiente en el archivo 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>

Y por último, agregue a continuación en el archivo 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();

    }

}
user6017633
fuente
3

Implementé el SDK de Android de Facebook en el repositorio de Sonatype.

Puede incluir esta biblioteca como dependencia de Gradle:

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

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

Publicación original aquí .

Oleksii K.
fuente
Esto ya no funciona, su sitio está caído. Mató a todo mi IDE.
Mgamerz
Extraño, utilicé sitios que verifican si un sitio está inactivo e incluso su página de inicio no se carga.
Mgamerz
2

Las personas que usan Android Studio 0.8.6 pueden hacer lo siguiente:

  1. Descarga Facebook-android-sdk-xxx.zip y descomprímelo
  2. Copie SOLAMENTE el directorio de Facebook bajo el directorio de Facebook-android-sdk-xxx en su proyecto junto con la aplicación /

    • ImAnApp /
      • | - aplicación /
      • | - construir /
      • | - facebook /
  3. Ahora debería ver Android Studio mostrando facebook como módulo

  4. Modifica el build.gradle de facebook en this.
    • archivos proporcionados ('../ libs / bolts.jar') para provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) compileSdkVersion 20u otra versión que definiste en la aplicación
    • buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION para buildToolsVersion '20.0.0'
    • minSdkVersion Integer.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) para minSdkVersion 14
    • targetSdkVersion Integer.parseInt (project.ANDROID_BUILD_TARGET_SDK_VERSION) para 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']
            }
        }
    }

¡Vuelva a sincronizar su archivo gradle y debería funcionar bien!

Robert
fuente
2

Arreglé el

"No se pudo encontrar la propiedad 'ANDROID_BUILD_SDK_VERSION' en el proyecto ': facebook'".

error en el build.gradlearchivo, agregando gradle.propertieslos valores:

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>

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

SebaGra
fuente
1

Cree el archivo build.gradle en el proyecto sdk de facebook:

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')
    }
}

Luego agregue include ':libs:facebook'iguales <project_directory>/libs/facebook(ruta a la biblioteca) en settings.gradle.

Vladimir
fuente
Ya hice esto. Sigue mostrando el error. Creo que el error dice que Facebook no es de Gradle y, por lo tanto, no se puede compilar. Pero no estoy seguro
Uma
Intente compilar a través de la consola: ./gradlew cleansembleDebug
Vladimir
0

usar facebook sdk en android studio es bastante simple, solo agregue la siguiente línea en su gradle

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

y asegúrese de haber actualizado el repositorio de soporte de Android, si no, actualícelo usando el administrador sdk independiente

Mehroz Munir
fuente