Я пытаюсь выполнить разделение abi в моем gradle со следующим кодом
splits {
abi {
enable true
reset()
include 'x86', 'armeabi-v7a'/*, 'arm64-v8a', 'x86_64'*/
universalApk true
}
}
def abiVersionCodes = ['armeabi-v7a': 1, 'x86': 2, /*'arm64-v8a': 2,'x86_64': 4*/]
android.applicationVariants.all { variant ->
// assign different version code for each output
variant.outputs.each { output ->
def filter = output.getFilter(OutputFile.ABI)
if (filter != null) {
output.versionCodeOverride = abiVersionCodes.get(output.getFilter(OutputFile.ABI)) * 1000000 + android.defaultConfig.versionCode
}
}
}
Он правильно производит выходные имена, и когда я использую анализатор apk, в каталоге lib, armeabi-v7a apk будет содержать только так в каталоге lib/armeabi-v7a, а также для xkk apk. Тем не менее, armeabi-v7a также содержит папку armeabi и x86 с только папкой META-INF, содержащей только файл MANIFEST.MF, не так.
При загрузке этих нескольких apks в консоль dev каждый фрагмент apk указан в
Дифференцирование данных apk: Родные платформы none (+ 3 общих)
и универсальный apk имеет
Собственные платформы arm64-v8a, x86_64 (+ 3 общих) Ошибка на консоли для руки и универсального apk -
"Полностью затененный APK ПРОБЛЕМА Этот APK не будет обслуживаться никому, поскольку он полностью затенен одним или несколькими APK с более высокими кодами версий. РАЗРЕШАЮЩАЯ СПОСОБНОСТЬ Удалите этот APK из своего выпуска или просмотрите коды таргетинга и версии APK, которые вы включаете в эту версию. "
Когда я добавляю в опции упаковки
packagingOptions {
exclude '**/x86/**'
}
то получившиеся apks, split и universal не будут поддерживаться x86. Тем не менее, я не вижу способа указать packagesOptions для каждого варианта приложения, поэтому это не выполнимое решение, и это явно не правильный способ делать что-либо, даже если это так. Проблема заключается в том, что apk считается поддерживающим x86 только потому, что он имеет каталог x86, даже если он в основном пуст, и это приводит к тому, что оба раскола apks рекламируют, что они поддерживают одни и те же архитектуры, когда они этого не делают.
Любопытно, что универсальный apk говорит, что он поддерживает arm64-v8a, armeabi, armeabi-v7a, x86, x86_64, что НЕ того, чего я ожидал бы после вызова reset() и включения 'x86', 'armeabi-v7a 'в блоке abi. Чтобы предотвратить включение 64-битных дуг, я должен добавить в defaultConfig
ndk {
abiFilters "armeabi-v7a", "x86"
}
но он по-прежнему содержит пустую папку armeabi.
Каков правильный способ разделить abi, чтобы консоль dev увидела только то, что apk фактически поддерживает? Удаляет ли пустые каталоги правильный подход? Есть ли причина, по которой создается пустой каталог, который я могу отслеживать?