com.facebook.FacebookActivity的ClassNotFoundException

dev*_*hik 11 apache-flex android facebook facebook-android-sdk

我想将Facebook的Android SDK(v4.11)集成到我的Android应用程序中,由于flex-sdk依赖性,我的最终apk是通过Flash Builder编译的.

不幸的是,当我的应用程序试图创建初始化Facebook的相关活动时,我在堆栈跟踪中得到了一个ClassNotFoundExceptionfor com.facebook.FacebookActivity.

我在我的Android源代码和依赖项的Native Extension中包含了classes.jar.在使用Android SDK构建工具中的dexdump通过以下命令反编译最终.apk中的classes.dex文件:

./dexdump classes.dex | grep 'Class descriptor'
Run Code Online (Sandbox Code Playgroud)

我能够看到

Class descriptor  : 'Lcom/facebook/FacebookActivity;'
Run Code Online (Sandbox Code Playgroud)

这表明FacebookActivity.class 在.apk中打包和编译.

我还将所有Facebook-sdk资源和我的项目资源捆绑在我的原生扩展中的res文件夹中(这是我第一次在本机扩展中包含我自己的第三方资源).

我的onCreate()代码初始化了Facebook-SDK:

FacebookSdk.sdkInitialize(getApplicationContext()); //throws the ClassNotFoundException
 AppEventsLogger.activateApp(this);
Run Code Online (Sandbox Code Playgroud)

AndroidManisfest.xml根据Facebook文档我的条目:

<meta-data android:name="com.facebook.sdk.ApplicationId"
                   android:value="@string/facebook_app_id"/>
    <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
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <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" />
            </intent-filter>
        </activity>
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

编辑:

我现在使用版本4.12,结果没有变化.

另外,这是我的build.gradle条目:(虽然这不会影响flex包装,因为我必须在facebook sdk JAR上使用ziptree).

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
        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑2:

这是我的自定义gradle任务,我用它来打包已编译的依赖项和源类:

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")
        from(zipTree("/$USER_HOME/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-android/1.4.0/cc174c559b5177982887bf6e1b76003aebad9516/bolts-android-1.4.0.jar"))
        from(zipTree("/$USER_HOME/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-applinks/1.4.0/8ad21bf21784dacce5f2043afb97218cc377e835/bolts-applinks-1.4.0.jar"))
        from(zipTree("/$USER_HOME/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-tasks/1.4.0/d85884acf6810a3bbbecb587f239005cbc846dc4/bolts-tasks-1.4.0.jar"))
        //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)
Run Code Online (Sandbox Code Playgroud)

Che*_*byr 0

从提供的信息来看,您似乎已将包名称“com.facebook”用于您的自定义应用程序。但是,这可能与 facebook sdk 使用的“com.facebook”包冲突。

请更改您的包名称并尝试。