С помощью 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

Ответ 1

Примечание

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

  • Загрузите SDK Facebook из https://developers.facebook.com/docs/android/
  • Распакуйте архив
  • В Android Studio 0.5.5 или новее выберите "Импорт модуля" в меню "Файл".
  • В мастере установите исходный путь модуля для импорта в качестве каталога "facebook" в распакованном архиве. (Примечание. Если вы выберете всю родительскую папку, в нее войдет не только сама библиотека, но и все примеры приложений, каждая из которых будет отдельным модулем. Это может работать, но, вероятно, это не то, что вы хотите).
  • Откройте структуру проекта на Ctrl + Shift + Alt + S, а затем выберите вкладку зависимостей. Нажмите кнопку + и выберите "Зависимость модуля". В новом окне выберите :facebook.
  • Вам должно быть хорошо идти.

Инструкции для старых Android-студий и старых 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 New Project и/или имеет файл build.gradle для вашего прикладного модуля). Вместо этого выполните следующие действия:

  • Создайте папку libraries под основным каталогом проекта. Например, если ваш проект HelloWorldProject, вы должны создать a HelloWorldProject/libraries.

  • Теперь скопируйте весь каталог facebook из SDK установки в папку libraries, которую вы только что создали.

  • Удалите папку libs в каталоге facebook. Если хочешь, удалите project.properties, build.xml, .classpath и .project. файлы. Они вам не нужны.

  • Создайте файл 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, это строка, которую вы должны отредактировать.

  • Убедитесь, что в вашем менеджере SDK установлена ​​ Android Support Library.

  • Отредактируйте файл settings.gradle в главном каталоге приложений и добавьте эту строку:

    include ':libraries:facebook'
    
  • Если ваш проект уже открыт в Android Studio, нажмите кнопку "Синхронизировать проект с помощью Gradle Files" на панели инструментов. После этого появится модуль facebook. enter image description here

  • Откройте диалоговое окно "Структура проекта". Выберите модули из левой список, нажмите на свой модуль приложений, нажмите "Зависимости" и нажмите кнопку +, чтобы добавить новую зависимость. enter image description here
  • Выберите "Зависимость модуля". Появится диалог со списком модули на выбор; выберите ": libraries: facebook". enter image description here
  • Нажмите OK. все диалоги. Android Studio автоматически пересинхронизирует ваш проект (что делает ненужным щелчок на этом "Синхронизировать проект с помощью кнопки Gradle Files" ) и возьмите новую зависимость. Вам должно быть хорошо идти.

Ответ 2

Facebook действительно добавил SDK в репозитории Maven Central. Чтобы настроить свой проект с помощью экземпляра maven repo, вам нужно сделать 2 вещи:

  • В ваших проектах файл верхнего уровня build.gradle добавьте репозитории Maven Central. Мой выглядит так:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
    
  • В файле на уровне приложения 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 нажмите эту ссылку.

Ответ 3

Facebook публикует SDK на центральном сервере maven:

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

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

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

Ответ 4

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

Ответ 5

При использовании git вы можете легко использовать новейший фейсбук-андроид-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')

Ответ 6

Я развернул 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'
}

Оригинальное сообщение здесь.

Ответ 7

Многие ответы есть, но я хочу показать самый простой способ получить доступ к facebook в приложении Android. Я использую следующую ссылку для справки: facebook login android studio

добавить ниже в 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();

    }

}

Ответ 8

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

  • Скачайте Facebook-android-sdk-xxx.zip и распакуйте его.
  • Скопируйте ТОЛЬКО facebook dir в директорию Facebook-android-sdk-xxx в свой проект вместе с приложением /

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

  • Измените 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, и он должен работать нормально!

Ответ 9

Я зафиксировал

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

Источник: fooobar.com/questions/57854/...

Ответ 10

Создать файл 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.

Ответ 12

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

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

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