Android Studio 3.5.2 - 错误:您当前选择的变体(app-release-unsigned.apk)的apk未签名。

13

一些背景信息。我已经花了几个月的时间构建/调试/测试我的简单应用程序,没有任何问题。在AVD或我的实际S9手机上进行构建/安装。所有工作都非常顺利,几个月来都没有问题。现在,我准备发布我的第一个 beta 版本到 Play 商店(我历史上的第一个应用程序)。所以,我按照“签名”我的应用程序的说明进行操作。那样做了,并上传了我的应用程序包到 Play 商店。现在我无法在 Android Studio 中进行任何构建/调试/安装。

错误:您当前选择的变体的 apk(app-release-unsigned.apk)未经签名。请为此变体指定签名配置(release)。

enter image description here

Debug(Shift + F9)会产生以上错误并显示“编辑配置”对话框。

enter image description here

我点击“Fix”按钮,但是从那里我不知道该怎么做,也不知道如何使用这些不同的构建配置。

enter image description here

build.gradle

apply plugin: 'com.android.application'

android {
    signingConfigs {
        debug {
            storeFile file(var)
            storePassword 'xxx'
            keyAlias = 'xxx'
            keyPassword 'xxx'
        }
    }
    compileSdkVersion 29
    buildToolsVersion "29.0.1"
    defaultConfig {
        applicationId "com.birdersdiary.mobile"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "b1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.preference:preference:1.1.0'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

当我点击“FIX”按钮时,会跳转到“Run/Debug Configurations”对话框。但从那里开始,我完全不知道需要做什么来解决这个问题。

非常感谢任何帮助。


1
你应该在build.gradle中为buildType release设置签名配置。如果需要进一步帮助,请发布你的app build.gradle文件。 - Rick Sanchez
谢谢。我按要求发布了我的 build.gradle 文件。 - JJJones_3860
你可以在下面的图片中修改构建版本流程。图片 - MKD
请勿将解决方案公告编辑到问题中。如果已有答案,请接受其中一个(即单击其旁边的“打勾”)。如果您的解决方案尚未被现有答案覆盖,您也可以创建自己的答案,并接受它。请参阅https://stackoverflow.com/help/self-answer进行比较。 - Yunnosch
4个回答

19
您可以通过以下任何一种方式解决此问题:

1.您需要将构建变量切换回调试模式。您可以在 Windows 上按 Ctrl+Alt+A 或 Mac 上按 CMD+ALT+A,然后在搜索栏中键入 variant,选择build variant,这将在 Android Studio 屏幕的左侧显示构建变量选项,然后您应该选择名称后面带有 "debug" 的变量。

  • 2.如果要使用发布版本,则需要告诉 Android Studio 如何查找用于签名 APK 的密钥。请将以下内容添加到您的应用级别的 build.gradle 文件中:

  • apply plugin: 'com.android.application'
    
    android {
     signingConfigs {
        debug {
            storeFile file(var)
            storePassword 'xxx'
            keyAlias = 'xxx'
            keyPassword 'xxx'
        }
        release {
            storeFile file(var)
            storePassword 'xxx'
            keyAlias = 'xxx'
            keyPassword 'xxx'
        }
    }
    compileSdkVersion 29
    buildToolsVersion "29.0.1"
    defaultConfig {
        applicationId "com.birdersdiary.mobile"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "b1.0"
        testInstrumentationRunner     "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
     }
    
    dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.preference:preference:1.1.0'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    }
    

    将占位符替换为实际值。


    谢谢你,oziomajnr。但是,这是我的第一个应用程序,我需要更多的具体指导,因为我并没有完全理解你的回答。我已经在上面发布了我的build.gradle文件。 - JJJones_3860
    我修改了你的build.gradle文件 @JJJones_3860 - oziomajnr
    非常感谢您的帮助。我相信问题出在我没有清楚说明所有这些构建/变体/签名配置对我来说是新的和模糊的。我一点也不知道。我按照您上面所示的修改了我的build.gradle,但问题仍然存在。 Ctl+Alt+A没有任何作用。然而,Shft+Shft打开搜索,我输入“build variant”,我确实在左侧获得了Build Variants工具栏。它只显示'app/release',没有调试。所以,仍然停留在同样的地方。问题没有解决。请假设我对这个东西一无所知。 - JJJones_3860
    1
    对于初学者来说,这里涉及到的许多组成部分非常复杂,令人难以想象。 - JJJones_3860
    是的,第一种选项可行。在“工具窗口栏”中有一个名为“构建变体”的选项卡,在那里我们必须选择调试。 - Mohd Qasim

    18

    在定义完配置之后,您应该查看它的设置。如果您将其用于发布,请考虑将名称命名为除debug以外的其他内容:

    buildTypes {
            release {
               minifyEnabled false
               proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    
               signingConfig signingConfigs.debug
            }
        }
    

    谢谢,但我需要非常基础的逐步指导。我还是卡在同一个地方。我不明白你建议我怎么做来解决这个问题。 - JJJones_3860
    你已经定义了配置,但是需要进行设置。请注意,我在build.gradle中的buildType中添加了一个signingConfig行。 - Rick Sanchez
    再次感谢Rick。非常抱歉我这么迟钝,我完全不理解这些配置。我可以告诉你,我刚刚通过随机尝试并最终在“运行/调试配置”下将“部署”从“默认APK”设置为“来自应用程序包的APK”来解决了这个问题。那个问题已经解决了,但现在,虽然AVD出现了,但它无法运行/工作。唉... - JJJones_3860
    我只需要知道如何构建一个调试 APK 并在我的 AVD 上安装它进行测试。这就是我现在所需要的。 - JJJones_3860
    1
    搞定了。不得不清除 AVD 的数据并进行冷启动。现在似乎一切正常。祈祷不出问题。 - JJJones_3860

    6
    请确认以下所有内容是否正确。
    1. 在左侧项目面板中
    • 点击app并打开打开模块设置
    • 选择左侧面板中的Module, 并选择 app
    • 在右侧面板中,您可以看到3个选项卡(属性、默认配置和签名配置)
    1. 在签名配置中检查以下内容(如果没有,请创建新密钥)
    • 在Store File中设置jks文件位置
    • 设置存储密码别名和密钥密码

    enter image description here

    1. 在默认配置中-只需检查应用程序ID是否正确

    2. 现在在左侧面板中进行以下操作

    • 选择Build Variants并向下滚动到Signing Config
    • 检查您是否已经选择任何一个或者请选中$signingConfigs.release

    enter image description here


    4

    在Android Studio的左侧,有一个名为 Build Variants 的选项。将其从 release 更改为 debug 对我很有效。

    Build Variants


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接