В Android APK, сгенерированном с помощью Android Studio, отсутствует файл MANIFEST.MF

У меня есть проект Android, использующий Android Studio 3.6.1. Когда я создаю apk из Android Studio, в сгенерированном файле APK отсутствует файл META-INF/MANIFEST.MF. Однако, когда я собираю apk через консоль, все работает правильно.

Я не уверен, какие настройки в build.gradle контролируют создание этого файла и когда он создается. Любая помощь в этом отношении будет оценена по достоинству.

Следуя моему файлу build.gradle



    buildscript {
        repositories {
            google()
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09'
            classpath 'com.android.tools.build.jetifier:jetifier-core:1.0.0-beta09'
        }
    }

    apply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-kapt'
    apply plugin: 'kotlin-android-extensions'
    apply from: '../config/quality.gradle'
    apply plugin: 'com.github.spotbugs'

    project.extensions.extraProperties.set('SpotBugsTask', com.github.spotbugs.SpotBugsTask)

    // loads the current project's local settings file
    Properties localProperties = new Properties()
    def localPropertiesFile = project.file('../local.properties')
    if (localPropertiesFile.exists()) {
        localProperties.load(new FileInputStream(localPropertiesFile))
        localProperties.list(System.out)
    }

    android {
        compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
        tasks.withType(Test) {
            // pass the proxy configuration to the gradle test executor
            systemProperty "http.proxyHost", System.getProperty('http.proxyHost')
            systemProperty "http.proxyPort", System.getProperty('http.proxyPort')
            systemProperty "http.proxyUser", System.getProperty('http.proxyUser')
            systemProperty "http.proxyPassword", System.getProperty('http.proxyPassword')
            systemProperty "https.proxyHost", System.getProperty('https.proxyHost')
            systemProperty "https.proxyPort", System.getProperty('https.proxyPort')
            systemProperty "https.proxyUser", System.getProperty('https.proxyUser')
            systemProperty "https.proxyPassword", System.getProperty('https.proxyPassword')
        }

        def appName = "app_name"
        def appIdSuffix = ""
        if (project.hasProperty('appSuffix') && appSuffix ==~ /^[a-zA-Z0-9]*$/) {
            println("Appending suffix: " + appSuffix)
            appIdSuffix = appSuffix
        }

        compileSdkVersion parent.ext.androidCompileSdkVersion
        buildToolsVersion parent.ext.androidBuildToolsVersion

        testOptions {
            unitTests {
                includeAndroidResources = true
            }
            animationsDisabled = true
            unitTests.returnDefaultValues = true
            unitTests.all {
                maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
                systemProperty "testResponse", "${projectDir}/src/testServerDebug/res/raw"
                testLogging {
                    showStackTraces = true
                    exceptionFormat = "full"
                    events 'passed', 'failed', 'skipped'
                }
                maxHeapSize = "4g"
            }
            execution 'ANDROIDX_TEST_ORCHESTRATOR'
        }

        android {
            lintOptions {
                warning "TrustAllX509TrustManager"
            }
        }

        sourceSets {
            main.java.srcDirs += 'src/main/kotlin'
            main.java.srcDirs += 'src/production/kotlin'
            main.java.srcDirs += 'src/server/kotlin'
            test.java.srcDirs += 'src/test/kotlin'
            test.java.srcDirs += 'src/testServerDebug/kotlin'
            test.java.srcDirs += 'src/testServerDebug/java'
            androidTest.java.srcDirs += 'src/androidTest/kotlin'
        }

        packagingOptions {
            exclude 'LICENSE.txt'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/services/javax.annotation.processing.Processor'
            exclude 'META-INF/app_serverRelease.kotlin_module'
        }


        defaultConfig {
            minSdkVersion parent.ext.androidMinSdkVersion
            targetSdkVersion parent.ext.androidTargetSdkVersion
            multiDexEnabled true
            versionCode 1
            versionName "1.0.0"
            vectorDrawables.useSupportLibrary = true
        }

        signingConfigs {

            debug {
                storeFile file("keystore.jks")
                storePassword "test"
                keyAlias "test"
                keyPassword "test"
            }
        }

        buildTypes {
            release {
                debuggable false
                minifyEnabled false
                shrinkResources false
                multiDexEnabled false
                if (project.hasProperty("RELEASE_STORE_FILE")) {
                    signingConfig signingConfigs.release
                } else {
                    signingConfig signingConfigs.debug
                }

                proguardFile getDefaultProGuardFile('proguard-release.pro')
                proguardFile getDefaultProGuardFile('proguard-androidx.pro')
                proguardFile 'proguard-project.pro'
            }

            debug {
                testCoverageEnabled false
                ext.enableCrashlytics = false
                signingConfig signingConfigs.debug
            }
        }

        flavorDimensions "default"
        productFlavors {
            production {
                dimension "default"
            }

            server {
                dimension "default"
                applicationIdSuffix ".server" + appIdSuffix
                resValue "string", appName, appIdSuffix
            }
        }

        dexOptions {
            javaMaxHeapSize "4g"
            preDexLibraries false
        }
    }

    dependencies {
        serverImplementation('com.github.tomakehurst:wiremock:2.8.0') {
            exclude group: 'com.fasterxml.jackson.core'
            exclude group: 'com.google.guava'
            exclude group: 'org.apache.httpcomponents'
            exclude group: 'org.ow2.asm', module: 'asm'
        }

        def nav_version = "1.0.0"

        implementation "android.arch.navigation:navigation-fragment:$nav_version"
        implementation "android.arch.navigation:navigation-ui:$nav_version"

        implementation "androidx.core:core-ktx:1.2.0"
        implementation "android.arch.navigation:navigation-ui-ktx:1.0.0"
        implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0"
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
        implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
        implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutine"
        implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutine"


        kaptAndroidTest 'org.parceler:parceler:1.1.12'
        testImplementation 'joda-time:joda-time:2.9.6'
        testImplementation 'junit:junit:4.12'
        testImplementation 'org.powermock:powermock-api-easymock:1.6.2'
        testImplementation 'org.powermock:powermock-core:1.6.2'
        testImplementation 'org.powermock:powermock-module-junit4:1.6.2'
        testImplementation 'org.powermock:powermock-api-mockito:1.6.2'
        testImplementation('org.robolectric:robolectric:4.2') {
            exclude group: 'com.google.guava'
        }
        testImplementation 'org.apache.commons:commons-lang3:3.6'

        testImplementation('org.mockito:mockito-all:1.10.19') {
            exclude group: 'org.hamcrest', module: 'hamcrest-core'
        }
        testImplementation 'org.mockito:mockito-all:1.10.19'
        testImplementation('com.squareup:fest-android:1.0.8') {
            exclude group: 'com.android.support', module: 'support-v4'
        }
        testImplementation 'androidx.test:core:1.2.0'
        testImplementation 'androidx.test.ext:junit:1.1.1'
        testImplementation 'org.apache.httpcomponents:httpclient:4.5.6'
        androidTestImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.capitalone.easyscreenshots:easyscreenshots:1.1.0@aar'
        androidTestImplementation 'com.jraska:falcon:2.1.1'
        androidTestImplementation('androidx.test.espresso:espresso-core:3.2.0') {
            exclude module: 'support-annotations'
        }
        androidTestImplementation('androidx.test:runner:1.2.0') {
            exclude module: 'support-annotations'
        }
        androidTestImplementation('androidx.test:rules:1.2.0') {
            exclude module: 'support-annotations'
        }
        androidTestImplementation('androidx.test.espresso:espresso-intents:3.2.0') {
            exclude module: 'design'
            exclude module: 'support-annotations'
            exclude module: 'support-v4'
            exclude module: 'recyclerview-v7'
            exclude module: 'appcompat'
        }
        androidTestImplementation('androidx.test.espresso:espresso-contrib:3.2.0') {
            exclude module: 'design'
            exclude module: 'support-annotations'
            exclude module: 'support-v4'
            exclude module: 'recyclerview-v7'
            exclude module: 'appcompat'
        }
        androidTestImplementation('androidx.test.espresso:espresso-web:3.2.0') {
            exclude module: 'design'
            exclude module: 'support-annotations'
            exclude module: 'support-v4'
            exclude module: 'recyclerview-v7'
            exclude module: 'appcompat'
        }
    }

    apply plugin: 'com.google.gms.google-services'



person user3175491    schedule 13.04.2020    source источник
comment
Можете ли вы опубликовать свой файл gradle? Кроме того, это происходит только при сборке из студии Android? Как насчет сборки APK из терминала?   -  person Giorgos Neokleous    schedule 13.04.2020
comment
Когда я строю через терминал, он содержит все файлы. только через Android Studio он не содержит указанный файл.   -  person user3175491    schedule 13.04.2020
comment
Я также заметил, что файлов CERT.RSA и CERT.SF тоже нет.   -  person user3175491    schedule 13.04.2020
comment
Вы нашли для него исправление? проблема возникает только тогда, когда приложение создано с использованием плагина Gradle ›= v3.6.0 и версии Gradle ›= v5.6.4   -  person manjunath kallannavar    schedule 08.09.2020
comment
В системе отслеживания проблем Google есть запрос на эту ошибку issuetracker.google.com/issues/168013083   -  person mmBs    schedule 14.09.2020
comment
@mmBs Да, это было открыто мной. Ответа от Google пока нет.   -  person manjunath kallannavar    schedule 16.09.2020


Ответы (1)


У меня была такая же проблема. Это не работало ни через Android Studio, ни при сборке непосредственно с терминала. Я решил это, добавив

signingConfigs {
    myDefaultSigningConfigs {
        ...
        v1SigningEnabled true
    }
}

Я надеюсь, что это поможет в вашем случае.

person dzielins42    schedule 28.01.2021