Генерация Android плотности разделения для устройств 560 точек на дюйм и 420 точек на дюйм - PullRequest
0 голосов
/ 10 апреля 2020

При генерации плотности расщепления Gradle работают нормально для названных плотностей (например, xxxhdpi). Я еще не нашел способ создать разделение плотности для некоторых различных плотностей, таких как 560dpi или 420dpi (например, для Google Pixel 3XL).

Вот как я генерирую ABI + разбиения плотности

  // ABI Splits related code
  splits {
    // Configures multiple APKs based on Application Binary Interfaces (ABI)
    abi {
      enable true // enables the ABIs split mechanism
      reset() // Clears the default list from all ABIs to no ABIs
      include 'arm64-v8a', 'armeabi-v7a', 'x86', "x86_64" // Spcifies a list of ABIs Gradle should createa APKs for.
      universalApk false // false to skip generting the universal APK
    }

    // Configures multiple APKs based on screen density.
    density {
      enable true
      reset() // Clears the default list from all densities to no denstities
      include "mdpi", "hdpi", "ldpi", "xhdpi", "xxhdpi", "xxxhdpi" // Specifies a list of screen densities Gradle should create multiple APKs for.
      compatibleScreens 'small', 'normal', 'large', 'xlarge' // Specifies a list of compatible screen size settings for the manifest.
    }
  } 

А затем я создаю разные версии для сгенерированных APK.

project.ext.abiCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, "x86_64": 4].withDefault{0}
project.ext.densityCodes = ["mdpi": 10, 'hdpi': 20, 'xhdpi': 30, "xxhdpi": 40, "xxxhdpi": 50, "ldpi": 60].withDefault{0}
android.applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def baseAbiVersionCode = project.ext.abiCodes.get(output.getFilter("ABI"), 0)
        def baseDensityVersionCode = project.ext.densityCodes.get(output.getFilter("DENSITY"), 0)

        if (baseAbiVersionCode != null) {
            output.versionCodeOverride = ((baseDensityVersionCode + baseAbiVersionCode) * 100000) + variant.versionCode
        }
    }
}

Однако, с учетом вышеизложенного, некоторые новые устройства, использующие плотности, например 560dpi, помечаются как не поддерживаемые. Универсальный APK для меня не go, так как я бью максимальный размер APK (и я не могу использовать файлы расширений).

Есть какие-нибудь идеи о том, как создать разделение плотности для этих неназванных плотностей?

...