используя пакет SDK facebook в 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 и ранее, и имеет наибольший смысл для версий 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, вы создадите а .

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

  3. удалить . Если вы любите, удалить project.properties, build.xml, .classpath и .project. и файлы тоже. Тебе не нужно их.

  4. создать на С следующее содержание:

    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. убедитесь, что Библиотека Поддержки Android в вашем SDK manager установлен.

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

    include ':libraries:facebook'
    
  7. если ваш проект уже открыт в Android Studio, нажмите кнопку "Синхронизировать проект с файлами Gradle" на панели инструментов. Как только это будет сделано, должны появиться. enter image description here

  8. откройте диалоговое окно структура проекта. Выберите модули слева список, нажмите на модуль вашего приложения, нажмите на зависимости вкладку и нажмите на кнопку+, чтобы добавить новую зависимость. enter image description here
  9. выбрать "Модульная зависимость". Он появится диалог со списком модули на выбор; выберите ": библиотеки: facebook". enter image description here
  10. нажать "ОК" все диалоги. В Android Studio автоматически синхронизировать ваш проект (что делает ненужным снова нажать кнопку" Синхронизировать проект с файлами Gradle") и возьмите новую зависимость. Ты должен быть готов.

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

  1. в проекте сборка верхнего уровня.Gradle в файл, добавьте центральные репозитории Maven. Мой выглядит так:

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
    
  2. на сборка уровня приложения.класс!--8--> Файл, Добавить 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:+'
}

решение Скотта Барты работало для меня, за исключением того, что мне пришлось добавить их к зависимостям моей основной сборки проекта.файл gradle:

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

также стоит упомянуть, вам нужно убедиться:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

одинаковы в обеих сборках.файлы gradle...Как только я это сделал, все прошло как по маслу.


при использовании git вы можете легко включить новейший Facebook-android-sdk.

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

я использовал Facebook sdk 4.10.0 для интеграции входа в мое приложение для android. Учебник я следовал:

facebook войти android studio

вы сможете получить имя, фамилию, адрес электронной почты, пол , Facebook id и дату рождения от 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();

    }

}

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

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


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

  1. скачать Facebook-android-sdk-xxx.zip & распаковать его
  2. скопировать только facebook dir под Facebook-android-sdk-xxx dir в ваш проект вместе с app/

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

  4. изменить построение.gradle из facebook в это.
    • предоставленные файлы('../библиотеки/болты.jar') to provided files('./libs/bolts.jar')
    • compileSdkVersion целое.parseInt (project.ANDROID_BUILD_SDK_VERSION) в compileSdkVersion 20 или другая версия, определенная в приложении
    • проект buildToolsVersion.ANDROID_BUILD_TOOLS_VERSION в buildToolsVersion '20.0.0'
    • minSdkVersion со значением Целое число.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) в minSdkVersion 14
    • targetSdkVersion целое.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']
            }
        }
    }

Resync ваш файл gradle и он должен просто работать нормально!


я исправил

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


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