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

여기에 원본 게시물 .