Uso de APK Splits para el lanzamiento, pero no para Depurar el tipo de compilación


He implementado con éxito APK Divide para que se generen APK separados para diferentes ABI.

Sin embargo, por eficiencia (y ya que no tengo necesidad de APKs que no sean armeabi-v7a en la depuración), me gustaría limitar las compilaciones de depuración para generar solo APKs armeabi-v7a.

¿Cómo se puede hacer esto?

Una idea es con esto:

abi {
    enable true
    reset()
    include 'x86', 'armeabi-v7a', 'mips'
    universalApk false
}

Tal vez hay alguna manera de establecer enable basado en el tipo de compilación?

Author: techehcet, 2016-01-04

4 answers

Puede probar una variación en la respuesta de @Geralt_Encore, que evita el comando gradlew separado. En mi caso, solo me importaba usar la división APK para reducir el tamaño del archivo APK lanzado, y quería hacer esto completamente dentro de Android Studio.

splits {
    abi {
      enable gradle.startParameter.taskNames.contains(":app:assembleRelease")
      reset()
      include 'x86', 'armeabi-v7a', 'mips'
      universalApk false
    }
}

Es posible que deba reemplazar el prefijo :app con el nombre de su módulo de aplicación si no se llama literalmente app.

Por lo que he visto, el elemento de menú Build / Generate Signed APK en Android Studio genera el APK utilizando el assembleRelease Objetivo de Gradle.

Tenga en cuenta que si está generando un APK utilizando tipos de compilación, o su versión de compilación no se llama release, deberá cambiar el destino assembleRelease en consecuencia, por ejemplo, assemblePaidRelease si su tipo de compilación es paid.

 16
Author: Jeff P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-10 02:34:48

Puede establecer enable basado en el argumento de la línea de comandos. He resuelto un problema similar cuando quería usar splits solo para la versión de lanzamiento, pero no para compilaciones de depuración regulares.

splits {
    abi {
        enable project.hasProperty('splitApks')
        reset()
        include 'x86', 'armeabi-v7a'
    }
}

Y luego ./gradlew -PsplitApks assembleProdRelease (prod es un sabor en mi caso).

 13
Author: Geralt_Encore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-13 13:11:23

En realidad, aún necesita habilitar las divisiones, de lo contrario, su APK incluirá libs para todos los ABI y probablemente eso no sea lo que desea.

Esto debería funcionar para sus requisitos:

buildTypes {
    debug {
        splits {
            abi {
                enable true
                reset()
                include 'armeabi-v7a'
                universalApk false
            }
        }
        ...
    }
    release {
        splits {
            abi {
                enable true
                reset()
                include 'x86', 'armeabi-v7a', 'mips'
                universalApk false
            }
        }
        ...
    }
}
 0
Author: techehcet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-04 13:52:12

Llego un poco tarde a esta fiesta, pero teniendo un problema con diferentes sabores y nombres de tareas, he venido con esto:

ext.isRelease = { array ->
    array.each { name ->
        if (name.contains("Debug")) {
            return false
        }
    }
    return true
}

android {

...

    splits {
        abi {
            enable isRelease(gradle.startParameter.taskNames)
            reset()
            include "x86_64", "x86", "arm64-v8a", "armeabi-v7a"
            universalApk false
        }
    }

}

Es solo una pequeña actualización de la respuesta de Jeff P, pero funciona bien con diferentes sabores y configuraciones de compilación.

 0
Author: Václav Hodek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-30 10:38:39