Android 스튜디오에서 facebook sdk 사용 A

나는 다음과 같은거야 안드로이드 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



답변

노트

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”버튼을 다시 클릭 할 필요가 없도록 함) 새로운 종속성을 선택합니다. 가셔도 좋습니다.

답변

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 저장소에서 사용 가능한 버전 목록을 보려면이 링크를 클릭하십시오.


답변

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

다음을 추가하십시오.

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

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


답변

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


답변

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')

답변

내 안드로이드 앱에 로그인을 통합하기 위해 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();

    }

}


답변

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'
}

여기에 원본 게시물 .