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.
- Android Gradle - cargar la configuración de firma desde un archivo externo
- Cambiar la estructura del archivo de proyecto después de migrar de Eclipse a Android Studio gradle structure
- Aviso de Gradle: variant.getOutputFile () y variant.setOutputFile () están obsoletos
- Advertencia de Android Studio minSdkVersion y targetSdkVersion
- Android Studio gradle sync no pudo encontrar la biblioteca
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.
- El proyecto no se puede compilar después de actualizar a gradle: 2.1.0-alpha5
- Crear evento pre build para copiar archivos a la carpeta de activos en la aplicación de Android
- Pruebas de ejecución automática antes de la compilación de aplicaciones en Android Studio
- Gradle Artifactory Plugin - ¿Cómo publicar artefactos de múltiples módulos en un proyecto?
- Dagger 2 no está generando mi clase de componente
- ¿Cómo importar Sherlock de la barra de acción al proyecto gradle?
- Intellij Idea log GradleConnectionException: No se pudo ejecutar la compilación usando la instalación de Gradle mientras se construye
- No hay versión en caché de com.android.tools.build:gradle:1.2.3 disponible para el modo sin conexión
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