在Android studio中使用facebook sdk
我跟在后面。当我运行我的应用程序时,我得到下面提到的警告在Android studio中使用facebook sdk,android,facebook,android-studio,facebook-android-sdk,android-gradle-plugin,Android,Facebook,Android Studio,Facebook Android Sdk,Android Gradle Plugin,我跟在后面。当我运行我的应用程序时,我得到下面提到的警告 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 proj
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
在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')
}
}
apply插件:“android库”
依赖关系{
编译'com.android.support:support-v4:18.0.+'
}
安卓{
编译DK8版
buildToolsVersion“19.0.0”
源集{
主要{
manifest.src文件“AndroidManifest.xml”
java.srcDirs=['src']
resources.srcDirs=['src']
res.srcDirs=['res']
assets.srcDirs=['assets']
}
//将生成类型移动到生成类型/
//例如,build-types/debug/java、build-types/debug/AndroidManifest.xml。。。
//这会将它们移出src/…下的默认位置,这将
//与主源集正在使用的src/冲突。
//应同时添加新的构建类型或产品风格
//通过类似的定制。
setRoot('build-types/debug')
setRoot('build-types/release')
}
}
然后在设置中添加include':libs:facebook'
等于/libs/facebook
(库路径)。gradle
注意
对于AndroidStudio 0.5.5及更高版本,以及Facebook SDK的更高版本,此过程比下面所述的(为这两个版本的早期版本编写的)要简单得多。如果您正在运行最新版本,则只需执行以下操作:
+
按钮并选择模块依赖项。在新窗口弹出窗口中选择:facebook.
旧版Android Studio和旧版Facebook SDK的说明 这适用于Android Studio 0.5.4及更早版本,对于Facebook为发行版提供Gradle构建文件之前的Facebook SDK版本来说最有意义。我不知道他们在SDK的哪个版本中做了这样的更改 Facebook页面上“将SDK导入Android Studio项目”下的说明对于基于Gradle的项目是错误的(即,您的项目是使用Android Studio的新项目向导构建的,并且/或者您的应用程序模块具有
build.Gradle
文件)。请按照以下说明操作:
libraries
文件夹。
例如,如果您的项目是HelloWorldProject,您将创建
一个HelloWorldProject/libraries
文件夹facebook
目录
安装到刚刚创建的库
文件夹中facebook
目录中的libs
文件夹。如果你愿意,
删除project.properties
、build.xml
、.classpath
和.project
。还有文件。你不需要它们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插件,那就是你必须编辑的那一行设置.gradle
文件
并添加以下行:
include ':libraries:facebook'
facebook
模块。
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子模块添加 https://github.com/facebook/facebook-android-sdk.git
- 将sdk添加为gradle项目:编辑settings.gradle并添加行:
include':facebook安卓sdk:facebook'
- 将sdk作为依赖项添加到模块:编辑build.gradle并在其中添加
依赖项块:
编译 项目(“:facebook android sdk:facebook”)
repositories {
maven {
url 'https://oss.sonatype.org/content/groups/public'
}
}
dependencies {
compile 'com.shamanland:facebook-android-sdk:3.15.0-SNAPSHOT'
}
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']
}
}
}
repositories {
jcenter() // IntelliJ main repo.
}
dependencies {
compile 'com.facebook.android:facebook-android-sdk:+'
}
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.
}
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>
dependencies {
compile 'com.facebook.android:facebook-android-sdk:4.4.0'
}
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
repositories {
mavenCentral()
}
compile 'com.facebook.android:facebook-android-sdk:4.10.0'
<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" />
<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>
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();
}
}