использование Facebook sdk в Android studio
Я 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 и более ранним версиям, и имеет наибольший смысл для версий Facebook SDK до того, как 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, вы должны создать а .теперь скопируйте все
libraries
папку, которую вы только что создали.удалить . Если вы любите, удалите
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, это строка, которую вы придется редактировать.убедитесь, что Библиотека Поддержки Android в вашем SDK manager установлен.
редактировать
settings.gradle
файл в главном каталоге вашего приложения и добавьте эту строку:include ':libraries:facebook'
если ваш проект уже открыт в Android Studio, нажмите кнопку "Синхронизировать проект с файлами Gradle" на панели инструментов. Как только это будет сделано, должны появиться.
- откройте диалоговое окно структура проекта. Выберите модули слева список, нажмите на модуль вашего приложения, нажмите на зависимости перейдите на вкладку и нажмите кнопку+, чтобы добавить новую зависимость.
- выбрать "Зависимость от модуля". Он вызовет диалоговое окно со списком модули на выбор; выберите ": библиотеки: facebook".
- Нажмите кнопку ОК все диалоги. В Android Studio автоматически синхронизировать ваш проект (что делает ненужным снова нажать кнопку "Синхронизировать проект с файлами Gradle") и возьмите новую зависимость. Ты должен быть готов к отъезду.
Facebook действительно добавил SDK в центральные репозитории Maven. Чтобы настроить свой проект с помощью экземпляра репозитория maven, вам нужно будет сделать 2 вещи:
в проекте сборка верхнего уровня.gradle файл, добавьте центральные репозитории Maven. Мой выглядит так:
repositories { jcenter() // This is the default repo mavenCentral() // This is the Maven Central repo }
на сборка на уровне приложения.класс Файл, Добавить 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:+' }
решение Скотта Барты работало для меня, за исключением того, что мне пришлось добавить их к зависимостям моей основной сборки проекта.файл gradle:
compile files('libs/android-support-v4.jar') compile project(':libraries:facebook')
также стоит упомянуть, что вам нужно убедиться:
android { compileSdkVersion 18 buildToolsVersion "18.1.1" defaultConfig { minSdkVersion 7 targetSdkVersion 18 }
одинаковы в обеих сборках.файлы gradle...Как только я это сделал, он побежал как заклинание.
при использовании git вы можете легко включить новейший facebook-android-sdk.
- добавить facebook-android-sdk в качестве подмодуля:
git submodule add https://github.com/facebook/facebook-android-sdk.git
- добавить sdk в качестве проекта gradle: изменить настройки.gradle и добавить строку:
include ':facebook-android-sdk:facebook'
- добавить sdk как зависимость от модуля: редактировать сборку.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(); } }
я развернул 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 Studio 0.8.6, могут сделать это:
- скачать Facebook-android-sdk-xxx.zip & распаковать его
скопировать только facebook dir под Facebook-android-sdk-xxx dir в ваш проект вместе с приложением/
- ImAnApp/
- / -- app/
- / -- build/
- |-- facebook/
теперь вы должны увидеть Android Studio показ facebook в качестве модуля
- изменить построение.град facebook в этом.
- предоставленные файлы('../библиотеки/болты.jar') до
provided files('./libs/bolts.jar')
- compileSdkVersion целое.parseInt(проект.ANDROID_BUILD_SDK_VERSION) до
compileSdkVersion 20
или другая версия, которую вы определили в приложении- проект buildToolsVersion.ANDROID_BUILD_TOOLS_VERSION to
buildToolsVersion '20.0.0'
- minSdkVersion Целое число.parseInt(проект.ANDROID_BUILD_MIN_SDK_VERSION) до
minSdkVersion 14
- targetSdkVersion целое.parseInt(проект.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'] } } }
Resync ваш gradle файл и он должен просто работать нормально!
я исправил
"не удалось найти свойство '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>
создать строить.файл 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
.