我正在关注Facebook SDK for Android using Android Studio。当我运行我的应用程序时,我收到了下面提到的警告。
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,此过程比下面记录的更简单(这是为两者的早期版本编写的)。如果您正在运行最新版本,那么您需要做的就是:
Ctrl + Shift + Alt + S
打开项目结构,然后选择依赖项选项卡。单击+
按钮并选择Module Dependency。在弹出的新窗口中选择:facebook.
旧版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/页面上“将SDK导入Android Studio项目”下的说明对于基于Gradle的项目是错误的(即您的项目是使用Android Studio的New Project向导构建的和/或具有适用于您的应用程序模块的build.gradle
文件)。请遵循以下说明:
libraries
文件夹。例如,如果您的项目是HelloWorldProject,您将创建一个HelloWorldProject/libraries
文件夹。facebook
目录复制到刚刚创建的libraries
文件夹中。libs
目录中的facebook
文件夹。如果你愿意,删除project.properties
,build.xml
,.classpath
和.project
。文件也是如此。你不需要它们。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插件,那就是你必须编辑的那一行。settings.gradle
文件并添加以下行:
include ':libraries:facebook'
facebook
模块。在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 SDK的Gradle存储库。
dependencies {
compile 'com.facebook.android:facebook-android-sdk:4.4.0'
}
在android studio中使用facebook sdk非常简单,只需在你的gradle中添加以下行
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
并确保您已更新Android支持存储库,如果没有,则使用独立的sdk manger更新它
Facebook确实已将SDK添加到Maven Central存储库中。要使用maven repo的实例配置项目,您需要做两件事:
repositories {
jcenter() // This is the default repo
mavenCentral() // This is the Maven Central repo
}
dependencies {
compile 'com.facebook.android:facebook-android-sdk:4.5.0' // Adjust the version accordingly
// All your other dependencies.
}
您还可以调整特定的Facebook SDK版本。有关maven存储库click this link.中可用版本的列表
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。
git submodule add
https://github.com/facebook/facebook-android-sdk.git
include ':facebook-android-sdk:facebook'
compile
project(':facebook-android-sdk:facebook')
我使用facebook sdk 4.10.0在我的Android应用程序中集成登录。我遵循的教程是:
您将能够从facebbok获取名字,姓氏,电子邮件,性别,脸书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();
}
}
我将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'
}
原帖here。
使用Android Studio 0.8.6的用户可以执行以下操作:
provided files('./libs/bolts.jar')
的文件('../ libs / bolts.jar')
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)到compileSdkVersion 20
或你在app中定义的其他版本
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION to 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>