ClassNotFoundException para com.facebook.FacebookActivity

Quiero integrar el SDK de Android de Facebook (v4.11) en mi aplicación de Android y mi apk final se compila a través de Flash Builder debido a las dependencias de flex-sdk.

Desafortunadamente, estoy obteniendo una ClassNotFoundException para com.facebook.FacebookActivity en mi stack-trace cuando mi aplicación intenta crear la actividad concernida que inicializa a Facebook.

He incluido las clases.jar en la Extensión nativa para mi código fuente y dependencias de Android. Al descompilar el archivo classes.dex en la final .apk usando dexdump desde Android SDK build-tools a través del siguiente comando:

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

Puedo ver

 Class descriptor : 'Lcom/facebook/FacebookActivity;' 

Que indica que FacebookActivity.class se ha empaquetado y compilado en el .apk.

También incluí todos los recursos de Facebook-sdk junto con los recursos de mi proyecto en la carpeta res de mi extensión nativa (esta es la primera vez que tengo que incluir recursos de terceros con mi propio en una extensión nativa).

Mi código onCreate() que inicializa el Facebook-SDK:

 FacebookSdk.sdkInitialize(getApplicationContext()); //throws the ClassNotFoundException AppEventsLogger.activateApp(this); 

Mis entradas de AndroidManisfest.xml según la documentación de 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> 

¿Me estoy perdiendo de algo?

EDITAR:

Estoy usando la versión 4.12 ahora sin cambios en los resultados.

También, aquí está mi entrada de build.gradle: (Aunque eso no afecta el empaquetado de la flexión mucho, pues tengo que utilizar ziptree en el JAR del sdk del facebook).

 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:

Esta es mi tarea de gradle personalizada que estoy usando para empaquetar las dependencias compiladas y las clases de código fuente:

 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) 

6 Solutions collect form web for “ClassNotFoundException para com.facebook.FacebookActivity”

De la información proporcionada aparece que usted ha utilizado el nombre del paquete 'com.facebook' para su uso de encargo. Sin embargo, esto podría entrar en conflicto con el paquete 'com.facebook' utilizado por el sdk de Facebook.

Por favor, cambie el nombre del paquete y pruebe.

Agregue la dependencia en su archivo build.gradle

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

O puede utilizar el .jar, esta es la forma de exportar:

Java Build Path a Project > Properties > Java Build Path > Order and Export y haga clic en la casilla de verificación de jar.

Probablemente usted está teniendo bibliotecas duplicadas de Facebook, una ruta a través de archivo SDK jar de Facebook en la carpeta de librerías y la otra a través de la caché grados Facebook reprository.

Puede omitir la compile 'com.facebook.android:facebook-android-sdk:[4,5)' y usar el compile project(':libs:facebook') .

Añada esta línea a su archivo proguard

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

Debe haber superado el infame límite de 64k método, es necesario habilitar su aplicación para multidex. Aquí es cómo lo haces. https://developer.android.com/tools/building/multidex.html

Una posibilidad es, necesitará mover lo siguiente a onresume en lugar de onCreate ():

 FacebookSdk. sdkinitialize (getApplicationContext(); Apparentlyogger.activateApp(this); 

Resolvió mi problema antes.

EDITAR

prueba esto:

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_main); callbackManager = CallbackManager.Factory.create(); loginManager = LoginManager.getInstance(); List<String> permissionNeeds = Arrays.asList("publish_actions"); } @Override protected void onResume() { super.onResume(); AppEventsLogger.activateApp(this,"{your facebook app id}"); } 

Y por supuesto no lo olvides:

  private FacebookCallback<Sharer.Result> shareCallback = new FacebookCallback<Sharer.Result>() { @Override public void onCancel() { Log.d("HelloFacebook", "Canceled"); } @Override public void onError(FacebookException error) { Log.d("HelloFacebook", String.format("Error: %s", error.toString())); String title = "error"; String alertMessage = error.getMessage(); showResult(title, alertMessage); } @Override 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) .setTitle(title) .setMessage(alertMessage) .setPositiveButton("ok", null) .show(); } }; 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.