utilizzando l'SDK di Facebook in Android Studio


104

Sto seguendo Facebook SDK per Android utilizzando Android Studio . Quando eseguo la mia applicazione ricevo l'avvertenza sotto menzionata.

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

Come dovrei risolverlo?

Ho provato la risposta di @Scott Barta e ho ricevuto il seguente messaggio di errore.

    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

Il tuo repository di supporto Android è installato nel gestore SDK per l'SDK che stai utilizzando?
Scott Barta

No. È obbligatorio?
Uma

Sì. Questo è il messaggio di errore visualizzato. So che non è intuitivo; migliorarlo è sulla nostra lista. Aggiornerò la mia risposta per riflettere la necessità di questo.
Scott Barta

Risposte:


250

NOTA

Per Android Studio 0.5.5 e versioni successive e con le versioni successive di Facebook SDK, questo processo è molto più semplice di quanto documentato di seguito (che è stato scritto per le versioni precedenti di entrambi). Se stai eseguendo l'ultima, tutto ciò che devi fare è questo:

  1. Scarica l'SDK di Facebook da https://developers.facebook.com/docs/android/
  2. Decomprimere l'archivio
  3. In Android Studio 0.5.5 o successivo, scegli "Importa modulo" dal menu File.
  4. Nella procedura guidata, imposta il percorso sorgente del modulo da importare come directory "facebook" all'interno dell'archivio decompresso. (Nota: se scegli l'intera cartella principale, non verrà inserita solo la libreria stessa, ma anche tutte le app di esempio, ciascuna come modulo separato. Potrebbe funzionare ma probabilmente non è quello che desideri).
  5. Apri la struttura del progetto Ctrl + Shift + Alt + Se quindi seleziona la scheda dipendenze. Fare clic sul +pulsante e selezionare Module Dependency. Nella nuova finestra pop-up selezionare:facebook.
  6. Dovresti essere a posto.

Istruzioni per Android Studio e SDK di Facebook precedenti

Questo si applica ad Android Studio 0.5.4 e versioni precedenti e ha più senso per le versioni di Facebook SDK prima che Facebook offrisse i file di build Gradle per la distribuzione. Non so in quale versione dell'SDK abbiano apportato tale modifica.

Le istruzioni di Facebook in "Importa l'SDK in un progetto Android Studio" nella loro pagina https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ sono sbagliate per i progetti basati su Gradle (ovvero il progetto è stato creato utilizzando la procedura guidata Nuovo progetto di Android Studio e / o ha un build.gradlefile per il modulo dell'applicazione). Segui invece queste istruzioni:

  1. Crea una librariescartella sotto la directory principale del tuo progetto. Ad esempio, se il tuo progetto è HelloWorldProject, creerai una HelloWorldProject/librariescartella.

  2. Ora copia l'intera facebookdirectory dall'installazione dell'SDK nella librariescartella appena creata.

  3. Elimina la libscartella nella facebookdirectory. Se ti piace, eliminare il project.properties, build.xml, .classpath, e .project. anche file. Non ne hai bisogno.

  4. Crea un build.gradlefile nella facebookdirectory con i seguenti contenuti:

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

    Nota che a seconda di quando stai seguendo queste istruzioni rispetto a quando questo è scritto, potresti dover regolare la classpath 'com.android.tools.build:gradle:0.6.+'linea per fare riferimento a una versione più recente del plugin Gradle. Presto richiederemo la versione 0.7 o successiva. Provalo e se ricevi un errore che indica che è necessaria una versione più recente del plug-in Gradle, questa è la riga che devi modificare.

  5. Assicurati che la libreria di supporto Android nel tuo gestore SDK sia installata.

  6. Modifica il tuo settings.gradlefile nella directory principale dell'applicazione e aggiungi questa riga:

    include ':libraries:facebook'
  7. Se il tuo progetto è già aperto in Android Studio, fai clic sul pulsante "Sincronizza progetto con file Gradle" nella barra degli strumenti. Una volta terminato, facebookdovrebbe apparire il modulo. inserisci qui la descrizione dell'immagine

  8. Apri la finestra di dialogo Struttura del progetto. Scegli Moduli dall'elenco a sinistra, fai clic sul modulo della tua applicazione, fai clic sulla scheda Dipendenze e fai clic sul pulsante + per aggiungere una nuova dipendenza. inserisci qui la descrizione dell'immagine
  9. Scegli "Modulo dipendenza". Apparirà una finestra di dialogo con un elenco di moduli tra cui scegliere; selezionare ": librerie: facebook". inserisci qui la descrizione dell'immagine
  10. Fare clic su OK in tutte le finestre di dialogo. Android Studio risincronizzerà automaticamente il tuo progetto (rendendo superfluo fare di nuovo clic sul pulsante "Sincronizza progetto con file Gradle") e riprende la nuova dipendenza. Dovresti essere a posto.

1
/libraries/facebook/build.gradle mi da alcuni errori. "Impossibile risolvere il simbolo compileSdkVersion". Lo stesso con compileSdkVersion symbol, manifest e altri ...
sensorario

2
Questo ha funzionato per me, ma ho dovuto modificare il percorso del progetto di ":MyApp:libraries:facebook"valutazione delle librerie di Facebook in modo che fosse il percorso assoluto, cioè sia nel file delle impostazioni che nel file build.grade per la mia app principale
Mark

7
Molto bene! Questa risposta dovrebbe far parte del tutorial ufficiale di Facebook SDK.
Samuel Barbosa

1
Questa soluzione non funziona per me. Dopo aver selezionato la directory facebook all'interno della directory facebook-android-sdk-3.16, la procedura guidata dice ancora "Seleziona i moduli da importare": $. Uso Android Studio (beta) 0.8.2. Qualche idea?
Diego Palomar

2
Perché non riescono a rendere questa cosa semplice per una volta?
Ojonugwa Jude Ochalifu

108

Facebook ha infatti aggiunto l'SDK ai repository Maven Central. Per configurare il tuo progetto utilizzando l'istanza del repository Maven, dovrai fare 2 cose:

  1. Nel file build.gradle di primo livello dei tuoi progetti , aggiungi i repository Maven Central. Il mio assomiglia a questo:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
  2. Nel file build.grade a livello di app , aggiungi la dipendenza sdk di Facebook:

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

Puoi anche regolare la versione specifica dell'SDK di Facebook. Per un elenco delle versioni disponibili nel repository maven, fare clic su questo collegamento.


1
Sta funzionando per me. È davvero il modo migliore per aggiungere l'API di Facebook su Android Studio. Grazie
Olkunmustafa

1
Questo è il metodo sui documenti di Facebook ma non funziona. Ho Android Studio 1.0 e SDK v 3.x.
Abhishek Balani

1
Nota che dovresti specificare un numero di versione esatto o almeno un major, come 3.23. +. Facebook non ha paura di eseguire rapidamente la versione dell'API e di apportare modifiche sostanziali, che causeranno errori di compilazione e build non ripetibili.
Greg Ennis

@GregEnnis - buon input. Ho aggiornato leggermente la risposta e ho aggiunto anche un commento nel codice.
SBerg413

Quindi, non devo importare alcuna libreria esterna e tutto il resto? Basta semplicemente aggiungere l'fb sdk nel file gradle ??
Kaveesh Kanwal

17

Facebook pubblica l'SDK su maven central:

Basta aggiungere:

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

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

2
Questo non è corretto, hai bisogno di mavenCentral () nella sezione dei repository.
Booger

1
jcenter include mavenCentral
Romain

12

La soluzione di Scott Barta ha funzionato per me, tranne per il fatto che dovevo aggiungerli alle dipendenze del file build.gradle del mio progetto principale:

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

Vale anche la pena menzionare, devi assicurarti:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

Sono gli stessi in entrambi i file build.gradle ... Una volta fatto questo, ha funzionato a meraviglia.


Ricevo un errore durante la creazione: Impossibile trovare il progetto con percorso "librerie: facebook" nel progetto radice ... Qualche idea? (Ovviamente ho aggiunto la cartella in base alla soluzione Scott Bs, anche se NON ho un file settings.gradle ?! (Progetto creato in Android Studio)
swebal

1
la riga del progetto di compilazione deve corrispondere alla struttura della directory del progetto. : libraries: facebook implica che la tua libreria facebook si trovi in ​​una cartella chiamata libraries all'interno della tua root directory
doubleA

6

Quando usi git puoi incorporare il nuovissimo facebook-android-sdk con facilità.

  • Aggiungi facebook-android-sdk come sottomodulo: git submodule add https://github.com/facebook/facebook-android-sdk.git
  • Aggiungi sdk come progetto gradle: modifica settings.gradle e aggiungi riga: include ':facebook-android-sdk:facebook'
  • Aggiungi sdk come dipendenza al modulo: modifica build.gradle e aggiungi all'interno del blocco delle dipendenze: compile project(':facebook-android-sdk:facebook')

4

Ho usato facebook sdk 4.10.0 per integrare il login nella mia app Android. Il tutorial che ho seguito è:

accesso a facebook android studio

Sarai in grado di ottenere nome, cognome, email, sesso, ID Facebook e data di nascita da facebbok.

Il tutorial sopra spiega anche come creare un'app nella console per sviluppatori di Facebook tramite video.

aggiungi sotto nel build.gradle(Module:app)file:

repositories {
        mavenCentral()
    }

e

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

ora aggiungi di seguito nel file 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" />

aggiungere quanto segue nel file 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 nell'ultima aggiunta di seguito nel file 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

Ho distribuito l'SDK Android di Facebook nel repository Sonatype.

Puoi includere questa libreria come dipendenza Gradle:

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

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

Post originale qui .


Non funziona più, il tuo sito è inattivo. Ha ucciso il mio intero IDE.
Mgamerz

Strano, ho usato siti che controllano se un sito è inattivo e anche la tua home page non viene caricata.
Mgamerz

2

Le persone che utilizzano Android Studio 0.8.6 potrebbero eseguire queste operazioni:

  1. Scarica Facebook-android-sdk-xxx.zip e decomprimilo
  2. Copia SOLO la directory facebook sotto la directory Facebook-android-sdk-xxx nel tuo progetto insieme all'app /

    • ImAnApp /
      • | - app /
      • | - build /
      • | - facebook /
  3. Ora dovresti vedere Android Studio che mostra Facebook come modulo

  4. Modifica il build.gradle di Facebook in questo.
    • fornito file ('../ libs / bolts.jar') a provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) compileSdkVersion 20o un'altra versione definita nell'app
    • buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION a buildToolsVersion '20.0.0'
    • minSdkVersion Integer.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) a minSdkVersion 14
    • targetSdkVersion Integer.parseInt (project.ANDROID_BUILD_TARGET_SDK_VERSION) a 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']
            }
        }
    }

Risincronizza il tuo file gradle e dovrebbe funzionare bene!


2

Ho corretto il file

"Impossibile trovare la proprietà" ANDROID_BUILD_SDK_VERSION "nel progetto": facebook "."

errore sul build.gradlefile, aggiungendo gradle.propertiesi valori:

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

Crea il file build.gradle nel progetto sdk di 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')
    }
}

Quindi aggiungi include ':libs:facebook'uguale <project_directory>/libs/facebook(percorso alla libreria) in settings.gradle.


L'ho già fatto. Mostra ancora l'errore. Penso che l'errore dica che Facebook non è graduale e quindi non può essere inviato. Ma non sono sicuro
Uma

Prova a compilare tramite console: ./gradlew clean assembembleDebug
Vladimir


0

usare facebook sdk in android studio è abbastanza semplice, basta aggiungere la seguente riga nel tuo gradle

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

e assicurati di aver aggiornato il repository di supporto Android, in caso contrario aggiornalo utilizzando il gestore sdk autonomo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.