mit Facebook SDK in Android Studio

104

Ich verfolge Facebook SDK für Android mit Android Studio . Wenn ich meine Anwendung ausführe, wird die unten genannte Warnung angezeigt.

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

Wie soll ich das lösen?

Ich habe die Antwort von @Scott Barta ausprobiert und die folgende Fehlermeldung erhalten.

    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
quelle
Ist Ihr Android Support Repository in Ihrem SDK-Manager für das von Ihnen verwendete SDK installiert?
Scott Barta
Nee. Ist es obligatorisch?
Uma
Ja. Das ist die Fehlermeldung, die Sie sehen. Ich weiß, dass es nicht intuitiv ist. Verbesserung ist auf unserer Liste. Ich werde meine Antwort aktualisieren, um die Notwendigkeit dafür widerzuspiegeln.
Scott Barta

Antworten:

250

HINWEIS

Für Android Studio 0.5.5 und höher und mit späteren Versionen des Facebook SDK ist dieser Vorgang viel einfacher als der unten dokumentierte (der für frühere Versionen von beiden geschrieben wurde). Wenn Sie die neueste Version ausführen, müssen Sie lediglich Folgendes tun:

  1. Laden Sie das Facebook SDK von https://developers.facebook.com/docs/android/ herunter.
  2. Entpacken Sie das Archiv
  3. Wählen Sie in Android Studio 0.5.5 oder höher "Menü importieren" aus dem Menü "Datei".
  4. Legen Sie im Assistenten den Quellpfad des Moduls fest, der als "Facebook" -Verzeichnis im entpackten Archiv importiert werden soll. (Hinweis: Wenn Sie den gesamten übergeordneten Ordner auswählen, werden nicht nur die Bibliothek selbst, sondern auch alle Beispiel-Apps als separates Modul angezeigt. Dies funktioniert möglicherweise, ist aber wahrscheinlich nicht das, was Sie möchten.)
  5. Öffnen Sie die Projektstruktur mit Ctrl + Shift + Alt + Sund wählen Sie dann die Registerkarte Abhängigkeiten. Klicken Sie auf die +Schaltfläche und wählen Sie Modulabhängigkeit. Wählen Sie im neuen Fenster Popup:facebook.
  6. Du solltest gut gehen.

Anleitung für älteres Android Studio und älteres Facebook SDK

Dies gilt für Android Studio 0.5.4 und früher und ist für Versionen des Facebook SDK am sinnvollsten, bevor Facebook Gradle-Build-Dateien für die Distribution anbot. Ich weiß nicht, in welcher Version des SDK sie diese Änderung vorgenommen haben.

Die Anweisungen von Facebook unter "Importieren des SDK in ein Android Studio-Projekt" auf der Seite https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ sind falsch für Gradle-basierte Projekte (dh Ihr Projekt wurde mit dem Assistenten für neue Projekte von Android Studio erstellt und / oder verfügt über eine build.gradleDatei für Ihr Anwendungsmodul). Befolgen Sie stattdessen diese Anweisungen:

  1. Erstellen Sie einen librariesOrdner unter dem Hauptverzeichnis Ihres Projekts. Wenn Ihr Projekt beispielsweise HelloWorldProject ist, würden Sie einen HelloWorldProject/librariesOrdner erstellen .

  2. Kopieren Sie nun das gesamte facebookVerzeichnis aus der SDK-Installation in den librariessoeben erstellten Ordner.

  3. Löschen Sie den libsOrdner im facebookVerzeichnis. Wenn Sie möchten, löschen Sie die project.properties, build.xml, .classpath, und .project. Dateien auch. Du brauchst sie nicht.

  4. Erstellen Sie eine build.gradleDatei im facebookVerzeichnis mit folgendem Inhalt:

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

    Beachten Sie, dass Sie je nachdem, wann Sie diese Anweisungen befolgen, im Vergleich zu dem Zeitpunkt, an dem dies geschrieben wurde, möglicherweise die classpath 'com.android.tools.build:gradle:0.6.+'Zeile anpassen müssen, um auf eine neuere Version des Gradle-Plugins zu verweisen. Bald werden wir Version 0.7 oder höher benötigen. Probieren Sie es aus und wenn Sie die Fehlermeldung erhalten, dass eine neuere Version des Gradle-Plugins erforderlich ist, müssen Sie diese Zeile bearbeiten.

  5. Stellen Sie sicher, dass die Android Support Library in Ihrem SDK-Manager installiert ist.

  6. Bearbeiten Sie Ihre settings.gradleDatei im Hauptverzeichnis Ihrer Anwendung und fügen Sie diese Zeile hinzu:

    include ':libraries:facebook'
  7. Wenn Ihr Projekt bereits in Android Studio geöffnet ist, klicken Sie in der Symbolleiste auf die Schaltfläche "Projekt mit Gradle-Dateien synchronisieren". Sobald dies erledigt ist, sollte das facebookModul angezeigt werden. Geben Sie hier die Bildbeschreibung ein

  8. Öffnen Sie das Dialogfeld Projektstruktur. Wählen Sie in der linken Liste Module aus, klicken Sie auf das Modul Ihrer Anwendung, klicken Sie auf die Registerkarte Abhängigkeiten und klicken Sie auf die Schaltfläche +, um eine neue Abhängigkeit hinzuzufügen. Geben Sie hier die Bildbeschreibung ein
  9. Wählen Sie "Modulabhängigkeit". Es wird ein Dialogfeld mit einer Liste von Modulen angezeigt, aus denen Sie auswählen können. Wählen Sie ": Bibliotheken: Facebook". Geben Sie hier die Bildbeschreibung ein
  10. Klicken Sie in allen Dialogen auf OK. Android Studio synchronisiert Ihr Projekt automatisch neu (sodass Sie nicht erneut auf die Schaltfläche "Projekt mit Gradle-Dateien synchronisieren" klicken müssen) und übernimmt die neue Abhängigkeit. Du solltest gut gehen.
Scott Barta
quelle
1
/libraries/facebook/build.gradle gibt mir einige Fehler. "Das compileSdkVersion-Symbol kann nicht aufgelöst werden". Das gleiche gilt für das Symbol compileSdkVersion, das Manifest und andere ...
Sensorario
2
Dies funktionierte für mich, aber ich musste den Pfad zum Grade-Projekt für Facebook-Bibliotheken so ändern, dass er der absolute Pfad ist, dh ":MyApp:libraries:facebook"sowohl in der Einstellungsdatei als auch in der build.grade-Datei für meine Haupt-App
Mark
7
Sehr gut! Diese Antwort sollte Teil des offiziellen Facebook SDK-Tutorials sein.
Samuel Barbosa
1
Diese Lösung funktioniert bei mir nicht. Nach Auswahl des Facebook-Verzeichnisses im Verzeichnis facebook-android-sdk-3.16 sagt der Assistent weiterhin "Zu importierende Module auswählen": $. Ich benutze Android Studio (Beta) 0.8.2. Irgendeine Idee?
Diego Palomar
2
Warum können sie das Ding nicht einfach einmal einfach machen?
Ojonugwa Jude Ochalifu
108

Facebook hat das SDK tatsächlich zu den Maven Central-Repositories hinzugefügt. Um Ihr Projekt mit der Instanz des Maven Repo zu konfigurieren, müssen Sie zwei Dinge tun:

  1. In Ihren Projekten Top-Level - build.gradle Datei, fügen Sie die Maven Central Repository. Meins sieht so aus:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
  2. In der App-Ebene build.grade Datei, fügen Sie die Facebook - sdk - Abhängigkeit:

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

Sie können auch die spezifische Facebook SDK-Version anpassen. Klicken Sie auf diesen Link, um eine Liste der verfügbaren Versionen im Maven-Repository anzuzeigen .

SBerg413
quelle
1
Es funktioniert für mich. Es ist wirklich der beste Weg, um Facebook-API auf Android Studio hinzuzufügen. Vielen Dank
Olkunmustafa
1
Dies ist die Methode in Facebook-Dokumenten, aber sie funktioniert nicht. Ich habe Android Studio 1.0 und SDK V 3.x.
Abhishek Balani
1
Beachten Sie, dass Sie eine genaue Versionsnummer oder zumindest eine Hauptversionsnummer wie 3.23. + Angeben sollten. Facebook hat keine Angst davor, die API schnell zu versionieren und wichtige Änderungen vorzunehmen, die zu Buildfehlern und nicht wiederholbaren Builds führen.
Greg Ennis
@ GregEnnis - guter Input. Ich habe die Antwort leicht aktualisiert und auch einen Kommentar in den Code eingefügt.
SBerg413
Also muss ich keine externe Bibliothek und alles importieren? Einfach die fb sdk in die gradle datei einfügen ??
Kaveesh Kanwal
17

Facebook veröffentlicht das SDK auf maven central:

Einfach hinzufügen :

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

dependencies {
    compile 'com.facebook.android:facebook-android-sdk:+'
}
Romain
quelle
2
Dies ist nicht richtig, Sie benötigen mavenCentral () im Abschnitt Repositorys.
Booger
1
jcenter gehören mavenCentral
Romain
12

Die Lösung von Scott Barta funktionierte für mich, außer dass ich diese zu den Abhängigkeiten meiner Hauptprojektdatei build.gradle hinzufügen musste:

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

Erwähnenswert ist auch, dass Sie Folgendes sicherstellen müssen:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

Sind in beiden build.gradle-Dateien gleich ... Sobald ich das getan habe, lief es wie ein Zauber.

user2129635
quelle
Beim Erstellen wird eine Fehlermeldung angezeigt: Projekt mit Pfad 'Bibliotheken: Facebook' konnte im Root-Projekt nicht gefunden werden ... Irgendwelche Ideen? (Ich habe den Ordner natürlich gemäß der Scott Bs-Lösung hinzugefügt, obwohl ich KEINE settings.gradle-Datei habe?! (Projekt erstellt in Android Studio)
swebal
1
Die Kompilierungsprojektzeile muss mit Ihrer Projektverzeichnisstruktur übereinstimmen. : Bibliotheken: Facebook impliziert, dass sich Ihre Facebook-Bibliothek in einem Ordner namens Bibliotheken in Ihrem Stammverzeichnis befindet
doubleA
6

Wenn Sie git verwenden, können Sie das neueste Facebook-Android-SDK problemlos integrieren.

  • Facebook-android-sdk als Submodul hinzufügen: git submodule add https://github.com/facebook/facebook-android-sdk.git
  • SDK als Gradle-Projekt hinzufügen: settings.gradle bearbeiten und Zeile hinzufügen: include ':facebook-android-sdk:facebook'
  • Fügen Sie sdk als Abhängigkeit zum Modul hinzu: Bearbeiten Sie build.gradle und fügen Sie es innerhalb des Abhängigkeitsblocks hinzu: compile project(':facebook-android-sdk:facebook')
Pepijn
quelle
4

Ich habe Facebook SDK 4.10.0 verwendet, um die Anmeldung in meine Android-App zu integrieren. Das Tutorial, dem ich gefolgt bin, ist:

Facebook Login Android Studio

Sie können Vorname, Nachname, E-Mail, Geschlecht, Facebook-ID und Geburtsdatum von facebbok erhalten.

Das obige Tutorial erklärt auch, wie man eine App in der Facebook-Entwicklerkonsole per Video erstellt.

unten in build.gradle(Module:app)Datei hinzufügen :

repositories {
        mavenCentral()
    }

und

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

Fügen Sie jetzt unten in der Datei AndroidManifest.xml hinzu:

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

Fügen Sie Folgendes in die Datei activity_main.xml ein:

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

Und zuletzt in der Datei MainActivity.java hinzufügen:

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
quelle
3

Ich habe das Facebook Android SDK im Sonatype-Repository bereitgestellt.

Sie können diese Bibliothek als Gradle-Abhängigkeit einschließen:

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

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

Originaler Beitrag hier .

Oleksii K.
quelle
Dies funktioniert nicht mehr, Ihre Website ist ausgefallen. Hat meine ganze IDE getötet.
Mgamerz
Seltsamerweise habe ich Websites verwendet, die überprüfen, ob eine Website nicht verfügbar ist und sogar Ihre Homepage nicht geladen wird.
Mgamerz
2

Benutzer von Android Studio 0.8.6 können Folgendes tun:

  1. Laden Sie Facebook-android-sdk-xxx.zip herunter und entpacken Sie es
  2. Kopieren Sie NUR das Facebook-Verzeichnis unter dem Facebook-android-sdk-xxx-Verzeichnis zusammen mit der App / in Ihr Projekt.

    • ImAnApp /
      • | - app /
      • | - build /
      • | - facebook /
  3. Jetzt sollte Android Studio Facebook als Modul anzeigen

  4. Ändern Sie die build.gradle von Facebook in diese.
    • bereitgestellte Dateien ('../ libs / bolts.jar') an provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) to compileSdkVersion 20 anderen Version, die Sie in der App definiert haben
    • buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION to buildToolsVersion '20.0.0'
    • minSdkVersion Integer.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) bis minSdkVersion 14
    • targetSdkVersion Integer.parseInt (project.ANDROID_BUILD_TARGET_SDK_VERSION) to 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']
            }
        }
    }

Synchronisieren Sie Ihre Gradle-Datei erneut und sie sollte einwandfrei funktionieren!

Robert
quelle
2

Ich habe das behoben

"Die Eigenschaft 'ANDROID_BUILD_SDK_VERSION' konnte im Projekt ': facebook' nicht gefunden werden."

Fehler in der build.gradleDatei durch Hinzufügen gradle.propertiesder Werte:

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>

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

SebaGra
quelle
1

Erstellen Sie die Datei build.gradle im Facebook SDK-Projekt:

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

Fügen Sie dann include ':libs:facebook'gleich <project_directory>/libs/facebook(Pfad zur Bibliothek) hinzu settings.gradle.

Vladimir
quelle
Das habe ich schon gemacht. Es zeigt immer noch den Fehler. Ich denke, der Fehler besagt, dass Facebook kein Gradle ist und daher nicht kommuniziert werden kann. Aber ich bin nicht sicher
Uma
Versuchen Sie, über die Konsole zu bauen: ./gradlew clean assembleDebug
Vladimir
0

Die Verwendung von Facebook SDK in Android Studio ist ganz einfach. Fügen Sie einfach die folgende Zeile in Ihren Gradle ein

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

und stellen Sie sicher, dass Sie das Android-Support-Repository aktualisiert haben. Wenn nicht, aktualisieren Sie es mit dem eigenständigen SDK-Manager

Mehroz Munir
quelle