在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,此过程比下面介绍的过程要简单得多(这是为早期版本编写的)。 如果你正在运行最新的,你需要做的是这样的:
- 从https://developers.facebook.com/docs/android/下载Facebook SDK
- 解压缩存档
- 在Android Studio 0.5.5或更高版本中,从“文件”菜单中select“导入模块”。
- 在向导中,将模块的源path设置为导入为解压缩归档内的“facebook”目录。 (注意:如果select整个父文件夹,它不仅会引入库本身,还会引入所有示例应用程序,每个应用程序作为一个单独的模块,这可能会工作,但可能不是你想要的)。
- 按
Ctrl + Shift + Alt + S
打开项目结构,然后select依赖关系选项卡。 点击+
button,然后select模块依赖项。 在新窗口中select:facebook.
- 你应该很好走。
旧版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
文件)。 请按照这些说明:
-
在项目的主目录下创build一个
libraries
文件夹。 例如,如果你的项目是HelloWorldProject,你可以创build一个HelloWorldProject/libraries
文件夹。 -
现在将整个
facebook
目录从SDK安装复制到刚才创build的libraries
文件夹中。 -
删除
facebook
目录中的libs
文件夹。 如果你喜欢,删除project.properties
,build.xml
,.classpath
和.project
。 文件以及。 你不需要他们。 -
用以下内容在
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插件,那就是你必须编辑的行。 -
确保您的SDKpipe理器中的Android支持库已安装。
-
在您的应用程序主目录中编辑您的
settings.gradle
文件并添加以下行:include ':libraries:facebook'
-
如果您的项目已经在Android Studio中打开,请单击工具栏中的“使用Gradle文件同步项目”button。 一旦完成,
facebook
模块应该出现。 - 打开“项目结构”对话框。 从左边的列表中selectModules,点击你的应用程序的模块,点击Dependencies选项卡,然后点击+button添加一个新的依赖项。
- select“模块依赖”。 它会popup一个对话框,列出可供select的模块; select“:库:脸谱”。
- 在所有对话框上单击确定。 Android Studio会自动重新同步你的项目(不需要再点击“同步项目与Gradle文件”button),并拿起新的依赖关系。 你应该很好走。
Facebook确实已经将SDK添加到Maven Central存储库。 要使用maven repo的实例来configuration你的项目,你需要做两件事情:
-
在您的项目顶级build.gradle文件中,添加Maven Central存储库。 我看起来像这样:
repositories { jcenter() // This is the default repo mavenCentral() // This is the Maven Central repo }
-
在应用程序级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的人可以这样做:
- 下载Facebook-android-sdk-xxx.zip并解压缩
-
在facebook-android-sdk-xxx 目录下复制只有facebook目录到你的项目中,同时app /
- ImAnApp /
- | – app /
- | – 构build/
- | – 脸谱/
- ImAnApp /
-
现在你应该看到Android Studio将facebook作为模块显示
- 修改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
- 提供的文件('../ libs / bolts.jar')
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理器进行更新
- Facebook Graph API – 使用JavaScript上传照片
- 如何触发Facebook像button从自定义button?
- 如何检测Facebook的FB.init何时完成
- XMPP与支持X-FACEBOOK-PLATFORM的Java Asmack库
- Facebook:不安全的JavaScript问题(document.domain值应该是相同的)
- 我可以使用Facebook API设置用户个人资料图片吗?
- 如何在Android上制作Facebook的应用程序新菜单?
- 脸谱图API不工作从2.2到2.3
- Chrome webkit inspector中不断产生“不安全的JavaScript尝试访问带有URL的帧…”错误