Android stüdyosunda facebook sdk kullanarak


104

Android Studio kullanarak Android için Facebook SDK'sını takip ediyorum . Uygulamamı çalıştırdığımda aşağıda belirtilen uyarıyı alıyorum.

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

Bunu nasıl çözmeliyim?

@ Scott Barta'nın cevabını denedim ve aşağıdaki hata mesajını aldım.

    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

Android Destek Havuzunuz, kullandığınız SDK için SDK yöneticinize yüklenmiş mi?
Scott Barta

Hayır! Zorunlu mu?
Uma

Evet. Gördüğünüz hata mesajı budur. Sezgisel olmadığını biliyorum; onu geliştirmek listemizde. Cevabımı buna olan ihtiyacı yansıtacak şekilde güncelleyeceğim.
Scott Barta

Yanıtlar:


250

NOT

Android Studio 0.5.5 ve sonraki sürümleri ve Facebook SDK'nın sonraki sürümleri için bu işlem, aşağıda belgelendirilenden çok daha basittir (her ikisinin de önceki sürümleri için yazılmıştır). En son sürümü çalıştırıyorsanız, yapmanız gereken tek şey şudur:

  1. Facebook SDK'yı https://developers.facebook.com/docs/android/ adresinden indirin.
  2. Arşivi açın
  3. Android Studio 0.5.5 veya sonraki sürümlerde, Dosya menüsünden "Modülü İçe Aktar" ı seçin.
  4. Sihirbazda, modülün kaynak yolunu paketlenmemiş arşiv içinde "facebook" dizini olarak içe aktarılacak şekilde ayarlayın. (Not: Ana klasörün tamamını seçerseniz, yalnızca kitaplığın kendisini değil, aynı zamanda tüm örnek uygulamaları ayrı bir modül olarak getirecektir. Bu işe yarayabilir, ancak muhtemelen istediğiniz şey değildir).
  5. Proje yapısını açın Ctrl + Shift + Alt + Sve ardından bağımlılıklar sekmesini seçin. Tıklayın +düğmesi ve Modül Bağımlılık seçin. Yeni pencerede açılır pencerede seçin:facebook.
  6. Gitmekte iyi olmalısın.

Eski Android Studio ve daha eski Facebook SDK'sı için talimatlar

Bu, Android Studio 0.5.4 ve önceki sürümler için geçerlidir ve Facebook dağıtım için Gradle derleme dosyaları sunmadan önce Facebook SDK sürümleri için en mantıklı olanıdır. Bu değişikliği SDK'nın hangi sürümünde yaptıklarını bilmiyorum.

Facebook'un https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ sayfasındaki "SDK'yı bir Android Studio Projesine İçe Aktar" altındaki talimatları yanlış Gradle tabanlı projeler için (yani projeniz Android Studio'nun Yeni Proje sihirbazı kullanılarak oluşturulmuş ve / veya build.gradleuygulama modülünüz için bir dosyaya sahip ). Bunun yerine şu talimatları izleyin:

  1. librariesProjenizin ana dizininin altında bir klasör oluşturun . Örneğin, projeniz HelloWorldProject ise, bir HelloWorldProject/librariesklasör oluşturursunuz.

  2. Şimdi tüm facebookdizini SDK kurulumundan librariesyeni oluşturduğunuz klasöre kopyalayın.

  3. Dizindeki libsklasörü silin facebook. İsterseniz, silme project.properties, build.xml, .classpath, ve .project. dosyaları da. Onlara ihtiyacın yok.

  4. Dizinde aşağıdaki içeriğe sahip bir build.gradledosya oluşturun facebook:

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

    Bu talimatları ne zaman uyguladığınıza bağlı olarak, bunun yazıldığı classpath 'com.android.tools.build:gradle:0.6.+'zamana göre, Gradle eklentisinin daha yeni bir sürümüne başvurmak için satırı ayarlamanız gerekebilir . Yakında 0.7 veya sonraki sürümlere ihtiyacımız olacak. Deneyin ve Gradle eklentisinin daha yeni bir sürümünün gerekli olduğuna dair bir hata alırsanız, düzenlemeniz gereken satır budur.

  5. SDK yöneticinizdeki Android Destek Kitaplığı'nın kurulu olduğundan emin olun .

  6. Senin düzenleyin settings.gradleuygulamanızın ana dizinde dosya ve bu satırı ekleyin:

    include ':libraries:facebook'
  7. Projeniz Android Studio'da zaten açıksa, araç çubuğundaki "Projeyi Gradle Dosyalarıyla Eşitle" düğmesini tıklayın. Tamamlandığında, facebookmodül görünmelidir. görüntü açıklamasını buraya girin

  8. Proje Yapısı iletişim kutusunu açın. Soldaki listeden Modüller'i seçin, uygulamanızın modülüne tıklayın, Bağımlılıklar sekmesine tıklayın ve yeni bir bağımlılık eklemek için + düğmesine tıklayın. görüntü açıklamasını buraya girin
  9. "Modül bağımlılığı" nı seçin. Aralarından seçim yapabileceğiniz modüllerin listesini içeren bir iletişim kutusu açacaktır; “: kütüphaneler: facebook” u seçin. görüntü açıklamasını buraya girin
  10. Tüm iletişim kutularında Tamam'ı tıklayın. Android Studio, projenizi otomatik olarak yeniden senkronize eder ("Projeyi Gradle Dosyalarıyla Eşitle" düğmesini tekrar tıklamayı gereksiz kılar) ve yeni bağımlılığı alır. Gitmekte iyi olmalısın.

1
/libraries/facebook/build.gradle bana bazı hatalar veriyor. "CompileSdkVersion sembolü çözülemiyor". CompileSdkVersion sembolü, bildirimi ve diğerleri ile aynı ...
sensorario

2
Bu benim için çalıştı, ancak facebook kitaplıkları not projesinin yolunu mutlak yol olacak şekilde değiştirmek zorunda kaldım, yani ":MyApp:libraries:facebook"ana uygulamam için hem ayarlar dosyasında hem de build.grade dosyasında
Mark

7
Çok iyi! Bu cevap, resmi Facebook SDK eğitiminin bir parçası olmalıdır.
Samuel Barbosa

1
Bu çözüm benim için çalışmıyor. Facebook-android-sdk-3.16 dizini içindeki facebook dizinini seçtikten sonra, sihirbaz hala 'İçe aktarılacak modülleri seçin' diyor: $. Android Studio (beta) 0.8.2 kullanıyorum. Herhangi bir fikir?
Diego Palomar

2
Neden bunu bir kez olsun basitleştiremiyorlar?
Ojonugwa Jude Ochalifu

108

Facebook gerçekten de SDK'yı Maven Central depolarına ekledi. Projenizi maven repo örneğini kullanarak yapılandırmak için 2 şey yapmanız gerekir:

  1. Projelerinizin en üst düzey build.gradle dosyasında Maven Central depolarını ekleyin. Benimki şuna benziyor:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
  2. In uygulama düzeyinde build.grade dosyası Facebook'un sdk bağımlılık ekleyin:

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

Ayrıca belirli Facebook SDK sürümünü de ayarlayabilirsiniz. Maven deposundaki mevcut sürümlerin bir listesi için bu bağlantıya tıklayın.


1
Benim için çalışıyor. Android Studio'ya facebook api eklemenin gerçekten en iyi yoludur. Teşekkürler
Olkunmustafa

1
Bu, Facebook dokümanlarındaki yöntemdir, ancak çalışmıyor. Android studio 1.0 ve sdk v 3.x kullanıyorum.
Abhishek Balani

1
Tam bir sürüm numarası veya en azından 3.23. + Gibi bir majör belirtmeniz gerektiğini unutmayın. Facebook, API'yi hızlı bir şekilde sürümden geçirmekten ve derleme hatalarına ve tekrarlanamayan derlemelere neden olacak önemli değişiklikler yapmaktan korkmaz.
Greg Ennis

@GregEnnis - iyi girdi. Cevabı biraz güncelledim ve koda da bir yorum ekledim.
SBerg413

Yani, herhangi bir harici kitaplığı ve tümünü içe aktarmam gerekmiyor mu? Sadece basitçe fb sdk'yi gradle dosyasına ekleyin ??
Kaveesh Kanwal

17

Facebook, SDK'yı maven central'da yayınlıyor:

Sadece ekle :

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

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

2
Bu doğru değil, depolar bölümünde mavenCentral () 'a ihtiyacınız var.
Booger

1
jcenter mavenCentral
Romain

12

Scott Barta'nın çözümü benim için çalıştı, ancak bunları build.gradle ana proje dosyamın bağımlılıklarına eklemem gerekti:

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

Ayrıca bahsetmeye değer, şunlardan emin olmanız gerekir:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

Her iki build.gradle dosyasında da aynı ... Bunu yaptığımda bir cazibe gibi koştu.


Oluştururken bir hata alıyorum: 'libraries: facebook' yoluna sahip proje, kök projede bulunamadı ... Herhangi bir fikir? (Bir settings.gradle
dosyam YOKSA

1
derleme proje satırının proje dizin yapınıza uyması gerekir. : libraries: facebook, facebook kitaplığınızın kök dizininizdeki kitaplıklar adı verilen bir klasörde olduğunu ima eder
doubleA

6

Git'i kullanırken en yeni facebook-android-sdk'yi kolaylıkla dahil edebilirsiniz.

  • Facebook-android-sdk'yi alt modül olarak ekleyin: git submodule add https://github.com/facebook/facebook-android-sdk.git
  • Sdk'yi gradle projesi olarak ekleyin: settings.gradle'ı düzenleyin ve satır ekleyin: include ':facebook-android-sdk:facebook'
  • Modüle bağımlılık olarak sdk ekleyin: build.gradle'ı düzenleyin ve bağımlılıklar bloğu içinde ekleyin: compile project(':facebook-android-sdk:facebook')

4

Android uygulamama girişi entegre etmek için facebook sdk 4.10.0'ı kullandım. İzlediğim eğitim:

facebook oturum açma android stüdyosu

Facebbok'tan ad, soyad, e-posta, cinsiyet, facebook kimliği ve doğum tarihini alabileceksiniz.

Yukarıdaki eğitim, video aracılığıyla facebook geliştirici konsolunda nasıl uygulama oluşturulacağını da açıklamaktadır.

aşağıdaki build.gradle(Module:app)dosyaya ekleyin :

repositories {
        mavenCentral()
    }

ve

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

şimdi aşağıda AndroidManifest.xml dosyasına ekleyin:

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

Activity_main.xml dosyasına aşağıdakileri ekleyin:

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

Ve son olarak MainActivity.java dosyasına aşağıdaki ekleyin:

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

Facebook Android SDK'yı Sonatype deposuna yerleştirdim.

Bu kitaplığı Gradle bağımlılığı olarak dahil edebilirsiniz:

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

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

Orijinal gönderi burada .


Bu artık çalışmıyor, siteniz kapalı. Tüm IDE'mi öldürdü.
Mgamerz

Tuhaf, bir sitenin kapalı olup olmadığını kontrol eden siteler kullandım ve ana sayfanız bile yüklenmiyor.
Mgamerz

2

Android Studio 0.8.6 kullanan kişiler şunları yapabilir:

  1. Facebook-android-sdk-xxx.zip'i indirin ve sıkıştırmasını açın
  2. Facebook-android-sdk-xxx dizini altındaki YALNIZCA facebook dizinini app / ile birlikte projenize kopyalayın

    • ImAnApp /
      • | - uygulama /
      • | - inşa /
      • | - facebook /
  3. Şimdi Android Studio'nun facebook'u modül olarak gösterdiğini görmelisiniz

  4. Facebook'un build.gradle dosyasını buna değiştirin.
    • sağlanan dosyalar ('../ libs / bolts.jar') provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) için compileSdkVersion 20 veya uygulamada tanımladığınız başka bir sürüm
    • buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION için buildToolsVersion '20.0.0'
    • minSdkVersion Integer.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) için minSdkVersion 14
    • targetSdkVersion Integer.parseInt (project.ANDROID_BUILD_TARGET_SDK_VERSION) için 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']
            }
        }
    }

Gradle dosyanızı yeniden senkronize edin ve sorunsuz çalışması gerekir!


2

Düzelttim

"'ANDROID_BUILD_SDK_VERSION' özelliği ': facebook' projesinde bulunamadı."

değerleri build.gradleekleyerek dosyada hata gradle.properties:

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>

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


1

Facebook sdk projesinde build.gradle dosyası oluşturun:

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

Ardından içine include ':libs:facebook'eşittir <project_directory>/libs/facebook(kitaplığa giden yol) ekleyin settings.gradle.


Bunu zaten yaptım. Hala hatayı gösteriyor. Sanırım hata facebook'un notsuz olduğunu ve bu yüzden parçalanamayacağını söylüyor. Ama emin değilim
Uma

Konsol aracılığıyla derlemeyi deneyin: ./gradlew clean assembleDebug
Vladimir


0

android stüdyosunda facebook sdk kullanmak oldukça basittir, sadece aşağıdaki satırı not defterinize ekleyin

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

ve Android destek deposunu güncellediğinizden emin olun, yoksa bağımsız sdk yöneticisi kullanarak güncelleyin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.