Home » Android » android – ClassNotFoundException for com.facebook.FacebookActivity

android – ClassNotFoundException for com.facebook.FacebookActivity

Posted by: admin May 14, 2020 Leave a comment


I want to integrate Facebook’s Android SDK (v4.11) into my Android app and my final apk is compiled via Flash Builder because of flex-sdk dependencies.

Unfortunately, I am getting a ClassNotFoundException for com.facebook.FacebookActivity in my stack-trace when my app tries to create the concerned Activity that initialises Facebook.

I have included the classes.jar in the Native Extension for my Android source code and dependencies. On decompiling the classes.dex file in the final .apk using dexdump from Android SDK build-tools via the following command:

./dexdump classes.dex | grep 'Class descriptor'

I am able to see

Class descriptor  : 'Lcom/facebook/FacebookActivity;'

which indicates that FacebookActivity.class has been packaged and compiled in the .apk.

I also bundled all Facebook-sdk resources along with my project’s resources in the res folder in my native extension (this is the first time I had to include third-party resources with my own in a native extension).

My onCreate() code which initialises the Facebook-SDK:

FacebookSdk.sdkInitialize(getApplicationContext()); //throws the ClassNotFoundException

My AndroidManisfest.xml entries as per Facebook-documentation:

<meta-data android:name="com.facebook.sdk.ApplicationId"
    <activity android:name="com.facebook.FacebookActivity"
                  android:label="@string/app_name" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />

Am I missing something here?


I am using version 4.12 now with no change in results.

Also, here is my build.gradle entry: (Although that does not effect flex packaging much, as I have to use ziptree on the facebook sdk JAR).

dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile "com.android.support:support-v4:23.0.+"
        compile 'com.facebook.android:facebook-android-sdk:[4,5)'
         * newer cardview has compatibility issues with android-sdk default styles.
        compile('com.android.support:cardview-v7:23.2.0') {
            force = true


Here’s my custom gradle task which I am using to package the compiled dependencies and source classes:

task fatJar(type: Jar) {
        //external libariries - their jars containing compiled classes obtained from the .idea -> libraries -> <libName>.xml file
        from (zipTree("build/intermediates/exploded-aar/com.android.support/support-v4/23.2.0/jars/classes.jar"))
        from (zipTree("build/intermediates/exploded-aar/com.android.support/cardview-v7/23.2.0/jars/classes.jar"))
        from ("build/intermediates/exploded-aar/com.android.support/cardview-v7/23.2.0/res")
        from (zipTree("build/intermediates/exploded-aar/com.android.support/customtabs/23.4.0/jars/classes.jar"))
        from ("build/intermediates/exploded-aar/com.android.support/customtabs/23.4.0/res")
        from (zipTree("build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.12.1/jars/classes.jar"))
//        from ("build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.12.0/res")
        //soucre code
        from ('build/intermediates/classes/release/') {
            exclude '**/BuildConfig.class'
            exclude '**/R$*.class'
            exclude '**/R.class'
        //jar name and destination directory
        archiveName = "src_and_dependencies.jar"
        destinationDir = file("/$USER_HOME/Ane/build/ane/Android-ARM")

    //before running fatJar task, the old jar should be deleted and the project should be re-built
    fatJar.dependsOn(clearJar, build)
How to&Answers:

From the information provided it appears that you have used the package name ‘com.facebook’ for your custom application. However, this might conflict with the ‘com.facebook’ package used by the facebook sdk.

Please change your package name and try.


Add the dependency into your build.gradle file

dependencies {
    compile 'com.facebook.android:facebook-android-sdk:4.12.0'

or you can use the .jar, this is the way for exporting:

go to Project > Properties > Java Build Path > Order and Export and click on jar’s checkbox.


Probably you are having duplicate Facebook libraries, one path through Facebook SDK jar file in libs folder and the other through the gradle Facebook reprository cache.

You can skip the compile 'com.facebook.android:facebook-android-sdk:[4,5)' altogether and use compile project(':libs:facebook') instead.


Add this line to your proguard file

-keep class com.facebook.FacebookActivity { 
    public *; 


It must have exceded the infamous 64k method limit, you need to enable your app for multidex. Here is how you do it. https://developer.android.com/tools/building/multidex.html


One possibility is, you will need to move the following to onresume instead of onCreate() :

FacebookSdk. sdkinitialize     

It solved my problem before.


try this:

    protected void onCreate(Bundle savedInstanceState) {

    callbackManager = CallbackManager.Factory.create();
    loginManager = LoginManager.getInstance();
    List<String> permissionNeeds = Arrays.asList("publish_actions");


protected void onResume() {

    AppEventsLogger.activateApp(this,"{your facebook app id}");

And of course do not forget:

  private FacebookCallback<Sharer.Result> shareCallback = new FacebookCallback<Sharer.Result>() {
    public void onCancel() {
        Log.d("HelloFacebook", "Canceled");

    public void onError(FacebookException error) {
        Log.d("HelloFacebook", String.format("Error: %s", error.toString()));
        String title = "error";
        String alertMessage = error.getMessage();
        showResult(title, alertMessage);

    public void onSuccess(Sharer.Result result) {
        Log.d("HelloFacebook", "Success!");
        if (result.getPostId() != null) {
            String title ="success";
            String id = result.getPostId();
            String alertMessage ="successfully_posted_post, id";
            showResult(title, alertMessage);

    private void showResult(String title, String alertMessage) {
        new AlertDialog.Builder(MainActivity.this)
                .setPositiveButton("ok", null)