2016-11-23 7 views
8

In einer Android-App muss ich ein bestimmtes SDK für ein bestimmtes Peripheriegerät verwenden.Verschiedene Bibliotheken/Importe je nach Build-Typ

Alles funktioniert mit einer einzigen Build-Variante fein:

provided fileTree(include: ['peripheral.jar'], dir: 'libs') 
compile fileTree(exclude: ['peripheral.jar'], dir: 'libs') 

Das Problem ist, dass das SDK auf einer gemeinsam genutzten Bibliothek in der eigentlichen Peripherie installiert beruht. Wenn ich versuche, die App auf einem anderen Android-Gerät zu installieren (zum Debuggen der restlichen Funktionen), bekomme ich einen INSTALL_FAILED_MISSING_SHARED_LIBRARY Fehler.

Ich glaube, ich zwei Build-Varianten verwenden:

  • release, dass verwendet das SDK
  • debug, die nicht das SDK nicht verwendet

Ich habe versucht, mit dem SDK Nur in der release Build-Typ:

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

Aber dann kann ich das Projekt wegen der fehlenden Importe nicht kompilieren.

So dupliziert ich die einzige Klasse, die diese Einfuhren verwendet:

In main/java/package/PeripheralManager.java:

public class ScannerManager { 
    // fake 
} 

In release/java/package/PeripheralManager.java:

import peripheral; <- IT FAILS WHEN COMPILING 

public class ScannerManager { 
    // real code 
} 

Keine zählt die Art Build wählte ich, kann ich Kompilieren Sie das Projekt nicht, wenn der Import nicht in einer der Varianten gelöst ist ...

+0

Können Sie multidex versuchen, um Duplikate zu vermeiden. –

+0

Ich habe das noch nie zuvor benutzt. Denken Sie, dass dies nicht mit Build-Typen gelöst werden kann? – thelawnmowerman

+0

Hoffe, es wird helfen, darf ich die Antwort hier teilen? –

Antwort

4

Ich löste es schließlich mit Aromen. Das Problem bestand darin, dieselbe Klasse in den Ordnern main und release zu duplizieren. Das können wir nicht tun. Stattdessen musste ich es zum Beispiel in debug und release oder und flavour2 (eins mit den Importen und das andere ohne sie) kopieren und aus main entfernen. Dann kann ich wählen, was zu kompilieren und alles funktioniert.

Danke trotzdem für Ihre Hilfe, + MohanRaj!

2

Bitte versuchen Sie dies auf Ihrem Modul build.gradle Datei, hier mein Code, lassen Sie mich bitte Ihr Feedback wissen.Vielen Dank im Voraus.

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---- 
} 
} 
+0

Möglicherweise haben Sie die Verpackungsoptionen für Ihr Problem anpassen. –

Verwandte Themen