Différentes bibliothèques / importations selon le type de construction

Dans une application Android, je dois utiliser un SDK spécifique pour un certain périphérique.

Tout fonctionne bien avec une seule variante de construction:

  • Comment référencer d'autres vues dans Anko DSL?
  • OptionsMenu de Fragments dans Viewpager montrant les Boutons de l'autre
  • Okhttp actualise le jeton expiré lorsque plusieurs demandes sont envoyées au serveur
  • Quelle est la meilleure façon d'appeler StartPreview () après la capture d'une image?
  • Impossible de convertir @ drawable / in drawable
  • Un TextView peut-il être sélectionné et contenir des liens?
  • provided fileTree(include: ['peripheral.jar'], dir: 'libs') compile fileTree(exclude: ['peripheral.jar'], dir: 'libs') 

    Le problème est que le SDK repose sur une bibliothèque partagée installée dans le périphérique réel. Si j'essaie d'installer l'application dans n'importe quel autre appareil Android (à des fins de débogage du reste des fonctionnalités), je reçois une erreur INSTALL_FAILED_MISSING_SHARED_LIBRARY .

    Je pense que je pourrais utiliser deux variantes de construction:

    • release , qui utilise le SDK
    • debug , qui n'utilise pas le SDK

    J'ai essayé d'inclure le SDK uniquement dans le type de release version:

     releaseProvided fileTree(include: ['peripheral.jar'], dir: 'libs') releaseCompile fileTree(exclude: ['peripheral.jar'], dir: 'libs') 

    Mais alors, je ne peux pas compiler le projet en raison des importations manquantes.

    J'ai donc dupliqué la seule classe qui utilise ces importations:

    Dans main/java/package/PeripheralManager.java :

     public class ScannerManager { // fake } 

    Dans release/java/package/PeripheralManager.java :

     import peripheral; <- IT FAILS WHEN COMPILING public class ScannerManager { // real code } 

    Pas le type de construction que j'ai choisi, je ne peux pas compiler le projet si l'importation n'est pas résolue dans l'une des variantes …

  • Trouvé com.google.android.gms: play-services: 8.4.0, mais la version 8.3.0 est nécessaire pour le plugin Google Services
  • Eclipse dit que mon (s) projet (s) Android contient (s) erreurs, mais il n'y en a pas
  • Erreur avec Joda-Time dans Android: l'identifiant de zone de date "America / New_York" n'est pas reconnu
  • Style de la barre d'outils Android Spinner
  • Possibilité d'utiliser plusieurs autorités avec FileProvider?
  • La méthode ArrayList.clear () libère-t-elle la mémoire?
  • 2 Solutions collect form web for “Différentes bibliothèques / importations selon le type de construction”

    Je l'ai finalement résolu avec des saveurs. Le problème était d'essayer de dupliquer la même classe dans les dossiers main et de release . Nous ne pouvons pas le faire. Au lieu de cela, je devais le dupliquer dans, par exemple, debug et release , ou flavour1 et flavour2 (l'un avec les importations et l'autre sans eux) et l'enlever du main . Ensuite, je peux choisir ce qu'il faut compiler et tout fonctionne.

    Merci de toute façon pour votre aide, + MohanRaj!

    Essayez ceci sur votre fichier build.gradle de module, ici mon code, veuillez me faire connaître vos commentaires. Merci d'avance.

    Build.gradle

     android { defaultConfig { ----some stuff--- multiDexEnabled true } packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/maven/ch.acra/acra/pom.xml' exclude 'META-INF/maven/ch.acra/acra/pom.properties' } buildTypes { release { --some stuff---- } debug { } } dexOptions { javaMaxHeapSize "2g" } } } } dependencies { --some stuff---- } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.