używając facebook sdk w Android Studio

104

Śledzę Facebook SDK dla Androida używając Android Studio . Kiedy uruchamiam moją aplikację, otrzymuję poniższe ostrzeżenie.

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

Jak mam to rozwiązać?

Wypróbowałem odpowiedź @Scott Barta i otrzymałem następujący komunikat o błędzie.

    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
źródło
Czy Twoje repozytorium pomocy technicznej systemu Android jest zainstalowane w menedżerze SDK dla zestawu SDK, którego używasz?
Scott Barta
Nie. Czy to jest obowiązkowe?
Uma
Tak. To jest komunikat o błędzie, który widzisz. Wiem, że to nieintuicyjne; ulepszenie go jest na naszej liście. Zaktualizuję odpowiedź, aby odzwierciedlić taką potrzebę.
Scott Barta

Odpowiedzi:

250

UWAGA

W przypadku Android Studio 0.5.5 i nowszych oraz nowszych wersjach Facebook SDK ten proces jest znacznie prostszy niż to, co jest opisane poniżej (które zostało napisane dla wcześniejszych wersji obu). Jeśli korzystasz z najnowszej wersji, wszystko, co musisz zrobić, to:

  1. Pobierz Facebook SDK z https://developers.facebook.com/docs/android/
  2. Rozpakuj archiwum
  3. W Android Studio 0.5.5 lub nowszym wybierz „Importuj moduł” z menu Plik.
  4. W kreatorze ustaw ścieżkę źródłową modułu do importu jako katalog „facebook” wewnątrz rozpakowanego archiwum. (Uwaga: jeśli wybierzesz cały folder nadrzędny, przyniesie on nie tylko samą bibliotekę, ale także wszystkie przykładowe aplikacje, każda jako oddzielny moduł. To może działać, ale prawdopodobnie nie jest tym, czego chcesz).
  5. Otwórz strukturę projektu, Ctrl + Shift + Alt + Sa następnie wybierz kartę zależności. Kliknij +przycisk i wybierz Zależność modułu. W nowym oknie wybierz:facebook.
  6. Powinieneś być gotowy do drogi.

Instrukcje dla starszego Android Studio i starszego zestawu SDK Facebooka

Dotyczy to Android Studio 0.5.4 i wcześniejszych i jest najbardziej sensowne dla wersji Facebook SDK, zanim Facebook zaoferował pliki kompilacji Gradle do dystrybucji. Nie wiem, w której wersji SDK wprowadzili tę zmianę.

Instrukcje Facebooka w sekcji „Importuj SDK do projektu Android Studio” na stronie https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ są nieprawidłowe dla projektów opartych na Gradle (tj. Twój projekt został zbudowany przy użyciu kreatora nowego projektu Android Studio i / lub zawiera build.gradleplik modułu aplikacji). Zamiast tego postępuj zgodnie z tymi instrukcjami:

  1. Utwórz librariesfolder pod głównym katalogiem projektu. Na przykład, jeśli projekt to HelloWorldProject, należy utworzyć HelloWorldProject/librariesfolder.

  2. Teraz skopiuj cały facebookkatalog z instalacji SDK do librarieswłaśnie utworzonego folderu.

  3. Usuń libsfolder w facebookkatalogu. Jeśli chcesz, usunąć project.properties, build.xml, .classpath, i .project. pliki. Nie potrzebujesz ich.

  4. Utwórz build.gradleplik w facebookkatalogu o następującej zawartości:

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

    Zwróć uwagę, że w zależności od tego, kiedy postępujesz zgodnie z tymi instrukcjami w porównaniu z momentem, w którym to zostało napisane, może być konieczne dostosowanie classpath 'com.android.tools.build:gradle:0.6.+'wiersza, aby odwoływał się do nowszej wersji wtyczki Gradle. Wkrótce będziemy potrzebować wersji 0.7 lub nowszej. Wypróbuj to, a jeśli pojawi się błąd, że wymagana jest nowsza wersja wtyczki Gradle, to jest to wiersz, który musisz edytować.

  5. Upewnij się, że biblioteka obsługi Androida w menedżerze SDK jest zainstalowana.

  6. Edytuj settings.gradleplik w głównym katalogu aplikacji i dodaj ten wiersz:

    include ':libraries:facebook'
  7. Jeśli Twój projekt jest już otwarty w Android Studio, kliknij przycisk „Synchronizuj projekt z plikami Gradle” na pasku narzędzi. Po zakończeniu facebookpowinien pojawić się moduł. wprowadź opis obrazu tutaj

  8. Otwórz okno dialogowe Struktura projektu. Wybierz Moduły z listy po lewej stronie, kliknij moduł aplikacji, kliknij kartę Zależności, a następnie kliknij przycisk +, aby dodać nową zależność. wprowadź opis obrazu tutaj
  9. Wybierz „Zależność modułu”. Wyświetli się okno dialogowe z listą modułów do wyboru; wybierz „: biblioteki: facebook”. wprowadź opis obrazu tutaj
  10. Kliknij OK we wszystkich oknach dialogowych. Android Studio automatycznie ponownie zsynchronizuje projekt (dzięki czemu nie będzie konieczne ponowne klikanie przycisku „Synchronizuj projekt z plikami Gradle”) i pobierze nową zależność. Powinieneś być gotowy do drogi.
Scott Barta
źródło
1
/libraries/facebook/build.gradle podaj mi kilka błędów. „Nie można rozpoznać symbolu compileSdkVersion”. To samo z symbolem compileSdkVersion, manifestem i innymi ...
sensorario
2
To zadziałało dla mnie, ale musiałem zmienić ścieżkę do projektu oceny bibliotek Facebooka na ścieżkę bezwzględną, tj. ":MyApp:libraries:facebook"Zarówno w pliku ustawień, jak i pliku build.grade dla mojej głównej aplikacji
Mark
7
Bardzo dobrze! Ta odpowiedź powinna być częścią oficjalnego samouczka Facebook SDK.
Samuel Barbosa
1
To rozwiązanie u mnie nie działa. Po wybraniu katalogu facebook w katalogu facebook-android-sdk-3.16 kreator nadal mówi „Wybierz moduły do ​​zaimportowania”: $. Używam Android Studio (beta) 0.8.2. Dowolny pomysł?
Diego Palomar
2
Dlaczego nie mogą po prostu choć raz tego wyjaśnić?
Ojonugwa Jude Ochalifu
108

Facebook rzeczywiście dodał SDK do repozytoriów Maven Central. Aby skonfigurować projekt przy użyciu instancji repozytorium maven, musisz zrobić 2 rzeczy:

  1. W pliku build.gradle najwyższego poziomu projektów dodaj repozytoria Maven Central. Mój wygląda tak:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
    
  2. W pliku build.grade na poziomie aplikacji dodaj zależność Facebook SDK:

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

Możesz także dostosować konkretną wersję Facebook SDK. Aby zobaczyć listę dostępnych wersji w repozytorium maven, kliknij ten link.

SBerg413
źródło
1
To działa dla mnie. To naprawdę najlepszy sposób na dodanie interfejsu API Facebooka w Android Studio. Dzięki
Olkunmustafa
1
To jest metoda w dokumentach Facebooka, ale nie działa. Mam Android Studio 1.0 i SDK v 3.x.
Abhishek Balani,
1
Zauważ, że powinieneś podać dokładny numer wersji lub przynajmniej główny, np. 3.23. +. Facebook nie boi się szybkiego wersjonowania API i wprowadzania istotnych zmian, które spowodują awarie kompilacji i niepowtarzalne kompilacje.
Greg Ennis
@GregEnnis - dobry wkład. Zaktualizowałem nieco odpowiedź i dodałem również komentarz w kodzie.
SBerg413
Więc nie muszę importować żadnej zewnętrznej biblioteki i wszystkiego? Po prostu dodaj fb sdk do pliku gradle?
Kaveesh Kanwal
17

Facebook publikuje SDK na maven central:

Poprostu dodaj :

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

dependencies {
    compile 'com.facebook.android:facebook-android-sdk:+'
}
Romain
źródło
2
To nie jest prawda, potrzebujesz mavenCentral () w sekcji repozytoriów.
Booger
1
jcenter to mavenCentral
Romain
12

Rozwiązanie Scotta Barty działało dla mnie, z wyjątkiem tego, że musiałem dodać je do zależności mojego głównego pliku build.gradle projektu:

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

Warto również wspomnieć, musisz upewnić się, że:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

Są takie same w obu plikach build.gradle ... Kiedy to zrobiłem, działało to jak urok.

user2129635
źródło
Podczas budowania pojawia się błąd: Projekt ze ścieżką „biblioteki: facebook” nie został znaleziony w głównym projekcie ... Masz jakieś pomysły? (Oczywiście dodałem folder zgodnie z rozwiązaniem Scotta Bs, mimo że NIE mam pliku settings.gradle ?! (Projekt stworzony w Android Studio)
swebal
1
wiersz projektu kompilacji musi pasować do struktury katalogu projektu. : libraries: facebook sugeruje, że twoja biblioteka na Facebooku znajduje się w folderze o nazwie libraries w twoim katalogu głównym
doubleA
6

Korzystając z git, możesz z łatwością dołączyć najnowszy facebook-android-sdk.

  • Dodaj facebook-android-sdk jako moduł podrzędny: git submodule add https://github.com/facebook/facebook-android-sdk.git
  • Dodaj sdk jako projekt gradle: edytuj ustawienia.gradle i dodaj linię: include ':facebook-android-sdk:facebook'
  • Dodaj sdk jako zależność do modułu: edytuj build.gradle i dodaj w bloku zależności: compile project(':facebook-android-sdk:facebook')
Pepijn
źródło
4

Użyłem Facebooka SDK 4.10.0, aby zintegrować logowanie w mojej aplikacji na Androida. Samouczek, który śledziłem, to:

Zaloguj się do Facebooka Android Studio

Będziesz mógł uzyskać imię, nazwisko, adres e-mail, płeć, identyfikator na Facebooku i datę urodzenia z facebbok.

Powyższy samouczek wyjaśnia również, jak stworzyć aplikację w konsoli programisty Facebooka za pomocą wideo.

dodaj poniżej w build.gradle(Module:app)pliku:

repositories {
        mavenCentral()
    }

i

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

teraz dodaj poniżej w pliku 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" />

dodaj następujący w pliku 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>

I na koniec dodaj poniżej w pliku 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
źródło
3

Wdrożyłem Facebook Android SDK w repozytorium Sonatype.

Możesz dołączyć tę bibliotekę jako zależność Gradle:

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

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

Oryginalny post tutaj .

Oleksii K.
źródło
To już nie działa, Twoja witryna nie działa. Zabiłem całe moje IDE.
Mgamerz
Dziwne, korzystałem z witryn, które sprawdzają, czy witryna nie działa i nawet Twoja strona główna się nie ładuje.
Mgamerz
2

Osoby korzystające z Android Studio 0.8.6 mogą to zrobić:

  1. Pobierz Facebook-android-sdk-xxx.zip i rozpakuj go
  2. Skopiuj TYLKO katalog facebook pod katalog Facebook-android-sdk-xxx do swojego projektu wraz z aplikacją /

    • ImAnApp /
      • | - aplikacja /
      • | - buduj /
      • | - facebook /
  3. Teraz powinieneś zobaczyć Android Studio pokazujący facebook jako moduł

  4. Zmodyfikuj build.gradle Facebooka do tego.
    • dostarczone pliki („../ libs / bolts.jar”) do provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) do compileSdkVersion 20lub innej wersji zdefiniowanej w aplikacji
    • buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION do buildToolsVersion '20.0.0'
    • minSdkVersion Integer.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) do minSdkVersion 14
    • targetSdkVersion Integer.parseInt (project.ANDROID_BUILD_TARGET_SDK_VERSION) do 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']
            }
        }
    }

Ponownie zsynchronizuj plik gradle i powinno działać dobrze!

Robert
źródło
2

Naprawiłem

„Nie można znaleźć właściwości„ ANDROID_BUILD_SDK_VERSION ”w projekcie„: facebook ”.

błąd w build.gradlepliku poprzez dodanie gradle.propertieswartości:

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>

Źródło: https://stackoverflow.com/a/21490651/2161698

SebaGra
źródło
1

Utwórz plik build.gradle w projekcie 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')
    }
}

Następnie dodaj include ':libs:facebook'równa się <project_directory>/libs/facebook(ścieżka do biblioteki) w settings.gradle.

Vladimir
źródło
Ja już to zrobiłem. Nadal pokazuje błąd. Myślę, że błąd mówi, że Facebook nie jest oceniany, więc nie można go popełnić. Ale nie jestem pewien
Uma
Spróbuj zbudować przez konsolę: ./gradlew clean assembleDebug
Vladimir
0

Korzystanie z Facebooka SDK w Android Studio jest dość proste, wystarczy dodać następujący wiersz w swoim gradle

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

i upewnij się, że masz zaktualizowane repozytorium obsługi Androida, jeśli nie, zaktualizuj je za pomocą samodzielnego menedżera sdk

Mehroz Munir
źródło