通过 Android Studio 生成的 Android APK 缺少 MANIFEST.MF 文件

标签 android android-studio android-signing

我有一个使用 android studio 3.6.1 的 android 项目。当我从 Android Studio 生成 apk 时,生成的 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'


最佳答案

我遇到了同样的问题。它不能通过 Android Studio 工作,也不能直接从终端构建。我已经通过添加解决了它

signingConfigs {
    myDefaultSigningConfigs {
        ...
        v1SigningEnabled true
    }
}

希望对你有所帮助。

关于通过 Android Studio 生成的 Android APK 缺少 MANIFEST.MF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61191763/

相关文章:

javascript - 在 iPhone 和 Android 上通过 JavaScript 检测手指滑动

android - 将 VectorDrawable 转换为 SVG

android - 停止运行的前台服务

android - 在 Android Studio 0.8.9 上导入 actionbarsherlock

Android 错误构建签名的 APK : keystore. jks 未找到用于签名配置 'externalOverride'

android - 无法得到 smack 的响应

android-studio - 如何使 gradle.properties 机器独立

java - 无法在 Android Studio 中渲染 XML 设计

android - 为什么发布版本变体总是可调试的?

java - 发布/调试 APK 上是否提供签名配置信息