Dependencia de Gradle para arquitectura específica con splits ABI

Estoy enfrentando este problema que parece que no soy capaz de resolver. Aquí está el escenario:

Im edificio apk que utiliza gradle dependencia y esta dependencia es específica de la arquitectura para apk para x86 necesito dependencia diferente y para el brazo diferente también.

Lo solucioné con sabores de producto:

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

Entonces entonces definí la dependencia como esta:

 develCompile 'dependency_for_arm' develx86Compile 'dependency_for_x86' 

Esto funciona bien. Pero recientemente tuve que añadir a mi aplicación un uso de renderscript. Lo hice de esta manera:

 renderscriptTargetApi 22 renderscriptSupportModeEnabled true 

Y después de esto, cuando he subido apk en Google Play dice que es apk es adecuado con el brazo, x86. No sé cómo esto es posible. Como se puede pensar que se bloqueará en el dispositivo con CPU diferente (si generé apk para el brazo y el usuario lo ejecutará en la aplicación x86 se bloqueará).

Así que decited a utilizar divisiones ABI:

 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 } 

Pero ahora cuando veo los archivos generados apk, mi dependencia que es específico del sabor no está incluido en apk y apk se bloqueará cuando abra la sección que utiliza API de esta dependencia.

¿Alguien sabe cómo resolver este problema? ¿O alguien sabe por qué Google Play dice que apk es para ambas arquitecturas cuando incluyo renderscript? (Sin él funciona correctamente, pero necesito renderscript).

Gracias por tu tiempo. Apreciaré cualquier ayuda.

Si miras dentro de tu APK, en la carpeta lib , deberías ver que el modo de soporte de renderscript agregó libs para otras arquitecturas que la que estás soportando.

Puede mantener su configuración anterior con sabores específicos de ABI. Pero para asegurarse de que no se incluyen libs para otras arquitecturas, intente agregar abiFilters a sus sabores:

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

Lo siento, no puedo comentar en línea todavía.

¿Qué hay en el apk, especialmente en res / raw / y lib /? Además, ¿está utilizando gradle-plugin 2.1.0? (Ya que está utilizando renderscriptTargetApi 22 ), ¿ha probado Build-Tools 23.0.3?

  • ¿Cómo puedo utilizar la biblioteca Permissionsdispatcher para los nuevos permisos de tiempo de ejecución de Android M?
  • ¿Cuál es la diferencia entre la implementación y compilar en gradle
  • No se pudo crear la aplicación Error: Error de ejecución para la tarea ': app: package "packageName" Debug'. > Valor (73836)> 0x0000ffff
  • ¿Qué archivo gradle utilizar para configurar la aplicación como debuggable?
  • No se puede resolver el símbolo 'GooglePlayServicesClient'
  • Duplicar archivos copiados en APK Android - ¿Puede ser fusionado?
  • Problema de generación de Gradle 3.0.0-beta1
  • Archivo de Firebase no encontrado excepción
  • Error de generación en Android Studio
  • Android Studio 3.0 Beta 1: Error al resolver: com.android.support:multidex:1.0.2
  • ¿Cuál es la mejor manera de resolver la EXCEPCIÓN INESPERADA DE NIVEL SUPERIOR?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.