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?

  • No hay versión en caché de com.android.tools.build:gradle:1.2.3 disponible para el modo sin conexión
  • Los recursos no utilizados de la capa de androide del módulo de la biblioteca se utilizan en la aplicación
  • ¿Cuál es la sintaxis para escribir comentarios en el archivo build.gradle?
  • No se pudo ejecutar la compilación usando la distribución Gradle 'http://services.gradle.org/distributions/gradle-1.6-bin.zip'
  • Después de actualizar - Error: No se pudo encontrar: com.google.android.gms: play-services: 5.2.8
  • Android copia proyecto existente con nuevo nombre en Android Studio
  • ScriptC_ "nombre" no se genera después de crear un archivo .rs (en Android Studio con Gradle)
  • Problema con gradle experimental: El plugin android debe ser aplicado al proyecto
  • ¿Cómo incluir applicationId en la línea de comandos desde la dependencia build.gradle?
  • Android Gradle - cargar la configuración de firma desde un archivo externo
  • Tarea Gradle personalizada para guardar Json analizado en el archivo. Androide
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.