menggunakan facebook sdk di studio Android

104

Saya mengikuti Facebook SDK untuk Android menggunakan Android Studio . Ketika saya menjalankan aplikasi saya, saya mendapatkan peringatan yang disebutkan di bawah ini.

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

Bagaimana saya harus mengatasi ini?

Saya mencoba jawaban @Scott Barta dan mendapatkan pesan kesalahan berikut.

    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
sumber
Apakah Repositori Dukungan Android Anda diinstal di pengelola SDK untuk SDK yang Anda gunakan?
Scott Barta
Nggak. Apakah itu wajib?
Uma
Iya. Itulah pesan kesalahan yang Anda lihat. Saya tahu itu tidak intuitif; memperbaikinya ada di daftar kami. Saya akan memperbarui jawaban saya untuk mencerminkan kebutuhan ini.
Scott Barta

Jawaban:

250

CATATAN

Untuk Android Studio 0.5.5 dan yang lebih baru, dan dengan versi Facebook SDK yang lebih baru, proses ini jauh lebih sederhana daripada yang didokumentasikan di bawah (yang ditulis untuk versi sebelumnya dari keduanya). Jika Anda menjalankan yang terbaru, yang perlu Anda lakukan adalah ini:

  1. Unduh SDK Facebook dari https://developers.facebook.com/docs/android/
  2. Buka zip arsip
  3. Di Android Studio 0.5.5 atau yang lebih baru, pilih "Import Module" dari menu File.
  4. Di wizard, setel jalur sumber modul yang akan diimpor sebagai direktori "facebook" di dalam arsip yang telah dibongkar. (Catatan: Jika Anda memilih seluruh folder induk, itu akan membawa tidak hanya perpustakaan itu sendiri, tetapi juga semua aplikasi sampel, masing-masing sebagai modul terpisah. Ini mungkin bekerja tetapi mungkin bukan yang Anda inginkan).
  5. Buka struktur proyek dengan Ctrl + Shift + Alt + Sdan kemudian pilih tab dependensi. Klik +tombol dan pilih Ketergantungan Modul. Di jendela baru pop up pilih:facebook.
  6. Anda sebaiknya pergi.

Petunjuk untuk Android Studio yang lebih lama dan Facebook SDK yang lebih lama

Ini berlaku untuk Android Studio 0.5.4 dan yang lebih lama, dan paling sesuai untuk versi Facebook SDK sebelum Facebook menawarkan file build Gradle untuk distribusinya. Saya tidak tahu di versi mana dari SDK mereka membuat perubahan itu.

Petunjuk Facebook di bagian "Impor SDK ke dalam Proyek Android Studio" di laman https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ mereka salah untuk proyek berbasis Gradle (yaitu proyek Anda dibuat menggunakan wizard Proyek Baru Android Studio dan / atau memiliki build.gradlefile untuk modul aplikasi Anda). Ikuti petunjuk ini sebagai gantinya:

  1. Buat librariesfolder di bawah direktori utama proyek Anda. Misalnya, jika proyek Anda adalah HelloWorldProject, Anda akan membuat HelloWorldProject/librariesfolder.

  2. Sekarang salin seluruh facebookdirektori dari instalasi SDK ke dalam librariesfolder yang baru Anda buat.

  3. Hapus libsfolder di facebookdirektori. Jika Anda suka, menghapus project.properties, build.xml, .classpath, dan .project. file juga. Anda tidak membutuhkannya.

  4. Buat build.gradlefile di facebookdirektori dengan konten berikut:

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

    Perhatikan bahwa bergantung pada kapan Anda mengikuti petunjuk ini dibandingkan dengan saat ini ditulis, Anda mungkin perlu menyesuaikan classpath 'com.android.tools.build:gradle:0.6.+'baris untuk mereferensikan versi plugin Gradle yang lebih baru. Kami akan segera membutuhkan versi 0.7 atau yang lebih baru. Cobalah, dan jika Anda mendapatkan pesan kesalahan bahwa versi plugin Gradle yang lebih baru diperlukan, itu adalah baris yang harus Anda edit.

  5. Pastikan Pustaka Dukungan Android di pengelola SDK Anda sudah terpasang.

  6. Edit settings.gradlefile Anda di direktori utama aplikasi Anda dan tambahkan baris ini:

    include ':libraries:facebook'
  7. Jika project Anda sudah terbuka di Android Studio, klik tombol "Sync Project with Gradle Files" di toolbar. Setelah selesai, facebookmodul akan muncul. masukkan deskripsi gambar di sini

  8. Buka dialog Project Structure. Pilih Modul dari daftar sebelah kiri, klik modul aplikasi Anda, klik pada tab Dependensi, dan klik tombol + untuk menambahkan ketergantungan baru. masukkan deskripsi gambar di sini
  9. Pilih "Ketergantungan modul". Ini akan memunculkan dialog dengan daftar modul untuk dipilih; pilih “: perpustakaan: facebook”. masukkan deskripsi gambar di sini
  10. Klik OK pada semua dialog. Android Studio akan secara otomatis menyinkronkan ulang project Anda (membuatnya tidak perlu mengklik lagi tombol "Sync Project with Gradle Files") dan mengambil dependensi baru. Anda sebaiknya pergi.
Scott Barta
sumber
1
/libraries/facebook/build.gradle memberi saya beberapa kesalahan. "Tidak dapat menyelesaikan simbol compileSdkVersion". Sama dengan simbol compileSdkVersion, manifes dan lain-lain ...
sensorario
2
Ini berhasil untuk saya, tetapi saya harus mengubah jalur ke proyek kelas perpustakaan facebook menjadi jalur absolut, yaitu ":MyApp:libraries:facebook"di file pengaturan dan file build.grade untuk aplikasi utama saya
Tandai
7
Baik sekali! Jawaban ini harus menjadi bagian dari tutorial resmi Facebook SDK.
Samuel Barbosa
1
Solusi ini tidak berhasil untuk saya. Setelah memilih direktori facebook di dalam direktori facebook-android-sdk-3.16, wizard tetap mengatakan 'Pilih modul yang akan diimpor': $. Saya menggunakan Android Studio (beta) 0.8.2. Ada ide?
Diego Palomar
2
Mengapa mereka tidak bisa membuat hal ini langsung sekali saja?
Ojonugwa Jude Ochalifu
108

Facebook memang telah menambahkan SDK ke repositori Maven Central. Untuk mengonfigurasi proyek Anda menggunakan instance repo maven, Anda perlu melakukan 2 hal:

  1. Dalam file build.gradle level atas project Anda , tambahkan repositori Pusat Maven. Punyaku terlihat seperti ini:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
    
  2. Di file build.grade tingkat aplikasi , tambahkan dependensi sdk Facebook:

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

Anda juga dapat menyesuaikan versi SDK Facebook tertentu. Untuk daftar versi yang tersedia di repositori maven klik tautan ini.

SBerg413
sumber
1
Ini berhasil untuk saya. Ini benar-benar cara terbaik untuk menambahkan api facebook di Android Studio. Terima kasih
Olkunmustafa
1
Ini adalah metode di dokumen Facebook tetapi tidak berfungsi. Saya memiliki android studio 1.0 dan sdk v 3.x.
Abhishek Balani
1
Catatan Anda harus menentukan nomor versi yang tepat atau setidaknya jurusan, seperti 3.23. +. Facebook tidak takut untuk membuat versi API dengan cepat dan membuat perubahan yang dapat menyebabkan kerusakan, yang akan menyebabkan kegagalan pembangunan dan pembangunan yang tidak dapat diulang.
Greg Ennis
@GregEnnis - masukan yang bagus. Saya memperbarui jawaban sedikit dan menambahkan komentar di kode juga.
SBerg413
Jadi, saya tidak perlu mengimpor pustaka eksternal dan semuanya? Cukup tambahkan sdk fb di file gradle ??
Kaveesh Kanwal
17

Facebook menerbitkan SDK di maven central:

Tambahkan saja:

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

dependencies {
    compile 'com.facebook.android:facebook-android-sdk:+'
}
Romain
sumber
2
Ini tidak benar, Anda memerlukan mavenCentral () di bagian repositories.
Booger
1
jcenter menyertakan mavenCentral
Romain
12

Solusi Scott Barta berhasil untuk saya, kecuali saya harus menambahkan ini ke dependensi file build.gradle proyek utama saya:

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

Juga perlu disebutkan, Anda perlu memastikan:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

Apakah sama di kedua file build.gradle ... Setelah saya melakukan ini, itu berjalan seperti pesona.

pengguna2129635
sumber
Saya mendapatkan kesalahan saat membangun: Proyek dengan jalur 'perpustakaan: facebook' tidak dapat ditemukan di proyek akar ... Ada ide? (Saya tentu saja telah menambahkan folder sesuai dengan solusi Scott Bs, meskipun saya TIDAK memiliki file settings.gradle ?! (Proyek dibuat di Android Studio)
swebal
1
baris proyek kompilasi harus sesuai dengan struktur direktori proyek Anda. : libraries: facebook menyiratkan bahwa perpustakaan facebook Anda berada dalam folder yang disebut perpustakaan di dalam direktori root Anda
doubleA
6

Saat menggunakan git Anda dapat memasukkan facebook-android-sdk terbaru dengan mudah.

  • Tambahkan facebook-android-sdk sebagai submodule: git submodule add https://github.com/facebook/facebook-android-sdk.git
  • Tambahkan sdk sebagai proyek gradle: edit settings.gradle dan tambahkan baris: include ':facebook-android-sdk:facebook'
  • Tambahkan sdk sebagai dependensi ke modul: edit build.gradle dan tambahkan dalam blok dependensi: compile project(':facebook-android-sdk:facebook')
Pepijn
sumber
4

Saya telah menggunakan facebook sdk 4.10.0 untuk mengintegrasikan login di aplikasi android saya. Tutorial yang saya ikuti adalah:

Facebook masuk studio android

Anda bisa mendapatkan nama depan, nama belakang, email, jenis kelamin, id facebook dan tanggal lahir dari facebbok.

Tutorial di atas juga menjelaskan cara membuat aplikasi di konsol pengembang facebook melalui video.

tambahkan di bawah dalam build.gradle(Module:app)file:

repositories {
        mavenCentral()
    }

dan

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

sekarang tambahkan di bawah ini di 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" />

tambahkan berikut ini di 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>

Dan di tambahkan terakhir di bawah ini di 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();

    }

}
pengguna6017633
sumber
3

Saya menerapkan SDK Android Facebook ke repositori Sonatype.

Anda dapat menyertakan pustaka ini sebagai dependensi Gradle:

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

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

Posting asli di sini .

Oleksii K.
sumber
Ini tidak berfungsi lagi, situs Anda tidak aktif. Membunuh seluruh IDE saya.
Mgamerz
Aneh, saya menggunakan situs yang memeriksa apakah sebuah situs sedang down dan bahkan beranda Anda tidak dapat dimuat.
Mgamerz
2

Orang yang menggunakan Android Studio 0.8.6 dapat melakukan ini:

  1. Unduh Facebook-android-sdk-xxx.zip & Unzip
  2. Salin HANYA dir facebook di bawah Facebook-android-sdk-xxx dir ke dalam proyek Anda bersama dengan app /

    • ImAnApp /
      • | - aplikasi /
      • | - membangun /
      • | - facebook /
  3. Sekarang Anda akan melihat Android Studio menampilkan facebook sebagai modul

  4. Ubah build.gradle facebook menjadi ini.
    • menyediakan file ('../ libs / bolts.jar') ke provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) ke compileSdkVersion 20atau versi lain yang Anda tentukan dalam aplikasi
    • buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION ke buildToolsVersion '20.0.0'
    • minSdkVersion Integer.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) ke minSdkVersion 14
    • targetSdkVersion Integer.parseInt (project.ANDROID_BUILD_TARGET_SDK_VERSION) ke 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']
            }
        }
    }

Sinkronisasi ulang file gradle Anda & seharusnya berfungsi dengan baik!

Robert
sumber
2

Saya memperbaiki

"Tidak dapat menemukan properti 'ANDROID_BUILD_SDK_VERSION' pada proyek ': facebook'."

kesalahan pada build.gradlefile, dengan menambahkan gradle.propertiesnilai:

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>

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

SebaGra
sumber
1

Buat file build.gradle di proyek 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')
    }
}

Kemudian tambahkan include ':libs:facebook'sama dengan <project_directory>/libs/facebook(jalur ke perpustakaan) di settings.gradle.

Vladimir
sumber
Saya sudah melakukan ini. Masih menunjukkan kesalahan. Saya pikir kesalahan mengatakan facebook adalah non-gradle sehingga tidak dapat diubah. Tapi saya tidak yakin
Uma
Cobalah membangun melalui konsol: ./gradlew clean assembleDebug
Vladimir
0

menggunakan facebook sdk di android studio cukup sederhana, cukup tambahkan baris berikut di gradle Anda

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

dan pastikan Anda telah mengupdate repositori dukungan Android, jika belum update menggunakan sdk manger yang berdiri sendiri

Mehroz Munir
sumber