AndroidスタジオでFacebook SDKを使用する


104

Android Studioを使用してAndroid向けFacebook 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 Support Repositoryは、使用しているSDKのSDKマネージャーにインストールされていますか?
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以降では、[ファイル]メニューから[モジュールのインポート]を選択します。
  4. ウィザードで、モジュールのソースパスを、解凍したアーカイブ内の「facebook」ディレクトリとしてインポートするように設定します。(注:親フォルダー全体を選択すると、ライブラリ自体だけでなく、すべてのサンプルアプリもそれぞれ個別のモジュールとして読み込まれます。これは機能する可能性がありますが、おそらく望んでいるものではありません)。
  5. でプロジェクト構造を開きCtrl + Shift + Alt + S、[依存関係]タブを選択します。+ボタンをクリックして、モジュールの依存関係を選択します。新しいウィンドウでポップアップを選択します:facebook.
  6. あなたは行ってもいいはずです。

古いAndroid Studioと古いFacebook SDKの手順

これはAndroid Studio 0.5.4以前に適用され、Facebookがディストリビューション用のGradleビルドファイルを提供する前のFacebook SDKのバージョンに最も意味があります。彼らがその変更を加えたSDKのバージョンはわかりません。

Facebookのhttps://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ページの「Android SDKプロジェクトにSDKをインポートする」の説明が間違っているGradleベースのプロジェクトの場合(つまり、プロジェクトはAndroid StudioのNew Projectウィザードを使用して構築されているかbuild.gradle、アプリケーションモジュール用のファイルを持っている)。代わりに次の手順に従ってください。

  1. librariesプロジェクトのメインディレクトリの下にフォルダを作成します。たとえば、プロジェクトがHelloWorldProjectの場合、HelloWorldProject/librariesフォルダーを作成します。

  2. 次に、facebookディレクトリ全体をSDKインストールからlibraries作成したフォルダーにコピーします。

  3. ディレクトリlibs内のフォルダを削除しますfacebook。あなたが好きなら、削除project.propertiesbuild.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マネージャーのAndroidサポートライブラリがインストールされていることを確認します。

  6. settings.gradleアプリケーションのメインディレクトリでファイルを編集し、次の行を追加します。

    include ':libraries:facebook'
  7. プロジェクトがすでにAndroid Studioで開いている場合は、ツールバーの[プロジェクトをGradleファイルと同期]ボタンをクリックします。完了すると、facebookモジュールが表示されます。 ここに画像の説明を入力してください

  8. プロジェクト構造ダイアログを開きます。左側のリストから「モジュール」を選択し、アプリケーションのモジュールをクリックして、「依存関係」タブをクリックし、「+」ボタンをクリックして新しい依存関係を追加します。 ここに画像の説明を入力してください
  9. 「モジュールの依存関係」を選択します。選択するモジュールのリストを含むダイアログが表示されます。「:libraries:facebook」を選択します。 ここに画像の説明を入力してください
  10. すべてのダイアログで[OK]をクリックします。Android Studioは自動的にプロジェクトを再同期化し(「プロジェクトをGradleファイルと同期」ボタンを再度クリックする必要がなくなります)、新しい依存関係を取得します。あなたは行ってもいいはずです。

1
/libraries/facebook/build.gradleでエラーが発生します。「compileSdkVersionシンボルを解決できません」。compileSdkVersionシンボル、マニフェストなどと同じ...
sensorario

2
これは私にとってはうまくいきましたが、facebookライブラリのgradeプロジェクトへのパスを絶対パスに変更する必要がありました。つまり":MyApp:libraries:facebook"、メインアプリの設定ファイルとbuild.gradeファイルの両方で
Mark

7
とても良い!この回答は、公式のFacebook SDKチュートリアルの一部である必要があります。
Samuel Barbosa

1
この解決策は私にはうまくいきません。facebook-android-sdk-3.16ディレクトリ内のfacebookディレクトリを選択した後も、ウィザードには「インポートするモジュールを選択してください」と表示されます:$。Android Studio(ベータ版)0.8.2を使用しています。何か案が?
ディエゴパロマー

2
なぜ彼らはこのことを一度だけ簡単にできないのでしょうか?
Ojonugwa Jude Ochalifu 14

108

Facebookは確かにSDKをMaven Centralリポジトリに追加しました。maven repoのインスタンスを使用してプロジェクトを構成するには、2つのことを行う必要があります。

  1. プロジェクトの最上位のbuild.gradleファイルに、Maven Centralリポジトリを追加します。鉱山は次のようになります。

    repositories {
        jcenter()       // This is the default repo
        mavenCentral()  //  This is the Maven Central repo
    }
    
  2. では、アプリレベルのbuild.gradeのファイルは、Facebook 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を迅速にバージョン管理し、重大な変更を加えることを恐れていません。これにより、ビルドの失敗や反復不能なビルドが発生します。
グレッグエニス2015年

@GregEnnis-良い入力。答えを少し更新し、コードにもコメントを追加しました。
SBerg413 2015年

それで、外部ライブラリとすべてをインポートする必要はありませんか?単に単純にgradleファイルにfb sdkを追加しますか?
Kaveesh Kanwal

17

FacebookがMaven CentralでSDKを公開しています:

追加するだけです:

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

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

2
これは正しくありません。リポジトリセクションにmavenCentral()が必要です。
Booger、2016年

1
jcenterはmavenCentralを含みます
Romain

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ファイルで同じです...これを実行すると、それは魅力のように実行されました。


ビルド時にエラーが発生する:パス 'libraries:facebook'のプロジェクトがルートプロジェクトで見つかりませんでした...何かアイデアはありますか?(もちろん、settings.gradleファイルがなくても、Scott Bsソリューションに従ってフォルダを追加しましたか?!(Android Studioで作成されたプロジェクト)
swebal 2013

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
  • sdkをgradleプロジェクトとして追加:settings.gradleを編集して行を追加: include ':facebook-android-sdk:facebook'
  • 依存関係としてsdkをモジュールに追加します。build.gradleを編集し、依存関係ブロック内に追加します。 compile project(':facebook-android-sdk:facebook')

4

私は自分のAndroidアプリにログインを統合するためにfacebook sdk 4.10.0を使用しました。私が従ったチュートリアルは:

FacebookログインAndroid Studio

あなたはfacebbokから姓、名、電子メール、性別、FacebookのIDと誕生日を取得することができます。

上記のチュートリアルでは、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 /
      • |-app /
      • |-ビルド/
      • |-facebook /
  3. これで、Android StudioがFacebookをモジュールとして表示するはずです。

  4. facebookのbuild.gradleをこれに変更します。
    • 提供されるファイル( '../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ファイルを再同期してください、そしてそれはうまくいくはずです!


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ます。


私はすでにこれをしました。それでもエラーを示しています。エラーはfacebookが非ざらざらしているので、コンパイルできないと思います。しかし、よくわかりません
Uma

コンソールからビルドしてみてください:./gradlew clean assemblyDebug
Vladimir


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.