在android studio中使用Facebook的SDK

我正在关注使用Android Studio的Android SDK的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. 

我应该如何解决这个问题? 提前致谢!

UPDATE1:

我试了@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或更高版本中,从“文件”菜单中select“导入模块”。
  4. 在向导中,将模块的源path设置为导入为解压缩归档内的“facebook”目录。 (注意:如果select整个父文件夹,它不仅会引入库本身,还会引入所有示例应用程序,每个应用程序作为一个单独的模块,这可能会工作,但可能不是你想要的)。
  5. Ctrl + Shift + Alt + S打开项目结构,然后select依赖关系选项卡。 点击+button,然后select模块依赖项。 在新窗口中select:facebook.
  6. 你应该很好走。

旧版Android Studio和旧版Facebook SDK的说明

这适用于Android Studio 0.5.4及更早版本,在Facebook提供Gradle构build文件以供分发之前,对Facebook SDK的版本最有意义。 我不知道他们在哪个版本的SDK中进行了更改。

https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/页面上的“将SDK导入到Android Studio项目”下的Facebook说明是错误的对于基于Gradle的项目(例如,您的项目是使用Android Studio的新build项目向导构build的,并且/或者您的应用程序模块具有build.gradle文件)。 请按照这些说明:

  1. 在项目的主目录下创build一个libraries文件夹。 例如,如果你的项目是HelloWorldProject,你可以创build一个HelloWorldProject/libraries文件夹。

  2. 现在将整个facebook目录从SDK安装复制到刚才创build的libraries文件夹中。

  3. 删除facebook目录中的libs文件夹。 如果你喜欢,删除project.propertiesbuild.xml.classpath.project 。 文件以及。 你不需要他们。

  4. 用以下内容在facebook目录中创build一个build.gradle文件:

     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. 确保您的SDKpipe理器中的Android支持库已安装。

  6. 在您的应用程序主目录中编辑您的settings.gradle文件并添加以下行:

     include ':libraries:facebook' 
  7. 如果您的项目已经在Android Studio中打开,请单击工具栏中的“使用Gradle文件同步项目”button。 一旦完成, facebook模块应该出现。 在这里输入图像描述

  8. 打开“项目结构”对话框。 从左边的列表中selectModules,点击你的应用程序的模块,点击Dependencies选项卡,然后点击+button添加一个新的依赖项。 在这里输入图像描述
  9. select“模块依赖”。 它会popup一个对话框,列出可供select的模块; select“:库:脸谱”。 在这里输入图像描述
  10. 在所有对话框上单击确定。 Android Studio会自动重新同步你的项目(不需要再点击“同步项目与Gradle文件”button),并拿起新的依赖关系。 你应该很好走。

Facebook确实已经将SDK添加到Maven Central存储库。 要使用maven repo的实例来configuration你的项目,你需要做两件事情:

  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存储库中可用版本的列表,请单击此链接。

Facebook在Maven中心发布SDK:

只需添加:

 repositories { jcenter() // IntelliJ main repo. } dependencies { compile 'com.facebook.android:facebook-android-sdk:+' } 

Scott Barta的解决scheme为我工作,除了我不得不将这些添加到我的主要项目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
  • 添加sdk作为gradle项目:编辑settings.gradle并添加行: include ':facebook-android-sdk:facebook'
  • 将sdk作为依赖关系添加到模块中:编辑build.gradle并在依赖关系中添加block: compile project(':facebook-android-sdk:facebook')

我将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应用程序的Facebooklogin。 我正在使用以下链接参考: Facebookloginandroid工作室

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(); } } 

使用Android Studio 0.8.6的人可以这样做:

  1. 下载Facebook-android-sdk-xxx.zip并解压缩
  2. 在facebook-android-sdk-xxx 目录下复制只有facebook目录到你的项目中,同时app /

    • ImAnApp /
      • | – app /
      • | – 构build/
      • | – 脸谱/
  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文件,它应该工作正常!

我修好了

“在项目”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

在facebook sdk项目中创buildbuild.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') } } 

然后在settings.gradle添加include ':libs:facebook' <project_directory>/libs/facebook (库的path)。

* Facebook SDK的Gradle仓库。

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

search最新版本的facebook sdk

在android studio中使用facebook sdk非常简单,只需在你的gradle中添加以下代码即可

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

并确保您已经更新Android支持存储库,如果没有,那么使用独立的sdkpipe理器进行更新