usando facebook sdk no estúdio Android


104

Estou seguindo o SDK do Facebook para Android usando o Android Studio . Quando executo meu aplicativo, recebo o aviso mencionado a seguir.

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

Como devo resolver isso?

Tentei a resposta de @Scott Barta e recebi a seguinte mensagem de erro.

    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

O seu Android Support Repository está instalado no seu gerenciador de SDK para o SDK que você está usando?
Scott Barta

Não. É obrigatório?
Uma de

Sim. Essa é a mensagem de erro que você está vendo. Eu sei que não é intuitivo; melhorá-lo está em nossa lista. Vou atualizar minha resposta para refletir a necessidade disso.
Scott Barta

Respostas:


250

NOTA

Para Android Studio 0.5.5 e posterior, e com versões posteriores do Facebook SDK, este processo é muito mais simples do que o documentado abaixo (que foi escrito para versões anteriores de ambos). Se você estiver executando o mais recente, tudo o que você precisa fazer é:

  1. Baixe o SDK do Facebook em https://developers.facebook.com/docs/android/
  2. Descompacte o arquivo
  3. No Android Studio 0.5.5 ou posterior, escolha "Import Module" no menu File.
  4. No assistente, defina o caminho de origem do módulo a ser importado como o diretório "facebook" dentro do arquivo descompactado. (Observação: se você escolher a pasta pai inteira, ela trará não apenas a biblioteca em si, mas também todos os aplicativos de amostra, cada um como um módulo separado. Isso pode funcionar, mas provavelmente não é o que você deseja).
  5. Abra a estrutura do projeto Ctrl + Shift + Alt + Se selecione a guia dependências. Clique no +botão e selecione Dependência do Módulo. Na nova janela pop-up selecione:facebook.
  6. Você deve estar pronto para ir.

Instruções para Android Studio e SDK do Facebook mais antigos

Isso se aplica ao Android Studio 0.5.4 e anteriores e faz mais sentido para as versões do Facebook SDK antes que o Facebook oferecesse arquivos de compilação do Gradle para a distribuição. Não sei em qual versão do SDK eles fizeram essa alteração.

As instruções do Facebook em "Importar o SDK para um projeto Android Studio" em sua página https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ estão erradas para projetos baseados em Gradle (ou seja, seu projeto foi criado usando o assistente de Novo projeto do Android Studio e / ou tem um build.gradlearquivo para o módulo do seu aplicativo). Siga estas instruções:

  1. Crie uma librariespasta sob o diretório principal do seu projeto. Por exemplo, se seu projeto for HelloWorldProject, você deve criar uma HelloWorldProject/librariespasta.

  2. Agora copie todo o facebookdiretório da instalação do SDK para a librariespasta que você acabou de criar.

  3. Exclua a libspasta do facebookdiretório. Se você gosta, exclua o project.properties, build.xml, .classpath, e .project. arquivos também. Você não precisa deles.

  4. Crie um build.gradlearquivo no facebookdiretório com o seguinte conteúdo:

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

    Observe que, dependendo de quando você está seguindo essas instruções em comparação a quando isso foi escrito, pode ser necessário ajustar a classpath 'com.android.tools.build:gradle:0.6.+'linha para fazer referência a uma versão mais recente do plug-in Gradle. Em breve, exigiremos a versão 0.7 ou posterior. Experimente e, se ocorrer um erro informando que uma versão mais recente do plug-in do Gradle é necessária, essa é a linha que você deve editar.

  5. Certifique-se de que a Android Support Library em seu gerenciador de SDK esteja instalada.

  6. Edite seu settings.gradlearquivo no diretório principal do aplicativo e adicione esta linha:

    include ':libraries:facebook'
  7. Se o seu projeto já estiver aberto no Android Studio, clique no botão "Sync Project with Gradle Files" na barra de ferramentas. Uma vez feito isso, o facebookmódulo deve aparecer. insira a descrição da imagem aqui

  8. Abra a caixa de diálogo Estrutura do projeto. Escolha Módulos na lista à esquerda, clique no módulo do seu aplicativo, clique na guia Dependências e clique no botão + para adicionar uma nova dependência. insira a descrição da imagem aqui
  9. Escolha “Dependência de módulo”. Isso abrirá uma caixa de diálogo com uma lista de módulos para escolher; selecione “: bibliotecas: facebook”. insira a descrição da imagem aqui
  10. Clique em OK em todas as caixas de diálogo. O Android Studio irá ressincronizar automaticamente seu projeto (tornando desnecessário clicar no botão "Sincronizar projeto com arquivos do Gradle" novamente) e escolher a nova dependência. Você deve estar pronto para ir.

1
/libraries/facebook/build.gradle me dê alguns erros. "Não é possível resolver o símbolo compileSdkVersion". O mesmo com o símbolo compileSdkVersion, manifest e outros ...
sensorario

2
Isso funcionou para mim, mas eu tive que alterar o caminho para o projeto de grau das bibliotecas do Facebook para ser o caminho absoluto, ou seja ":MyApp:libraries:facebook", tanto no arquivo de configurações quanto no arquivo build.grade do meu aplicativo principal
Marcos

7
Muito bom! Esta resposta deve fazer parte do tutorial oficial do Facebook SDK.
Samuel Barbosa

1
Esta solução não funciona para mim. Depois de selecionar o diretório facebook dentro do diretório facebook-android-sdk-3.16, o assistente ainda diz 'Selecionar módulos para importar': $. Eu uso o Android Studio (beta) 0.8.2. Qualquer ideia?
Diego Palomar

2
Por que eles não podem simplesmente tornar isso simples de uma vez?
Ojonugwa Jude Ochalifu

108

O Facebook de fato adicionou o SDK aos repositórios Maven Central. Para configurar seu projeto usando a instância do repo maven, você precisará fazer duas coisas:

  1. No arquivo build.gradle de nível superior de seus projetos , adicione os repositórios Maven Central. O meu é assim:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
  2. No arquivo build.grade de nível de aplicativo , adicione a dependência SDk do Facebook:

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

Você também pode ajustar a versão específica do Facebook SDK. Para obter uma lista das versões disponíveis no repositório maven, clique neste link.


1
Está funcionando para mim. É realmente a melhor maneira de adicionar a API do Facebook no Android Studio. Obrigado
Olkunmustafa

1
Este é o método nos documentos do Facebook, mas não está funcionando. Tenho android studio 1.0 e sdk v 3.x.
Abhishek Balani

1
Observe que você deve especificar um número de versão exato ou pelo menos um principal, como 3.23. +. O Facebook não tem medo de criar uma versão da API rapidamente e fazer alterações significativas, que causarão falhas de compilação e compilações não repetíveis.
Greg Ennis

@GregEnnis - boa entrada. Atualizei um pouco a resposta e adicionei um comentário no código.
SBerg413

Então, eu não preciso importar nenhuma biblioteca externa e tudo mais? Basta adicionar o fb SDK no arquivo gradle ??
Kaveesh Kanwal

17

O Facebook publica o SDK no maven central:

Basta adicionar:

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

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

2
Isso não está certo, você precisa de mavenCentral () na seção de repositórios.
Booger

1
jcenter inclui mavenCentral
Romain

12

A solução de Scott Barta funcionou para mim, exceto que tive que adicioná-los às dependências do arquivo build.gradle do meu projeto principal:

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

Também vale a pena mencionar, você precisa se certificar de que:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

São iguais em ambos os arquivos build.gradle ... Depois de fazer isso, funcionou como um encanto.


Recebo um erro ao compilar: O projeto com o caminho 'bibliotecas: facebook' não foi encontrado no projeto raiz ... Alguma ideia? (É claro que adicionei a pasta de acordo com a solução Scott Bs, embora NÃO tenha um arquivo settings.gradle ?! (Projeto criado no Android Studio)
swebal

1
a linha do projeto de compilação precisa corresponder à estrutura de diretório do projeto. : bibliotecas: o Facebook implica que sua biblioteca do Facebook está em uma pasta chamada bibliotecas dentro do seu diretório raiz
doubleA

6

Ao usar o git, você pode incorporar o mais novo facebook-android-sdk com facilidade.

  • Adicionar facebook-android-sdk como submódulo: git submodule add https://github.com/facebook/facebook-android-sdk.git
  • Adicionar sdk como projeto gradle: edite settings.gradle e adicione linha: include ':facebook-android-sdk:facebook'
  • Adicione sdk como dependência ao módulo: edite build.gradle e adicione no bloco de dependências: compile project(':facebook-android-sdk:facebook')

4

Usei o facebook sdk 4.10.0 para integrar o login no meu aplicativo Android. O tutorial que segui é:

facebook login android studio

Você será capaz de obter nome, sobrenome, e-mail, gênero, id do Facebook e data de nascimento do facebbok.

O tutorial acima também explica como criar um aplicativo no console do desenvolvedor do Facebook por meio de vídeo.

adicione abaixo no build.gradle(Module:app)arquivo:

repositories {
        mavenCentral()
    }

e

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

agora adicione abaixo no arquivo 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" />

adicione o seguinte no arquivo 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>

E por último, adicione abaixo no arquivo 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

Implantei o Facebook Android SDK no repositório Sonatype.

Você pode incluir esta biblioteca como dependência do Gradle:

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

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

Postagem original aqui .


Isso não funciona mais, seu site está fora do ar. Matou todo o meu IDE.
Mgamerz

Estranho, usei sites que verificam se um site está fora do ar e até mesmo sua página inicial não carrega.
Mgamerz

2

Pessoas que usam o Android Studio 0.8.6 podem fazer o seguinte:

  1. Baixe Facebook-android-sdk-xxx.zip e descompacte-o
  2. Copie SOMENTE o diretório do Facebook no diretório Facebook-android-sdk-xxx em seu projeto junto com o app /

    • ImAnApp /
      • | - app /
      • | - construir /
      • | - facebook /
  3. Agora você deve ver o Android Studio mostrando o Facebook como módulo

  4. Modifique o build.gradle do Facebook para isso.
    • arquivos fornecidos ('../ libs / bolts.jar') para provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) para compileSdkVersion 20ou outra versão que você definiu no aplicativo
    • 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']
            }
        }
    }

Sincronize novamente o arquivo do Gradle e ele deve funcionar bem!


2

Eu consertei o

"Não foi possível encontrar a propriedade 'ANDROID_BUILD_SDK_VERSION' no projeto ': facebook'."

erro no build.gradlearquivo, adicionando gradle.propertiesos 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>

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


1

Crie o arquivo build.gradle no projeto sdk do 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')
    }
}

Em seguida, adicione include ':libs:facebook'igual <project_directory>/libs/facebook(caminho para a biblioteca) em settings.gradle.


Eu já fiz isso. Ainda está mostrando o erro. Acho que o erro diz que o Facebook não é Gradle e, portanto, não pode ser compactado. Mas não tenho certeza
Uma

Experimente construir através do console: ./gradlew clean assembleDebug
Vladimir


0

usar facebook sdk no android studio é bastante simples, basta adicionar a seguinte linha em seu gradle

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

e certifique-se de ter atualizado o repositório de suporte do Android, se não, atualize-o usando o gerenciador SDk independente

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.