2016-03-15 15 views
6

Im affrontare questo problema che sembra im non in grado di risolvere. Ecco lo scenario:Dipendenza gradle per architettura specifica con divisioni ABI

Im apk di costruzione che utilizza dipendenza gradle e questa dipendenza è specifica dell'architettura quindi per apk per x86 ho bisogno di dipendenza diversa e anche per braccio differente.

ho risolto con i sapori di prodotto:

productFlavors { 

    dev { ... } 
    develx86 { ... } 
    production { ... } 
    productionx86 { ... } 

} 

Allora ho definito dipendenza come questo:

develCompile 'dependency_for_arm' 
develx86Compile 'dependency_for_x86' 

Questo funziona bene. Ma di recente ho dovuto aggiungere alla mia applicazione un uso di renderscript. L'ho fatto in questo modo:

renderscriptTargetApi 22 
renderscriptSupportModeEnabled true 

E dopo questo quando ho caricato apk su Google Play dice che è apk è adatto con il braccio, x86. Non so come sia possibile. Come puoi pensare, si bloccherà sul dispositivo con CPU diverse (se ho generato apk per arm e l'utente lo eseguirà su app x86 si bloccherà).

Così ho decited utilizzare ABI divide:

splits { 
     abi { 
      enable true 
      reset() 
      include 'armeabi', 'x86' 
      universalApk false 
     } 
    } 

//Ensures architecture specific APKs have a higher version code 
//(otherwise an x86 build would end up using the arm build, which x86 devices can run) 
ext.versionCodes = [armeabi:0, x86:1] 

import com.android.build.OutputFile 

android.applicationVariants.all { variant -> 
    // assign different version code for each output 
    variant.outputs.each { output -> 
     int abiVersionCode = project.ext.versionCodes.get(output.getFilter(OutputFile.ABI)) ?: 0 
     output.versionCodeOverride = android.defaultConfig.versionCode + abiVersionCode 
    } 

Ma ora quando vedo file APK generati, la mia dipendenza che è -specific sapore non è incluso nella apk e apk sarà in crash quando ho aperto la sezione che utilizza API da questa dipendenza.

Qualcuno sa come risolvere questo problema? O qualcuno sa perché Google Play dice che l'apk è per entrambe le architetture quando ho incluso il rendering? (Senza di esso funziona correttamente ma ho bisogno di render).

Grazie per il vostro tempo. Apprezzerò qualsiasi aiuto.

+0

po 'di fortuna? Si prega di inviare la risposta se lo avete trovato –

risposta

0

Siamo spiacenti, non posso commentare in linea ancora.

Cosa c'è nell'apk, specialmente in res/raw/e lib /? Inoltre, stai usando il plugin gradle 2.1.0? (visto che stai utilizzando renderscriptTargetApi 22), hai provato Build-Tools 23.0.3?

2

Se si guarda all'interno dell'APK, sotto la cartella lib, si dovrebbe vedere che la modalità di supporto per il rendering di script ha aggiunto librerie per altre architetture rispetto a quella che si sta supportando.

È possibile mantenere la configurazione precedente con aromi specifici dell'ABI. Ma al fine di garantire che nessun librerie per altre architetture sono compresi, prova ad aggiungere abiFilters ai vostri gusti:

productFlavors { 

    dev { ... ndk.abiFilters 'armeabi-v7a' } 
    develx86 { ... ndk.abiFilters 'x86' } 
    production { ... ndk.abiFilters 'armeabi-v7a' } 
    productionx86 { ... ndk.abiFilters 'x86' } 

} 
+0

Grazie amico proverò a farti sapere. – Sajmon

Problemi correlati