Полностью затененный APK на консоли разработчика Play из-за перекрытия abis

Я пытаюсь сделать аби-сплит в моем 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, и аналогично для x86 apk. Однако armeabi-v7a также содержит папку armeabi и x86, содержащую только папку META-INF, содержащую только файл MANIFEST.MF, нет.

При загрузке этих нескольких apk в консоль разработчика, каждый разделенный apk перечислялся в

Различия в деталях apk: нативных платформ нет (+ 3 общих)

и универсальный apk имеет

Родные платформы arm64-v8a, x86_64 (+ 3 общие) Ошибка на консоли для arm и универсального apk есть

"Полностью затененная проблема APK. Этот APK не будет обслуживаться никакими пользователями, поскольку он полностью затенен одним или несколькими APK с кодами более высоких версий. РЕШЕНИЕ Удалите этот APK из своего выпуска или просмотрите коды таргетинга и версии APK, которые вы включаете. в этом выпуске. "

Когда я добавляю под варианты упаковки

packagingOptions {
    exclude '**/x86/**'
}

тогда получившиеся apks, split и universal, не будут поддерживать x86. Тем не менее, я не вижу способа указать packageOptions для каждого варианта приложения, так что это нереализуемое решение, и это явно не правильный способ сделать что-либо, даже если бы он был. Кажется, проблема в том, что apk считается поддерживающим x86 только потому, что у него есть каталог x86, даже если он в основном пуст, и это заставляет оба split apk объявлять, что они поддерживают одни и те же архитектуры, когда они этого не делают.

Любопытно, что универсальный 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? Является ли удаление пустых каталогов правильным подходом? Есть ли причина, по которой создается пустой каталог, который я могу отследить?

1 ответ

Решение

Другая неиспользуемая библиотека генерировала пустые папки. Методом проб и ошибок в пустом проекте, где я скопировал свои зависимости и код раздельного градла, я сузил его до генератора разметки cwac. Обновление с.2 до.4 решило проблему.

Другие вопросы по тегам