2017-07-04 3 views
0

Dans mes projets, j'ai besoin d'importer un fichier jar tiers et un SDK Facebook.Exclure un fichier de classe dans Gradle Android Studio

compile files('libs/SkinSDK.jar') 
compile 'com.facebook.android:facebook-android-sdk:4.14.0' 

Les deux incluent la même classe BundleJSONConverter. Donc, je ne peux pas générer un APK signé. Il montre toujours l'entrée dupliquée com/facebook/interne/BundleJSONConverter. Donc, je veux exclure dans Facebook ou SkinSDK.jar. J'ai essayé comme

compile ('com.facebook.android:facebook-android-sdk:4.14.0') { 
    exclude group: 'com.facebook.internal', module: 'BundleJSONConverter' 
} 

Il ne fonctionne pas et montrant la même erreur.

Répondre

0

La méthode exclude de la fermeture de la configuration pour une dépendance exclut les dépendances transitives. Ainsi, si la dépendance de votre module dépend d'autres modules, vous pouvez les exclure de votre build. Vous pouvez vérifier les dépendances transitives du module 'com.facebook.android:facebook-android-sdk:4.14.0' sur son Maven repository info page.

Si la classe BundleJSONConverter existe dans une dépendance transitive, vous pouvez exclure le module spécifique de la même manière que vous tentez actuellement. Il suffit de spécifier le group, le module et le version, comme vous le faites pour les dépendances.

Si vous voulez simplement exclure une classe pour un jar de dépendance, jetez un oeil à l'outil jar jar links et à son plugin Gradle. Il vous permet de modifier les bocaux inclus, par ex. pour changer de paquet ou supprimer des classes.

Le (shortened) example suivant montre l'utilisation du plug-in et quelques méthodes pour modifier le pot de dépendance:

compile jarjar.repackage { 
    from 'org.apache.hive:hive-exec:0.13.0.2.1.5.0-695' 

    archiveBypass "commons*.jar" 
    archiveExclude "slf4j*.jar" 

    classDelete "org.apache.thrift.**" 
    classRename 'org.json.**', '[email protected]' 
} 
1

tombai sur la même situation. Voilà ce que je l'ai fait, pas élégant comme je l'espérais, mais cela fonctionne:

  1. Renommez le fichier jar (SkinSDK.jar dans votre cas): au lieu de .jar .zip

  2. Go « à l'intérieur "le fichier zip (j'utilise DoubleCommander, il existe de nombreux autres utilitaires pour cela), ou l'extraire dans un dossier temporaire.

  3. Supprimez la classe dupliquée à l'origine du problème. Aller "en dehors" du fichier zip.

  4. Renommez (ou réemballez) le fichier de .zip à .jar. Compiler.

... Espérons que cela fonctionne

+1

Pour raccourcir cette procédure: Il n'y a pas besoin de renommer ou remballer l'archive. Tout fichier 'jar' est un fichier' zip', vous devriez pouvoir l'ouvrir avec divers outils (par exemple 7-zip). –

+1

Veuillez également documenter ce changement de fichier 'jar'! Sinon, vous rencontrerez des problèmes lors de la mise à jour de la bibliothèque externe. –