sử dụng sdk facebook trong Android studio


104

Tôi đang theo dõi SDK Facebook dành cho Android bằng Android Studio . Khi tôi chạy ứng dụng của mình, tôi nhận được cảnh báo được đề cập bên dưới.

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

Tôi nên giải quyết điều này như thế nào?

Tôi đã thử câu trả lời của @Scott Barta và nhận được thông báo lỗi sau.

    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

Kho lưu trữ hỗ trợ Android của bạn có được cài đặt trong trình quản lý SDK cho SDK bạn đang sử dụng không?
Scott Barta

Không. Nó có bắt buộc không?
Uma

Đúng. Đó là thông báo lỗi bạn đang thấy. Tôi biết nó không trực quan; cải thiện nó nằm trong danh sách của chúng tôi. Tôi sẽ cập nhật câu trả lời của mình để phản ánh sự cần thiết của việc này.
Scott Barta

Câu trả lời:


250

GHI CHÚ

Đối với Android Studio 0.5.5 trở lên và với các phiên bản Facebook SDK mới hơn, quá trình này đơn giản hơn nhiều so với những gì được ghi dưới đây (được viết cho các phiên bản trước đó của cả hai). Nếu bạn đang chạy phiên bản mới nhất, tất cả những gì bạn cần làm là:

  1. Tải xuống SDK Facebook từ https://developers.facebook.com/docs/android/
  2. Giải nén kho lưu trữ
  3. Trong Android Studio 0.5.5 trở lên, hãy chọn "Nhập mô-đun" từ menu Tệp.
  4. Trong trình hướng dẫn, đặt đường dẫn nguồn của mô-đun để nhập làm thư mục "facebook" bên trong kho lưu trữ đã giải nén. (Lưu ý: Nếu bạn chọn toàn bộ thư mục mẹ, nó sẽ mang lại không chỉ bản thân thư viện mà còn tất cả các ứng dụng mẫu, mỗi ứng dụng dưới dạng một mô-đun riêng biệt. Điều này có thể hoạt động nhưng có thể không phải là điều bạn muốn).
  5. Mở cấu trúc dự án bằng cách Ctrl + Shift + Alt + Schọn tab phụ thuộc. Nhấp vào +nút và chọn Phụ thuộc mô-đun. Trong cửa sổ mới bật lên, hãy chọn:facebook.
  6. Bạn sẽ được tốt để đi.

Hướng dẫn cho Android Studio cũ hơn và SDK Facebook cũ hơn

Điều này áp dụng cho Android Studio 0.5.4 trở về trước và có ý nghĩa nhất đối với các phiên bản của SDK Facebook trước khi Facebook cung cấp tệp xây dựng Gradle để phân phối. Tôi không biết họ đã thực hiện thay đổi đó ở phiên bản SDK nào.

Hướng dẫn của Facebook trong "Nhập SDK vào Dự án Android Studio" trên trang https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ của họ là sai cho các dự án dựa trên Gradle (tức là dự án của bạn được tạo bằng trình hướng dẫn Dự án Mới của Android Studio và / hoặc có build.gradletệp cho mô-đun ứng dụng của bạn). Hãy làm theo các hướng dẫn sau:

  1. Tạo một librariesthư mục bên dưới thư mục chính của dự án của bạn. Ví dụ: nếu dự án của bạn là HelloWorldProject, bạn sẽ tạo một HelloWorldProject/librariesthư mục.

  2. Bây giờ sao chép toàn bộ facebookthư mục từ cài đặt SDK vào librariesthư mục bạn vừa tạo.

  3. Xóa libsthư mục trong thư mục facebook. Nếu bạn thích, xóa project.properties, build.xml, .classpath, và .project. các tệp cũng vậy. Bạn không cần chúng.

  4. Tạo một build.gradletệp trong facebookthư mục với nội dung sau:

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

    Lưu ý rằng tùy thuộc vào thời điểm bạn đang làm theo các hướng dẫn này so với thời điểm viết hướng dẫn này, bạn có thể cần điều chỉnh classpath 'com.android.tools.build:gradle:0.6.+'dòng để tham chiếu phiên bản mới hơn của plugin Gradle. Chúng tôi sẽ sớm yêu cầu phiên bản 0.7 trở lên. Hãy dùng thử và nếu bạn gặp lỗi yêu cầu phiên bản plugin Gradle mới hơn, thì đó là dòng bạn phải chỉnh sửa.

  5. Đảm bảo rằng Thư viện hỗ trợ Android trong trình quản lý SDK của bạn đã được cài đặt.

  6. Chỉnh sửa settings.gradletệp của bạn trong thư mục chính của ứng dụng và thêm dòng này:

    include ':libraries:facebook'
  7. Nếu dự án của bạn đã được mở trong Android Studio, hãy nhấp vào nút "Đồng bộ hóa dự án với tệp Gradle" trên thanh công cụ. Sau khi hoàn tất, facebookmô-đun sẽ xuất hiện. nhập mô tả hình ảnh ở đây

  8. Mở hộp thoại Cấu trúc dự án. Chọn Mô-đun từ danh sách bên trái, nhấp vào mô-đun ứng dụng của bạn, nhấp vào tab Phụ thuộc và nhấp vào nút + để thêm phụ thuộc mới. nhập mô tả hình ảnh ở đây
  9. Chọn "Phụ thuộc mô-đun". Nó sẽ hiển thị một hộp thoại với danh sách các mô-đun để lựa chọn; chọn “: library: facebook”. nhập mô tả hình ảnh ở đây
  10. Nhấp vào OK trên tất cả các hộp thoại. Android Studio sẽ tự động đồng bộ hóa lại dự án của bạn (giúp bạn không cần phải nhấp lại vào nút "Đồng bộ hóa dự án với tệp Gradle") và chọn phần phụ thuộc mới. Bạn sẽ được tốt để đi.

1
/libraries/facebook/build.gradle cho tôi một số lỗi. "Không thể giải quyết biểu tượng compileSdkVersion". Cùng với compileSdkVersion biểu tượng, biểu hiện và những người khác ...
sensorario

2
Điều này đã làm việc với tôi, nhưng tôi phải thay đổi đường dẫn đến dự án cấp thư viện facebook thành đường dẫn tuyệt đối, tức là ":MyApp:libraries:facebook"trong cả tệp cài đặt và tệp build.grade cho ứng dụng chính của tôi
Đánh dấu

7
Rất tốt! Câu trả lời này phải là một phần của hướng dẫn SDK Facebook chính thức.
Samuel Barbosa

1
Giải pháp này không làm việc cho tôi. Sau khi chọn thư mục facebook bên trong thư mục facebook-android-sdk-3.16, trình hướng dẫn vẫn thông báo 'Chọn mô-đun để nhập': $. Tôi sử dụng Android Studio (beta) 0.8.2. Bất kỳ ý tưởng?
Diego Palomar,

2
Tại sao họ không thể nói thẳng chuyện này một lần?
Ojonugwa Jude Ochalifu,

108

Facebook thực sự đã thêm SDK vào kho lưu trữ Maven Central. Để cấu hình dự án của bạn bằng cách sử dụng phiên bản repo của maven, bạn cần thực hiện 2 việc:

  1. Trong tệp build.gradle cấp cao nhất của dự án , hãy thêm các kho lưu trữ Trung tâm Maven. Của tôi trông như thế này:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
  2. Trong tệp build.grade cấp ứng dụng , hãy thêm phần phụ thuộc vào sdk của Facebook:

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

Bạn cũng có thể điều chỉnh phiên bản SDK Facebook cụ thể. Để có danh sách các phiên bản có sẵn trong kho lưu trữ maven, hãy nhấp vào liên kết này.


1
Đó là làm việc cho tôi. Nó thực sự là cách tốt nhất để thêm api facebook trên Android Studio. Cảm ơn
Olkunmustafa

1
Đây là phương pháp trên tài liệu của Facebook nhưng nó không hoạt động. Tôi có android studio 1.0 và sdk v 3.x.
Abhishek Balani

1
Lưu ý rằng bạn nên chỉ định số phiên bản chính xác hoặc ít nhất là một phiên bản chính, như 3.23. +. Facebook không ngại phiên bản API nhanh chóng và thực hiện các thay đổi đột ngột, điều này sẽ gây ra lỗi xây dựng và các bản dựng không thể lặp lại.
Greg Ennis

@GregEnnis - đầu vào tốt. Tôi đã cập nhật câu trả lời một chút và thêm nhận xét trong mã.
SBerg413

Vì vậy, tôi không phải nhập bất kỳ thư viện bên ngoài nào và tất cả? Chỉ cần đơn giản thêm sdk fb trong tệp gradle ??
Kaveesh Kanwal

17

Facebook xuất bản SDK trên trung tâm maven:

Chỉ cần thêm :

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

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

2
Điều này là không đúng, bạn cần mavenCentral () trong phần kho lưu trữ.
Booger

1
jcenter bao gồm mavenCentral
Romain

12

Giải pháp của Scott Barta phù hợp với tôi, ngoại trừ việc tôi phải thêm chúng vào các phần phụ thuộc của tệp build.gradle dự án chính của tôi:

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

Ngoài ra, bạn cần đảm bảo:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

Cả hai tệp build.gradle đều giống nhau ... Sau khi tôi làm điều này, nó chạy như một cái duyên.


Tôi gặp lỗi khi xây dựng: Không thể tìm thấy dự án có đường dẫn 'thư viện: facebook' trong dự án gốc ... Có ý kiến ​​gì không? (Tất nhiên tôi đã thêm thư mục theo giải pháp của Scott Bs, mặc dù tôi KHÔNG có tệp settings.gradle?! (Dự án được tạo trong Android Studio)
ngọt ngào

1
dòng dự án biên dịch cần phù hợp với cấu trúc thư mục dự án của bạn. : thư viện: facebook ngụ ý rằng thư viện facebook của bạn trong một thư mục có tên các thư viện trong thư mục gốc của web site
doubleA

6

Khi sử dụng git, bạn có thể kết hợp facebook-android-sdk mới nhất một cách dễ dàng.

  • Thêm facebook-android-sdk làm mô-đun con: git submodule add https://github.com/facebook/facebook-android-sdk.git
  • Thêm sdk dưới dạng dự án gradle: chỉnh sửa settings.gradle và thêm dòng: include ':facebook-android-sdk:facebook'
  • Thêm sdk làm phụ thuộc vào mô-đun: chỉnh sửa build.gradle và thêm trong khối phụ thuộc: compile project(':facebook-android-sdk:facebook')

4

Tôi đã sử dụng facebook sdk 4.10.0 để tích hợp đăng nhập trong ứng dụng Android của mình. Hướng dẫn tôi đã làm theo là:

đăng nhập facebook android studio

Bạn sẽ có thể lấy tên, họ, email, giới tính, id facebook và ngày sinh từ facebbok.

Hướng dẫn trên cũng giải thích cách tạo ứng dụng trong bảng điều khiển dành cho nhà phát triển facebook thông qua video.

thêm bên dưới vào build.gradle(Module:app)tệp:

repositories {
        mavenCentral()
    }

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

bây giờ hãy thêm bên dưới vào tệp 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" />

thêm thông tin sau vào tệp 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>

Và trong lần bổ sung cuối cùng bên dưới trong tệp 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

Tôi đã triển khai Facebook Android SDK cho kho lưu trữ Sonatype.

Bạn có thể bao gồm thư viện này dưới dạng phụ thuộc Gradle:

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

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

Bài gốc ở đây .


Điều này không hoạt động nữa, trang web của bạn đã ngừng hoạt động. Đã giết toàn bộ IDE của tôi.
Mgamerz

Thật kỳ lạ, tôi đã sử dụng các trang web để kiểm tra xem một trang web có bị lỗi hay không và ngay cả trang chủ của bạn cũng không tải.
Mgamerz

2

Những người sử dụng Android Studio 0.8.6 có thể làm những điều này:

  1. Tải xuống Facebook-android-sdk-xxx.zip và giải nén nó
  2. CHỈ sao chép facebook dir dưới dir Facebook-android-sdk-xxx vào dự án của bạn cùng với ứng dụng /

    • ImAnApp /
      • | - ứng dụng /
      • | - xây dựng /
      • | - facebook /
  3. Bây giờ bạn sẽ thấy Android Studio hiển thị facebook dưới dạng mô-đun

  4. Sửa đổi build.gradle của facebook thành này.
    • các tệp được cung cấp ('../ libs / bol.jar') cho provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) sang compileSdkVersion 20hoặc phiên bản khác mà bạn đã xác định trong ứng dụng
    • buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION tới buildToolsVersion '20.0.0'
    • minSdkVersion Integer.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) sang minSdkVersion 14
    • targetSdkVersion Integer.parseInt (project.ANDROID_BUILD_TARGET_SDK_VERSION) thành 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']
            }
        }
    }

Đồng bộ hóa lại tệp gradle của bạn và nó sẽ hoạt động tốt!


2

Tôi đã sửa

"Không thể tìm thấy thuộc tính 'ANDROID_BUILD_SDK_VERSION' trên dự án ': facebook'."

trên build.gradletệp, bằng cách thêm vào gradle.propertiescác giá trị:

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>

Nguồn: https://stackoverflow.com/a/21490651/2161698


1

Tạo tệp build.gradle trong dự án sdk 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')
    }
}

Sau đó thêm include ':libs:facebook'bằng <project_directory>/libs/facebook(đường dẫn đến thư viện) vào settings.gradle.


Tôi đã làm điều này. Nó vẫn hiển thị lỗi. Tôi nghĩ rằng lỗi nói rằng facebook không phải là gradle và vì vậy nó không thể được đưa ra. Nhưng tôi không chắc
Uma

Cố gắng xây dựng thông qua giao diện điều khiển: sạch assembleDebug ./gradlew
Vladimir


0

sử dụng sdk facebook trong android studio khá đơn giản, chỉ cần thêm dòng sau vào gradle của bạn

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

và đảm bảo rằng bạn đã cập nhật kho hỗ trợ Android, nếu không, hãy cập nhật nó bằng cách sử dụng quản lý sdk độc lập

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.