Android 스튜디오에서 facebook sdk 사용


104

나는 다음과 같은거야 안드로이드 Studio를 사용하여 안드로이드에 대한 페이스 북 SDK를 . 내 응용 프로그램을 실행할 때 아래에 언급 된 경고가 표시됩니다.

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

사용중인 SDK의 SDK 관리자에 Android 지원 저장소가 설치되어 있습니까?
Scott Barta

아니. 필수인가요?
Uma

예. 이것이 표시되는 오류 메시지입니다. 나는 그것이 직관적이지 않다는 것을 압니다. 개선은 우리 목록에 있습니다. 이에 대한 필요성을 반영하기 위해 내 답변을 업데이트하겠습니다.
Scott Barta

답변:


250

노트

Android Studio 0.5.5 이상 및 이후 버전의 Facebook SDK의 경우이 프로세스는 아래에 설명 된 것보다 훨씬 간단합니다 (둘 다 이전 버전 용으로 작성 됨). 최신 버전을 실행하는 경우 다음과 같이하면됩니다.

  1. https://developers.facebook.com/docs/android/ 에서 Facebook SDK를 다운로드합니다.
  2. 아카이브 압축 해제
  3. Android Studio 0.5.5 이상에서는 File 메뉴에서 "Import Module"을 선택합니다.
  4. 마법사에서 압축을 푼 아카이브 내의 "facebook"디렉토리로 가져올 모듈의 소스 경로를 설정합니다. (참고 : 전체 상위 폴더를 선택하면 라이브러리 자체뿐만 아니라 모든 샘플 앱도 각각 별도의 모듈로 가져옵니다. 작동 할 수 있지만 원하는 것이 아닐 수 있습니다.)
  5. 프로젝트 구조를 열고 Ctrl + Shift + Alt + S종속성 탭을 선택하십시오. 버튼을 +클릭하고 모듈 종속성을 선택하십시오. 새 창에서 팝업 선택:facebook.
  6. 가셔도 좋습니다.

이전 Android Studio 및 이전 Facebook SDK에 대한 지침

이는 Android Studio 0.5.4 및 이전 버전에 적용되며 Facebook이 배포를 위해 Gradle 빌드 파일을 제공하기 전에 Facebook SDK 버전에 가장 적합합니다. 어떤 버전의 SDK에서 변경했는지 모르겠습니다.

https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ 페이지의 "Android 스튜디오 프로젝트로 SDK 가져 오기"에있는 Facebook의 지침 이 잘못되었습니다. Gradle 기반 프로젝트의 경우 (예 : 프로젝트가 Android Studio의 새 프로젝트 마법사를 사용하여 빌드되었거나 build.gradle애플리케이션 모듈 용 파일이 있음). 대신 다음 지침을 따르십시오.

  1. libraries프로젝트의 기본 디렉터리 아래 에 폴더를 만듭니다 . 예를 들어 프로젝트가 HelloWorldProject 인 경우 HelloWorldProject/libraries폴더를 만듭니다 .

  2. 이제 facebookSDK 설치 의 전체 디렉터리 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 관리자 가 설치되어 .

  6. settings.gradle애플리케이션의 기본 디렉토리에서 파일을 편집 하고 다음 행을 추가하십시오.

    include ':libraries:facebook'
  7. 프로젝트가 이미 Android Studio에 열려있는 경우 툴바에서 "Sync Project with Gradle Files"버튼을 클릭합니다. 완료되면facebook 모듈이 나타납니다. 여기에 이미지 설명 입력

  8. 프로젝트 구조 대화 상자를 엽니 다. 왼쪽 목록에서 모듈을 선택하고 애플리케이션의 모듈을 클릭 한 다음 종속성 탭을 클릭하고 + 버튼을 클릭하여 새 종속성을 추가합니다. 여기에 이미지 설명 입력
  9. "모듈 종속성"을 선택합니다. 선택할 모듈 목록이있는 대화 상자가 나타납니다. “: libraries : facebook”을 선택합니다. 여기에 이미지 설명 입력
  10. 모든 대화 상자에서 확인을 클릭합니다. Android Studio는 프로젝트를 자동으로 재 동기화하고 ( "Sync Project with Gradle Files"버튼을 다시 클릭 할 필요가 없도록 함) 새로운 종속성을 선택합니다. 가셔도 좋습니다.

1
/libraries/facebook/build.gradle에서 오류가 발생합니다. "compileSdkVersion 기호를 확인할 수 없습니다." compileSdkVersion 기호, 매니페스트 및 기타와 동일합니다.
sensorario dec

2
이것은 나를 위해 일했지만 페이스 북 라이브러리 등급 프로젝트의 경로를 절대 경로로 변경해야했습니다. 즉, ":MyApp:libraries:facebook"주 앱의 설정 파일과 build.grade 파일 모두에서
Mark

7
아주 좋아요! 이 답변은 공식 Facebook SDK 튜토리얼의 일부 여야합니다.
사무엘 바르보사

1
이 솔루션은 나를 위해 작동하지 않습니다. facebook-android-sdk-3.16 디렉토리에서 facebook 디렉토리를 선택한 후에도 마법사는 여전히 '가져올 모듈 선택'이라고 말합니다. Android Studio (베타) 0.8.2를 사용합니다. 어떤 생각?
Diego Palomar

2
한 번만이 일을 간단하게 만들 수없는 이유는 무엇입니까?
Ojonugwa Jude Ochalifu

108

Facebook은 실제로 Maven Central 저장소에 SDK를 추가했습니다. Maven 리포지토리의 인스턴스를 사용하여 프로젝트를 구성하려면 다음 두 가지 작업을 수행해야합니다.

  1. 프로젝트 최상위 build.gradle 파일에서 Maven Central 저장소를 추가합니다. 내 모습은 다음과 같습니다.

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
  2. 에서 응용 프로그램 수준의 build.grade의 파일, 페이스 북 SDK 종속성을 추가 :

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

특정 Facebook SDK 버전도 조정할 수 있습니다. Maven 저장소에서 사용 가능한 버전 목록을 보려면이 링크를 클릭하십시오.


1
그것은 나를 위해 일하고 있습니다. Android Studio에 Facebook API를 추가하는 가장 좋은 방법입니다. 감사합니다
Olkunmustafa 2014

1
이것은 Facebook 문서의 방법이지만 작동하지 않습니다. android studio 1.0과 sdk v 3.x가 있습니다.
Abhishek Balani 2015 년

1
정확한 버전 번호를 지정하거나 최소한 3.23. +와 같은 주요 버전을 지정해야합니다. Facebook은 API를 빠르게 버전 화하고 주요 변경 사항을 적용하는 것을 두려워하지 않습니다. 이로 인해 빌드 실패 및 반복 불가능한 빌드가 발생합니다.
그렉 에니스

@GregEnnis-좋은 입력. 답변을 약간 업데이트하고 코드에도 주석을 추가했습니다.
SBerg413

따라서 외부 라이브러리를 모두 가져올 필요가 없습니까? 간단하게 gradle 파일에 fb sdk를 추가 하시겠습니까 ??
Kaveesh Kanwal 2015

17

Facebook은 Maven Central에 SDK를 게시합니다.

다음을 추가하십시오.

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

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

2
이것은 옳지 않습니다. 저장소 섹션에 mavenCentral ()이 필요합니다.
Booger

1
jcenter는 mavenCentral 포함
로맹

12

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 파일에서 동일합니다 ...이 작업을 한 후에는 매력처럼 실행되었습니다.


빌드 할 때 오류가 발생합니다. '라이브러리 : 페이스 북'경로가있는 프로젝트를 루트 프로젝트에서 찾을 수 없습니다. 아이디어가 있습니까? (물론 settings.gradle 파일이 없더라도 Scott Bs 솔루션에 따라 폴더를 추가
했습니까

1
컴파일 프로젝트 라인은 프로젝트 디렉토리 구조와 일치해야합니다. : libraries : facebook은 facebook 라이브러리가 루트 디렉토리 내의 libraries라는 폴더에 있음을 의미합니다.
doubleA

6

git을 사용할 때 최신 facebook-android-sdk를 쉽게 통합 할 수 있습니다.

  • facebook-android-sdk를 하위 모듈로 추가합니다. git submodule add https://github.com/facebook/facebook-android-sdk.git
  • gradle 프로젝트로 SDK 추가 : settings.gradle을 편집하고 다음 줄을 추가합니다. include ':facebook-android-sdk:facebook'
  • sdk를 모듈에 종속성으로 추가 : build.gradle을 편집하고 종속성 블록 내에 추가합니다. compile project(':facebook-android-sdk:facebook')

4

내 안드로이드 앱에 로그인을 통합하기 위해 facebook sdk 4.10.0을 사용했습니다. 내가 따라 간 튜토리얼은 다음과 같습니다.

페이스 북 로그인 안드로이드 스튜디오

페이스 북에서 이름, 성, 이메일, 성별, 페이스 북 아이디, 생년월일을 얻을 수 있습니다.

위의 튜토리얼은 비디오를 통해 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 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 2014 년

이상하게도 사이트가 다운 되어도 홈페이지가로드되지 않는지 확인하는 사이트를 사용했습니다.
Mgamerz 2014 년

2

Android Studio 0.8.6을 사용하는 사람들은 다음을 수행 할 수 있습니다.

  1. Facebook-android-sdk-xxx.zip 다운로드 및 압축 해제
  2. Facebook-android-sdk-xxx 디렉터리 아래의 facebook 디렉터리 만 app /과 함께 프로젝트에 복사 합니다.

    • ImAnApp /
      • |-앱 /
      • |-빌드 /
      • |-페이스 북 /
  3. 이제 Android Studio에서 facebook을 모듈로 표시해야합니다.

  4. facebook의 build.gradle을 이것으로 수정하십시오.
    • 제공된 파일 ( '../libs/bolts.jar') provided files('./libs/bolts.jar')
    • compileSdkVersion Integer.parseInt (project.ANDROID_BUILD_SDK_VERSION) to compileSdkVersion 20 or other version you defined in the app
    • buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION to buildToolsVersion '20.0.0'
    • minSdkVersion Integer.parseInt (project.ANDROID_BUILD_MIN_SDK_VERSION) to minSdkVersion 14
    • targetSdkVersion Integer.parseInt (project.ANDROID_BUILD_TARGET_SDK_VERSION) to 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

나는 고쳤다

" ': facebook'프로젝트에서 'ANDROID_BUILD_SDK_VERSION'속성을 찾을 수 없습니다."

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

facebook sdk 프로젝트에서 build.gradle 파일을 만듭니다.

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.


나는 이미 이것을했다. 여전히 오류를 표시합니다. 나는 오류가 페이스 북이 등급이 아니기 때문에 컴파일 할 수 없다고 생각합니다. 하지만 확실하지 않습니다
Uma

콘솔을 통해 빌드를 시도해보십시오 ./gradlew 깨끗한 assembleDebug
블라디미르


0

android studio에서 facebook sdk를 사용하는 것은 매우 간단합니다. gradle에 다음 줄을 추가하십시오.

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

Android 지원 저장소를 업데이트했는지 확인하고 그렇지 않은 경우 독립 실행 형 sdk 관리자를 사용하여 업데이트하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.