за допомогою facebook sdk в студії Android


104

Я стежу за SDK Facebook для Android за допомогою Android Studio . Коли я запускаю свою програму, я отримую вказане нижче попередження.

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

Як я повинен це вирішити?

Я спробував відповідь @Scott Barta і отримав таке повідомлення про помилку.

    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 у вашому менеджері SDK для SDK, який ви використовуєте?
Скотт Барта

Ні. Це обов’язково?
Ума

Так. Це повідомлення про помилку, яке ви бачите. Я знаю, що це неінтуїтивно; покращення його є у нашому списку. Я оновлю свою відповідь, щоб відобразити потребу в цьому.
Скотт Барта

Відповіді:


250

ПРИМІТКА

Для Android Studio 0.5.5 і пізніших версій, а також для пізніших версій SDK Facebook цей процес набагато простіший, ніж те, що задокументовано нижче (що було написано для попередніх версій обох). Якщо ви працюєте останніми, все, що вам потрібно зробити, це:

  1. Завантажте SDK Facebook з https://developers.facebook.com/docs/android/
  2. Розпакуйте архів
  3. В Android Studio 0.5.5 або пізнішої версії виберіть "Імпорт модуля" у меню "Файл".
  4. У майстрі встановіть вихідний шлях модуля для імпорту як каталог "facebook" всередині розпакованого архіву. (Примітка. Якщо ви виберете всю батьківську папку, вона буде містити не лише саму бібліотеку, а й усі приклади програм, кожен як окремий модуль. Це може працювати, але, мабуть, не те, що ви хочете).
  5. Відкрийте структуру проекту, Ctrl + Shift + Alt + Sа потім виберіть вкладку залежності. Натисніть +кнопку і виберіть залежність модуля. У новому вікні спливаюче виберіть:facebook.
  6. Вам слід добре піти.

Інструкції для старшої Android Studio та старшої програми SDK для Facebook

Це стосується Android Studio 0.5.4 та новіших версій, і має найбільш сенс для версій SDK Facebook перед тим, як Facebook запропонував Gradle збирати файли для розповсюдження. Я не знаю, у якій версії SDK вони внесли цю зміну.

Інструкції Facebook у розділі "Імпорт SDK в проект Android Studio" на їхній сторінці https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ невірні для проектів на основі Gradle (тобто ваш проект був створений за допомогою майстра нового проекту Android Studio та / або має build.gradleфайл для вашого модуля програми). Дотримуйтесь цих інструкцій замість цього:

  1. Створіть librariesпапку під головним каталогом вашого проекту. Наприклад, якщо ваш проект HelloWorldProject, ви створили б HelloWorldProject/librariesпапку.

  2. Тепер скопіюйте весь facebookкаталог зі встановлення SDK у librariesстворену вами папку.

  3. Видаліть libsпапку в facebookкаталозі. Якщо ви хочете, видалити project.properties, build.xml, .classpath, і .project. файли. Вам вони не потрібні.

  4. Створіть build.gradleу 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']
            }
        }
    }
    

    Зауважте, що залежно від того, коли ви дотримуєтесь цих інструкцій, порівняно з тим, коли це написано, можливо, вам знадобиться відрегулювати classpath 'com.android.tools.build:gradle:0.6.+'рядок для посилання на новішу версію плагіна Gradle. Незабаром нам буде потрібна версія 0.7 або пізніша. Спробуйте це, і якщо ви отримаєте помилку, що потрібна нова версія плагіна Gradle, це рядок, який ви повинні змінити.

  5. Переконайтесь, що у вашому менеджері SDK встановлена бібліотека підтримки Android .

  6. Відредагуйте settings.gradleфайл у головному каталозі програми та додайте цей рядок:

    include ':libraries:facebook'
  7. Якщо ваш проект уже відкритий в Android Studio, натисніть кнопку «Синхронізувати проект з файлами Gradle» на панелі інструментів. Як тільки це буде зроблено, facebookмодуль повинен з’явитися. введіть тут опис зображення

  8. Відкрийте діалогове вікно Структура проекту. Виберіть Модулі зі списку зліва, клацніть на модулі вашої програми, натисніть на вкладку Залежності та натисніть кнопку +, щоб додати нову залежність. введіть тут опис зображення
  9. Виберіть "Залежність від модуля". Він відкриє діалогове вікно із переліком модулів, на які можна вибрати; виберіть ": бібліотеки: facebook". введіть тут опис зображення
  10. Клацніть OK у всіх діалогових вікнах. Android Studio автоматично повторно синхронізує ваш проект (зробивши зайвим знову натискати кнопку "Синхронізувати проект з файлами Gradle") та підбере нову залежність. Вам слід добре піти.

1
/libraries/facebook/build.gradle дають мені деякі помилки. Msgstr "Неможливо вирішити символ compileSdkVersion". Те саме з символом compileSdkVersion, маніфестом та іншими ...
sensorario

2
Це працює для мене, але я повинен був змінити шлях до проекту Facebook бібліотеки класів , щоб бути абсолютний шлях, тобто ":MyApp:libraries:facebook"як у файлі налаштувань і файл build.grade для мого основного додатки
Mark

7
Дуже добре! Ця відповідь має бути частиною офіційного підручника SDK у Facebook.
Самуель Барбоса

1
Це рішення для мене не працює. Вибравши каталог у секторі facebook-android-sdk-3.16, майстер все ще говорить: "Вибрати модулі для імпорту": $. Я використовую Android Studio (бета) 0.8.2. Будь-яка ідея?
Дієго Паломар

2
Чому вони не можуть просто зробити цю річ однозначною?
Ojonugwa Jude Ochalifu

108

Facebook дійсно додав SDK до сховищ Maven Central. Щоб налаштувати свій проект за допомогою екземпляра Maven repo, вам потрібно буде зробити 2 речі:

  1. У свій файл build.gradle проекту верхнього рівня додайте сховища Maven Central. Моя виглядає так:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
    
  2. У файл build.grade на рівні програми додайте залежність від sdk Facebook:

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

Ви також можете налаштувати конкретну версію SDK Facebook. Для переліку доступних версій у сховищі Maven натисніть це посилання.


1
Це працює для мене. Це дійсно найкращий спосіб додати facebook api в Android Studio. Спасибі
Олкунмустафа

1
Це метод у документах Facebook, але він не працює. У мене є android studio 1.0 і sdk v 3.x.
Абхішек Балані

1
Зауважте, вам слід вказати точний номер версії або хоча б основну, наприклад, 3.23. +. Facebook не побоюється швидко оновлювати API та вносити переломні зміни, що спричинить збої в збірці та не повторювані збірки.
Грег Енніс

@GregEnnis - хороший вклад. Я трохи оновив відповідь і додав коментар до коду.
SBerg413

Отже, мені не потрібно імпортувати жодну зовнішню бібліотеку та все? Просто додайте fb sdk у файл gradle ??
Kaveesh Kanwal

17

Facebook публікує SDK на Maven central:

Просто додайте:

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

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

2
Це неправильно, вам потрібен mavenCentral () у розділі сховищ.
Бугер

1
jcenter включають mavenCentral
Romain

12

Рішення Скотта Барти працювало на мене, за винятком того, що я повинен був додати їх до залежностей мого основного файла build.gradle проекту:

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

Також варто згадати, що вам потрібно переконатися:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

У обох файлах build.gradle однакові ... Одного разу я це зробив, як шарм.


Я отримую помилку під час створення: Проект із контуром "бібліотеки: facebook" не вдалося знайти в кореневому проекті ... Будь-які ідеї? (Я, звичайно, додав папку згідно з рішенням Скотта Bs, хоча я НЕ маю файл settings.gradle ?! (Проект створений в Android Studio)
swebal

1
рядок проекту компілювати повинен відповідати вашій структурі каталогу проектів. : бібліотеки: facebook означає, що ваша бібліотека у Facebook знаходиться у папці з назвою "Бібліотеки" у вашому кореневому каталозі
подвійно

6

Під час використання git ви можете легко включити найновіший facebook-android-sdk.

  • Додати facebook-android-sdk як підмодуль: git submodule add https://github.com/facebook/facebook-android-sdk.git
  • Додати sdk як проект gradle: відредагувати settings.gradle та додати рядок: include ':facebook-android-sdk:facebook'
  • Додайте sdk як залежність до модуля: редагуйте build.gradle та додайте в блок залежності: compile project(':facebook-android-sdk:facebook')

4

Я використовував facebook sdk 4.10.0 для інтеграції входу в свій додаток для android. Підручник, за яким я слідував:

facebook android studio для входу в систему

Ви зможете отримати ім’я, прізвище, електронну пошту, стать, ідентифікатор facebook та дату народження від facebbok.

Вище підручник також пояснює, як створити додаток у консолі розробника facebook через відео.

додати нижче у build.gradle(Module:app)файл:

repositories {
        mavenCentral()
    }

і

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

тепер додайте нижче у файл 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" />

додати наступне у файл 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>

І останнє додайте нижче у файл 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

Я розгорнув Facebook SDK для Android в сховище Sonatype.

Ви можете включити цю бібліотеку як залежність від Gradle:

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

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

Оригінальний пост тут .


Це більше не працює, веб-сайт не працює. Вбивство мого цілого ІДЕ.
Mgamerz

Дивно, я використовував сайти, які перевіряють, чи не працює сайт і навіть ваша домашня сторінка не завантажуватиметься.
Мгамерз

2

Люди, які використовують Android Studio 0.8.6, можуть це зробити:

  1. Завантажте Facebook-android-sdk-xxx.zip & Розпакуйте його
  2. Скопіюйте ТИЛЬКО фейсбук-реж під діром Facebook-android-sdk-xxx у свій проект разом із додатком /

    • ImAnApp /
      • | - додаток /
      • | - будувати /
      • | - facebook /
  3. Тепер вам слід побачити Android Studio, що показує facebook як модуль

  4. Змініть build.gradle facebook у це.
    • надано файли ('../ libs / bolts.jar') до provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) до compileSdkVersion 20іншої версії, яку ви визначили в додатку
    • buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION до buildToolsVersion '20.0.0'
    • minSdkVersion Integer.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) до minSdkVersion 14
    • targetSdkVersion Integer.parseInt (project.ANDROID_BUILD_TARGET_SDK_VERSION) на 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, і він повинен просто працювати!


2

Я виправив

"Не вдалося знайти властивість 'ANDROID_BUILD_SDK_VERSION' у проекті: facebook". "

помилка у build.gradleфайлі, додавши 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>

Джерело: https://stackoverflow.com/a/21490651/2161698


1

Створіть файл build.gradle у проекті 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')
    }
}

Потім додайте include ':libs:facebook'рівняння <project_directory>/libs/facebook(шлях до бібліотеки) в settings.gradle.


Я вже це робив. І все-таки його відображення помилки. Я думаю, що помилка говорить, що Facebook не є рівним, і тому його не можна компілювати. Але я не впевнений
Ума

Спробуйте скласти консоль: ./gradlew clean assembleDebug
Володимир


0

використовувати facebook sdk в андроїд-студії досить просто, просто додайте наступний рядок у своєму градусі

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

і переконайтеся, що ви оновили сховище підтримки Android, якщо не, тоді оновіть його, використовуючи окремі керування SDK

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.