Использование Facebook SDK в Android-студии
Я слежу за Facebook SDK для Android с помощью 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
12 ответов
НОТА
Для Android Studio 0.5.5 и более поздних версий, а также для более поздних версий Facebook SDK этот процесс намного проще, чем описанный ниже (который был написан для более ранних версий обоих). Если вы используете последнюю версию, все, что вам нужно сделать, это:
- Загрузите Facebook SDK с веб- сайта https://developers.facebook.com/docs/android/
- Распакуйте архив
- В Android Studio 0.5.5 или более поздней версии выберите "Модуль импорта" в меню "Файл".
- В мастере задайте исходный путь модуля для импорта в виде каталога "facebook" внутри распакованного архива. (Примечание. Если вы выберете всю родительскую папку, в нее войдет не только сама библиотека, но и все примеры приложений, каждое в виде отдельного модуля. Это может работать, но, вероятно, не то, что вам нужно).
- Открыть структуру проекта
Ctrl + Shift + Alt + S
и затем выберите вкладку зависимостей. Нажмите на+
Нажмите кнопку и выберите Зависимость модуля. В появившемся окне выберите:facebook.
- Тебе должно быть хорошо идти.
Инструкции для старых Android Studio и старых Facebook SDK
Это относится к Android Studio 0.5.4 и более ранним версиям и имеет смысл для версий SDK Facebook, прежде чем Facebook предложит для сборки файлы сборки Gradle. Я не знаю, в какой версии SDK они внесли это изменение.
Инструкции Facebook в разделе "Импорт SDK в проект Android Studio" на их https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android-using-android-studio/3.0/ неверны для проектов на базе Gradle (т. е. ваш проект был создан с помощью мастера создания проектов Android Studio и / или имеет build.gradle
файл для вашего модуля приложения). Вместо этого следуйте этим инструкциям:
Создать
libraries
папка под основным каталогом вашего проекта. Например, если ваш проект HelloWorldProject, вы должны создатьHelloWorldProject/libraries
папка.Теперь скопируйте весь
facebook
каталог из установки SDK в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, это строка, которую вы должны отредактировать.Убедитесь, что в вашем менеджере SDK установлена библиотека поддержки Android.
Отредактируйте свой
settings.gradle
файл в главном каталоге вашего приложения и добавьте эту строку:include ':libraries:facebook'
Если ваш проект уже открыт в Android Studio, нажмите кнопку "Синхронизировать проект с файлами Gradle" на панели инструментов. Как только это будет сделано,
facebook
модуль должен появиться.- Откройте диалоговое окно "Структура проекта". Выберите "Модули" из списка слева, щелкните модуль вашего приложения, перейдите на вкладку "Зависимости" и нажмите кнопку "+", чтобы добавить новую зависимость.
- Выберите "Зависимость модуля". Откроется диалоговое окно со списком модулей на выбор; выберите ": библиотеки: Facebook".
- Нажмите OK во всех диалоговых окнах. Android Studio автоматически ресинхронизирует ваш проект (без необходимости снова нажимать эту кнопку "Синхронизировать проект с файлами Gradle") и выбирает новую зависимость. Тебе должно быть хорошо идти.
Facebook действительно добавил SDK в репозитории Maven Central. Чтобы настроить ваш проект с использованием экземпляра репозитория Maven, вам нужно сделать 2 вещи:
В ваших проектах файл 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 публикует SDK на Maven Central:
Просто добавь:
repositories {
jcenter() // IntelliJ main repo.
}
dependencies {
compile 'com.facebook.android:facebook-android-sdk:+'
}
Решение Скотта Барты сработало для меня, за исключением того, что мне пришлось добавить их в зависимости моего основного файла 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 и добавьте в блок зависимостей:
compile project(':facebook-android-sdk:facebook')
Я использовал Facebook SDK 4.10.0 для интеграции входа в мое приложение для Android. Учебник, которому я следовал:
Вы сможете получить имя, фамилию, адрес электронной почты, пол, идентификатор Facebook и дату рождения от Facebbok.
Выше учебник также объясняет, как создать приложение в консоли разработчика 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();
}
}
Я развернул Android SDK Facebook в хранилище Sonatype.
Вы можете включить эту библиотеку как зависимость Gradle:
repositories {
maven {
url 'https://oss.sonatype.org/content/groups/public'
}
}
dependencies {
compile 'com.shamanland:facebook-android-sdk:3.15.0-SNAPSHOT'
}
Оригинальный пост здесь.
Я исправил
"Не удалось найти свойство 'ANDROID_BUILD_SDK_VERSION' в проекте ':facebook'."
ошибка на 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>
Люди, использующие Android Studio 0.8.6, могут сделать это:
- Загрузите Facebook-android-sdk-xxx.zip и распакуйте его
Скопируйте ТОЛЬКО каталог Facebook под каталогом Facebook-android-sdk-xxx в ваш проект вместе с приложением /
- ImAnApp /
- | - приложение /
- | - построить /
- | - facebook/
- ImAnApp /
Теперь вы должны увидеть Android Studio, показывающую Facebook как модуль
- Измените build.gradle facebook в это.
- предоставленные файлы ('../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, и он должен работать нормально!
Создайте файл build.gradle в проекте Facebook SDK:
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
,
* Хранилище Gradle для Facebook SDK.
dependencies {
compile 'com.facebook.android:facebook-android-sdk:4.4.0'
}
Использование Facebook SDK в Android Studio довольно просто, просто добавьте следующую строку в ваш Gradle
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
и убедитесь, что вы обновили репозиторий поддержки Android, если нет, то обновите его с помощью sdk manger.