2017-08-08 1 views
0

Ich habe ein Android-Modul wie folgt aufgebaut:Gradle android plugin, wie man verschiedene dynamische bibliothek nach verschiedenen produktaromen kopiert und lädt?

└─product module 
└─src 
    └─main 
     ├─assets 
     │ ├─flavor1 
     │ └─flavor2 
     ├─java 
     └─jniLibs 
      └─armeabi 

I Geschmack flavor1 und flavor2 in Modul build.gradle Datei unter dem Ordner src/main/assets/flavor1/und src/main definieren zwei Produkt namens/asssets/flavour2 sind völlig unterschiedliche dynamische Bibliotheken, zB: libhelper.so. Sie sind für unterschiedliche Produktaromen gedacht.

Meine Absicht ist, verschiedene dynamische Bibliothek je nach Produkt-Geschmack zu JniLibs/Armeabi/Ordner während des Build-Prozesses zu kopieren, ist das eine Möglichkeit, das zu erreichen?

Antwort

0

Sie können eine Sammelaufgabe für dasselbe erstellen.

task copyNativeLibs { 
    Gradle gradle = getGradle() 
    Pattern pattern = Pattern.compile(":assemble(.*?)(Release|Debug)"); 
    Matcher matcher = pattern.matcher(gradle.getStartParameter().getTaskRequests().toString()); 
    def flavor = matcher.group(1) 

    if(flavor == 'flavor1') { 
    copy { 
     from '/yourlibrarypath' 
     into 'src/main/assets/flavor1/ ' 
     } 
    } else if() { 
    .... 
    } 
} 
+0

Vielen Dank für Ihre Lösung. Aber wo sollte ich diese Aufgabe stellen (machen Sie diese Aufgabe, welche Art von Abhängigkeit), so dass es automatisch in der Grappe 'Assembly (. *?) (Release | Debug)' Prozess nach der Produkt-Geschmack ausgewählt werden kann? – andy

+0

Sie können dies in Ihrem build.gradle hinzufügen und am Ende der Datei setzen diese 'project.afterEvaluate { preBuild.dependsOn (copyNativeLibs) }' Dann wird diese Aufgabe im Rahmen montiert * baut ausführen werden. – jitinsharma

+0

Das hat funktioniert! Danke vielmals. – andy

Verwandte Themen