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
AppEventsLogger.activateApp(this);
My AndroidManisfest.xml
entries as per Facebook-documentation:
<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>
Am I missing something here?
EDIT:
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
}
}
EDIT 2:
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")
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)
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With