с помощью facebook sdk в студии Android

104

Я слежу за Facebook SDK для 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 и более поздних версий и более поздних версий Facebook SDK этот процесс намного проще, чем описанный ниже (который был написан для более ранних версий обоих). Если вы используете последнюю версию, все, что вам нужно сделать, это:

  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 и более старой версии Facebook SDK

Это применимо к Android Studio 0.5.4 и более ранним версиям и наиболее целесообразно для версий Facebook SDK до того, как 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. Нажмите ОК во всех диалоговых окнах. Android Studio автоматически повторно синхронизирует ваш проект (без необходимости снова нажимать кнопку «Синхронизировать проект с файлами Gradle») и подберет новую зависимость. Тебе должно быть хорошо.
Скотт Барта
источник
1
/libraries/facebook/build.gradle дают мне несколько ошибок. «Не удается разрешить символ compileSdkVersion». То же самое с символом compileSdkVersion, манифестом и прочим ...
sensorario
2
Это сработало для меня, но мне пришлось изменить путь к проекту оценки библиотек facebook, чтобы он был абсолютным путем, то есть ":MyApp:libraries:facebook"как в файле настроек, так и в файле build.grade для моего основного приложения
Марк
7
Очень хорошо! Этот ответ должен быть частью официального руководства по SDK для Facebook.
Сэмюэл Барбоса
1
У меня это решение не работает. После выбора каталога facebook внутри каталога facebook-android-sdk-3.16 мастер по-прежнему говорит: «Выберите модули для импорта»: $. Я использую Android Studio (бета) 0.8.2. Любая идея?
Diego Palomar
2
Почему они не могут хоть раз сделать это простым?
Ojonugwa Jude Ochalifu
108

Facebook действительно добавил SDK в репозитории Maven Central. Чтобы настроить свой проект с использованием экземпляра репозитория maven, вам нужно сделать 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.
    }
    

Вы также можете настроить конкретную версию Facebook SDK. Чтобы просмотреть список доступных версий в репозитории maven, щелкните эту ссылку.

SBerg413
источник
1
У меня это работает. Это действительно лучший способ добавить facebook api в Android Studio. Спасибо
Olkunmustafa
1
Это метод в документации Facebook, но он не работает. У меня android studio 1.0 и sdk v 3.x.
Абхишек Балани
1
Обратите внимание, что вы должны указать точный номер версии или хотя бы основную версию, например 3.23. +. Facebook не боится быстро обновлять API и вносить критические изменения, которые приведут к сбоям сборки и неповторяющимся сборкам.
Грег Эннис
@GregEnnis - хороший вклад. Я немного обновил ответ и добавил комментарий в код.
SBerg413
Итак, мне не нужно импортировать какую-либо внешнюю библиотеку и все такое? Просто добавьте fb sdk в файл gradle ??
Кавиш Канвал
17

Facebook публикует SDK в maven central:

Просто добавь :

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

dependencies {
    compile 'com.facebook.android:facebook-android-sdk:+'
}
Ромен
источник
2
Это неправильно, вам нужен mavenCentral () в разделе репозиториев.
Booger
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 ... Как только я это сделал, все заработало как шарм.

user2129635
источник
Я получаю сообщение об ошибке при сборке: Проект с путем "библиотеки: facebook" не может быть найден в корневом проекте ... Есть идеи? (Я, конечно, добавил папку в соответствии с решением Скотта Б.С., хотя у меня НЕТ файла settings.gradle ?! (Проект создан в Android Studio)
swebal
1
строка проекта компиляции должна соответствовать структуре каталогов вашего проекта. : библиотеки: facebook подразумевает, что ваша библиотека facebook находится в папке с именем библиотеки в корневом каталоге
doubleA
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')
Pepijn
источник
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();

    }

}
user6017633
источник
3

Я развернул Facebook Android SDK в репозитории Sonatype.

Вы можете включить эту библиотеку как зависимость Gradle:

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

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

Оригинальный пост здесь .

Алексей К.
источник
Это больше не работает, ваш сайт не работает. Убил всю мою IDE.
Mgamerz
Странно, я использовал сайты, которые проверяют, не работает ли сайт и не загружается ли даже ваша домашняя страница.
Mgamerz
2

Люди, использующие Android Studio 0.8.6, могут делать следующее:

  1. Загрузите Facebook-android-sdk-xxx.zip и разархивируйте его.
  2. Скопируйте ТОЛЬКО каталог facebook из каталога Facebook-android-sdk-xxx в свой проект вместе с app /

    • ImAnApp /
      • | - приложение /
      • | - построить /
      • | - facebook /
  3. Теперь вы должны увидеть, как Android Studio показывает facebook как модуль.

  4. Измените build.gradle facebook на this.
    • предоставленные файлы ('../ 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 в проекте 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')
    }
}

Затем добавьте include ':libs:facebook'equals <project_directory>/libs/facebook(путь к библиотеке) в settings.gradle.

Владимир
источник
Я это уже сделал. Все еще показывает ошибку. Я думаю, что ошибка говорит, что facebook не является градиентом, и поэтому его нельзя скомпилировать. Но я не уверен
Ума
Попробуйте собрать через консоль: ./gradlew clean assemblyDebug
Владимир
0

использовать facebook sdk в студии Android довольно просто, просто добавьте следующую строку в свой градиент

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

и убедитесь, что вы обновили репозиторий поддержки Android, если нет, то обновите его с помощью автономного диспетчера sdk

Мехроз Мунир
источник