Android Build Tools собирает только x86_64, несмотря ни на что. APK запускается через adb, но показывает несовместимость в Play Store

Итак, это происходит. Независимо от того, что я пытаюсь сделать с build.gradle, все APK выходят с флагом native_code = 'x86_64', поэтому, когда я развертываю приложение в магазине, в результате получается + 15 000 несовместимых устройств и только 19 совместимых. Сначала я подумал, что причиной почему-то была установка NDK или мой модифицированный скрипт сборки. Но это все еще происходит, когда я прохожу мастер создания подписанных APK. Блок splits тоже изначально отсутствовал и не помог. Самое странное, что когда я устанавливаю через консоль, ЭТО РАБОТАЕТ!

WTF! WTF2!

Я также попытался переключиться на рекомендуемую JRE, а также на несколько стратегий именования APK, касающихся создания файлов, таких как перемещение вывода в разные каталоги или отказ от использования конструктора файлов.

Мой build.gradle выглядит так:

defaultConfig {
    applicationId "com.chiskosystems.brokr"
    versionCode versionNumber
    versionName "${versionMajor}.${versionMinor}.${versionPatch} (${versionBuild}) Release"
    minSdkVersion 16
    targetSdkVersion 25
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true

    jackOptions {
        enabled false
    }

    vectorDrawables {
        useSupportLibrary true
    }
}

splits {
    abi {
        enable true
        reset()
        include 'armeabi', 'armeabi-v7a', 'arm64-v8a'
    }
}

project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3]

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def fileNaming = "apk/brokr"
        def outputFile = output.outputFile

        output.versionCodeOverride =
                project.ext.versionCodes.get(output.getFilter(
                        com.android.build.OutputFile.ABI), 0) * 10000000 + android.defaultConfig.versionCode

    }

}

signingConfigs {
    release {
        try {
            storeFile file('../mystore.jks')
            keyAlias 'release'
            storePassword KEYSTORE_PASSWORD
            keyPassword KEY_PASSWORD
        } catch (ex) {
            throw new InvalidUserDataException("You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.")
        }
    }
}

dataBinding {
    enabled true
}

dexOptions {
    javaMaxHeapSize "3g"
    preDexLibraries false
}

buildTypes {
    release {
        minifyEnabled false
        proguardFile 'path/proguard-project.pro'
        ...
        buildConfigField "String", 'SERVER', '"https://myfirebaseserver.com"'
        debuggable false
        signingConfig signingConfigs.release
    }
    debug {
        minifyEnabled false
        applicationIdSuffix ".debug"
        versionNameSuffix "-debug"
        buildConfigField "String", 'SERVER', '"https://myfirebaseserver.com"'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

productFlavors {
    sandbox {
        buildConfigField "String", 'PAYPAL_ENV', '"PayPalConfiguration.ENVIRONMENT_NO_NETWORK"'
    }
    full {
        buildConfigField "String", 'PAYPAL_ENV', '"PayPalConfiguration.ENVIRONMENT_PRODUCTION"'
        signingConfig signingConfigs.release
        targetSdkVersion 25
    }
}

Происходит как в системах Win, так и в Unix. Я провел целый день безуспешно модифицируя сценарий, и на данный момент я беспомощен.

Любые идеи о том, что происходит бип? Большое спасибо!


person Chisko    schedule 04.04.2017    source источник
comment
Просто первоначальная мысль, applicationVariants.all { variant -> variant.outputs.each, может ли это быть перезапись .apk только последней сборкой, которая в данном случае может быть x86_64. Помню когда-то у меня была похожая проблема. Что мне нужно было сделать, так это найти идентификатор и написать его только для конкретной сборки.   -  person just_user    schedule 04.04.2017
comment
@just_user То есть что-то вроде переключения арок внутри этого блока?   -  person Chisko    schedule 04.04.2017
comment
Точно, но я бы сначала проверил. Удалите x86_64 из сборки, чтобы увидеть, являются ли все сборки только x86 или одной из других.   -  person just_user    schedule 04.04.2017
comment
Следуя совету @just_user, удалил поддержку x86, так как она мне действительно не нужна. Результат тот же   -  person Chisko    schedule 05.04.2017
comment
@just_user Я пытался сделать упомянутый вами переключатель, но я мог понять, нужно ли мне сравнивать свойство внутри variant.outputs или со строкой. Не могли бы вы быть более конкретными? :)   -  person Chisko    schedule 05.04.2017
comment
Итак, я скопировал скрипт сборки в новый проект, и теперь флаг native_code вообще не установлен. Это странно как ****   -  person Chisko    schedule 05.04.2017
comment
Я тоже попробовал ваш скрипт, и он не смог заставить его работать. Но если у вас не установлен флаг native_code, попробуйте gradle clean?   -  person just_user    schedule 06.04.2017
comment
Нет, это тоже не работает, кэши тоже сбросил   -  person Chisko    schedule 06.04.2017
comment
Дважды проверьте разрешения, указанные в вашем AndroidManifest.xml. В прошлый раз, когда у меня было поддерживаемое приложение 0 в Google Play, это было вызвано опечаткой в ​​android.hardware.camera.   -  person JP Ventura    schedule 06.04.2017
comment
Спасибо за ваше предложение @JPVentura, но в манифесте нет опечаток.   -  person Chisko    schedule 06.04.2017


Ответы (1)


Причиной была зависимость:

compile 'com.lambdaworks:scrypt:1.4.0'

по-видимому, автоматически захватывает архитектуру моего ноутбука и вставляет туда этот флажок.

person Chisko    schedule 09.04.2017
comment
Вау, рад, что вы нашли причину. Какая досадная ошибка! - person just_user; 10.04.2017