Использование Facebook SDK в Android-студии

Я слежу за 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

12 ответов

Решение

НОТА

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

  1. Загрузите Facebook SDK с веб- сайта 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 и более ранним версиям и имеет смысл для версий 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") и выбирает новую зависимость. Тебе должно быть хорошо идти.

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 уровня приложения добавьте зависимость Facebook sdk:

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

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

Facebook публикует SDK на Maven Central:

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

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

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

Решение Скотта Барты сработало для меня, за исключением того, что мне пришлось добавить их в зависимости моего основного файла 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... После того, как я сделал это, он запустился как шарм.

При использовании 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')

Я использовал 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();

    }

}

Я развернул Android SDK Facebook в хранилище Sonatype.

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

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

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

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

Я исправил

"Не удалось найти свойство '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>

Источник: /questions/41035149/import-biblioteki-facebook-v-android-studio-ne-udalos-najti-svojstvo-androidbuildsdkversion/41035150#41035150

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

  1. Загрузите Facebook-android-sdk-xxx.zip и распакуйте его
  2. Скопируйте ТОЛЬКО каталог Facebook под каталогом 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, и он должен работать нормально!

Создайте файл 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' равняется <project_directory>/libs/facebook (путь к библиотеке) в settings.gradle,

* Хранилище Gradle для Facebook SDK.

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

Поиск последней версии facebook SDK

Использование Facebook SDK в Android Studio довольно просто, просто добавьте следующую строку в ваш Gradle

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

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

Другие вопросы по тегам