4

In my build.gradle I'm importing Facebook:

compile 'com.facebook.android:facebook-android-sdk:4.6.0'

In my Application class I'm initializing the Facebook SDK:

FacebookSdk.sdkInitialize(getApplicationContext());

In my AndroidManifest.xml:

         <activity
        android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />

    <receiver android:name="com.greenrobot.pirates.HelloFacebookBroadcastReceiver" />

    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/fb_app_id" />

This works with Genymotion. On my device I get an error that it can't inflate the class.

01-01 19:30:02.207    5880-5880/? E/dalvikvm﹕ Could not find class 'com.greenrobot.pirates.Home$19$1', referenced from method com.greenrobot.pirates.Home$19.onCurrentProfileChanged
01-01 19:30:03.604    5880-5880/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.greenrobot.pirates/com.greenrobot.pirates.Home}: android.view.InflateException: Binary XML file line #17: Error inflating class com.facebook.login.widget.LoginButton
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
            at android.app.ActivityThread.access$600(ActivityThread.java:162)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5371)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class com.facebook.login.widget.LoginButton
            at android.view.LayoutInflater.createView(LayoutInflater.java:613)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:281)
            at android.app.Activity.setContentView(Activity.java:1881)
            at com.greenrobot.pirates.Home.setupCreateNewAccount(Home.java:885)
            at com.greenrobot.pirates.Home.checkForUser(Home.java:826)
            at com.greenrobot.pirates.Home.onCreate(Home.java:1171)
            at android.app.Activity.performCreate(Activity.java:5122)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
            at android.app.ActivityThread.access$600(ActivityThread.java:162)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5371)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
            at android.view.LayoutInflater.createView(LayoutInflater.java:587)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:281)
            at android.app.Activity.setContentView(Activity.java:1881)
            at com.greenrobot.pirates.Home.setupCreateNewAccount(Home.java:885)
            at com.greenrobot.pirates.Home.checkForUser(Home.java:826)
            at com.greenrobot.pirates.Home.onCreate(Home.java:1171)
            at android.app.Activity.performCreate(Activity.java:5122)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
            at android.app.ActivityThread.access$600(ActivityThread.java:162)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5371)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NoClassDefFoundError: com.facebook.R$style
            at com.facebook.login.widget.LoginButton.getDefaultStyleResource(LoginButton.java:576)
            at com.facebook.FacebookButtonBase.<init>(FacebookButtonBase.java:64)
            at com.facebook.login.widget.LoginButton.<init>(LoginButton.java:200)
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
            at android.view.LayoutInflater.createView(LayoutInflater.java:587)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:281)
            at android.app.Activity.setContentView(Activity.java:1881)
            at com.greenrobot.pirates.Home.setupCreateNewAccount(Home.java:885)
            at com.greenrobot.pirates.Home.checkForUser(Home.java:826)
            at com.greenrobot.pirates.Home.onCreate(Home.java:1171)
            at android.app.Activity.performCreate(Activity.java:5122)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
            at android.app.ActivityThread.access$600(ActivityThread.java:162)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5371)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            at dalvik.system.NativeStart.main(Native Method)

edit:

The xml file with the login button is:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

 <com.facebook.login.widget.LoginButton
     xmlns:facebook="http://schemas.android.com/apk/res-auto"
    android:id="@+id/login_button"
    android:layout_width="400dp"
    android:layout_height="500dp"
    android:layout_marginBottom="30dp"
    android:layout_marginTop="30dp"
    android:src="@drawable/login_button" />


     </LinearLayout>
Andy
  • 1,815
  • 2
  • 22
  • 49

3 Answers3

4

It turns out I had multidex enabled and it was working on 5.x (emulator) but not 4.x (my device). Once I added the multidex support library it started working properly.

Andy
  • 1,815
  • 2
  • 22
  • 49
  • 1
    I'm having the same problem as yours, could you paste how you gradle file looks like? I enabled multidex with such property: "multiDexEnabled true".. For me it also works good with android 5.x but not with 4.3 – Felipe Mosso Sep 30 '15 at 00:01
  • The same issue for me. I would like do see your build.gradle. Thanks. – Diego Stiehl Oct 03 '15 at 04:03
  • Well. I added `compile 'com.android.support:multidex:1.0.0'`, but it's still not working. – Diego Stiehl Oct 03 '15 at 04:14
  • 3
    Did you add MultiDex.install(this); in your application class? – Andy Oct 04 '15 at 13:26
  • Wow. Great. I haven't. That's working now. Thanks @Andy. – Diego Stiehl Oct 05 '15 at 03:42
  • 2
    Excellent! You should edit your answer to add the entire solution. For me it was adding multiDexEnabled true, adding the compile 'com.android.support:multidex:1.0.1' and adding the MultiDex.install(this); – JoeGalind Nov 11 '15 at 23:14
1

In activity we have to add FacebookSdk.sdkInitialize(getApplicationContext()); before the setContentView(R.layout.YOUR_LAYOUT)

Bahu
  • 1,516
  • 2
  • 28
  • 49
0

It looks like you forget add android:name attribute to the app tag in the manifest file.

  <application
    android:name="{your_app_class}"
Alexey Rogovoy
  • 691
  • 6
  • 13