Подтвердить что ты не робот

Использование разделов APK для выпуска, но не тип отладки Debug

Я успешно реализовал APK Splits, так что отдельные APK создаются для разных ABI.

Однако для эффективности (и поскольку мне не нужно использовать APK без armeabi-v7a в Debug), я хотел бы ограничить сборку Debug, чтобы генерировать только APK от armeabi-v7a.

Как это можно сделать?

Одна идея заключается в следующем:

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

Может быть, есть способ установить enable на основе типа сборки?

4b9b3361

Ответ 1

Вы можете попробовать вариант ответа @Geralt_Encore, который позволяет избежать отдельной команды gradlew. В моем случае, я только хотел использовать разделение APK, чтобы уменьшить размер выпущенного файла APK, и я хотел сделать это полностью в Android Studio.

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

Из того, что я видел, Build | Сформировать Signed пункт меню APK в Android Studio генерирует APK с помощью assembleRelease цели Gradle.

Ответ 2

Вы можете установить enable на основе аргумента командной строки. Я решил похожую проблему, когда хотел использовать разделители только для версии выпуска, но не для регулярных отладочных сборников.

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

И тогда ./gradlew -PsplitApks assembleProdRelease (prod - это аромат в моем случае).

Ответ 3

На самом деле вам все равно нужно включить Splits, в противном случае APK будет включать библиотеки для всех ABI и, вероятно, не то, что вы хотите.

Это должно соответствовать вашим требованиям:

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
            }
        }
        ...
    }
}

Ответ 4

Я немного опоздал на эту вечеринку, но у меня возникли проблемы с разными именами вкусов и задач, я пришел с этим:

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
        }
    }

}

Это всего лишь небольшое обновление к ответу Джеффа П, но оно хорошо работает с различными вариантами и конфигурациями сборки.

Ответ 5

Обновление ответа @Jeff P для повышения его гибкости в зависимости от имени приложения и поддержки формата Android App Bundle (.aab).

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