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

Я пытаюсь выполнить разделение abi в моем градиенте с помощью следующего кода

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

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

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

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

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

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

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

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

тогда результирующие apks, разделенные и универсальные, не будут поддерживать x86. Однако я не вижу способа указать PackageOptions для каждого варианта приложения, так что это не работоспособное решение, и это явно не правильный способ делать что-то, даже если бы это было так. Проблема, похоже, заключается в том, что 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, чтобы консоль разработчика видела только то, что на самом деле поддерживает apk? Правильный ли подход - удаление пустых каталогов? Есть ли причина, по которой создается пустой каталог, который я могу отследить?


person sbaar    schedule 11.10.2017    source источник


Ответы (1)


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

person sbaar    schedule 26.10.2017