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.
- El comando "phonegap build android" falló
- Cómo hacer que los complementos de Hugo y AndroidDevMetrics compile sólo en depuración:
- Android Studio 2.2 pegado en el edificio Gradle Project Información sobre la importación de proyectos existentes
- Android: el paquete está en conflicto con un paquete existente con el mismo nombre
- Comprueba si la biblioteca se utiliza en la aplicación para Android
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.
- error build.gradle al compilar 'com.firebase: firebase-client-android: 2.5.0'
- Dos sabores con diferentes recursos que heredan la disposición de un sabor base
- Error durante la creación de un archivo APK en Android Studio 2.1.1
- Configuración de la biblioteca de verificación de licencias en Android Studio
- Error de ejecución para la tarea ': app: compileDebugAidl': helpl falta
- Proyecto de actualización de Android-Studio con cambios de build.gradle
- LintOptions para la herramienta de compilación experimental de Gradle en Android Studio 1.3
- Problema de Gradle de Android
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?
- ¿Espaciando entre las estrellas de una barra de la calificación?
- FloatingActionButton sombra en pre-lollipop