2015-06-23 9 views
5

Ho un'applicazione Android che utilizza una libreria JNI nativa. Lo metto in app/src/main/jniLibs/armeabi-v7a senza alcuna configurazione gradle e lo studio Android lo impacchetta felicemente nell'APK.Android Studio crea una variante/tipo di build escludendo jniLibs?

Ho un requisito in cui tutte le librerie native non possono essere raggruppate con una certa distribuzione. È possibile creare una variante di build o un tipo di build che esclude semplicemente tutte le librerie native (forse anche il nome .so).

Il fatto che la libreria nativa manchi in questa distribuzione non ha importanza perché non viene utilizzato. L'alternativa è rimuovere fisicamente i file, eseguire la build, reinserirli. Tuttavia, questo è doloroso e soggetto a errori.

+0

pls pubblica il tuo 'build.gradle' – user2450263

risposta

2

Dal tuo build.gradle, potremmo essere in grado di sapere che cosa deve essere fatto con precisione.

Ho utilizzato productFlavours, combinato con flavorDimensions per implementare build che possono includere o meno librerie jni.

Da quello che ho capito, il succo è: productFlavors consentire di avere n varianti di x, y ... tipo, aggiungendo flavorDimensions consentirebbe di avere n varianti di tipo xy.

Es. All'interno build.gradle,

flavorDimensions "abi", "version" //this is what can help you build with/w/o jni libraries 

    productFlavors { 
     devel { 
      flavorDimension "abi" //keep a dimension common with arm, armv7 
      applicationId "com.packagename.dev" 
     } 
     prod { 
     flavorDimension "version" 
    // this would be your build w/o the ndk support then 
      applicationId "com.packageName" 
     } 
     armv7 { 
      ndk { 
       flavorDimension "abi" 
       abiFilter "armeabi-v7a" 
      } 
     } 
     arm { 
      ndk { 
       flavorDimension "abi" 
       abiFilter "armeabi" 
      } 
     } 

    }  

Come si può vedere, si avrà molteplici varianti di build, sapori di prodotti a seconda flavorDimension.

prod sapore sarebbe una variante di costruzione o il tipo che esclude semplicemente tutte le librerie native

Fonti per argomenti NDK, jniLibs, buildFlavours costruire ...:
- Mastering "Product Flavors" on Android
- ndk-with-android-studio
- multi flavor setup

+0

Questa è una risposta perfetta (e funziona). Sfortunatamente è stato appena chiarito che abbiamo bisogno di 'libxwalkcore.so' ma non di' libeposprint.so'. Posso escludere selettivamente i file? –

+0

contento che abbia aiutato, da quello che ho visto, non so come farlo. Non sembra probabile che possa essere fatto, spero comunque che ci sia un modo! – user2450263

+0

@ user2450263 - È possibile scambiare risorse jniLibs in base ai gusti di build? http://stackoverflow.com/questions/31687547/gradle-swap-jnilibs-resources-based-on-build-flavor .. Molto apprezzato !! – user2511882

Problemi correlati