app-release-unsigned.apk未签名

242

我从GitHub下载了一个Android应用的压缩文件并尝试运行它,但是出现了一个提示对话框,其中显示:

app-release-unsigned.apk is not signed. Please configure the signing information for the selected flavor using the Project Structure dialog.

我正在使用Android Studio。 我应该怎么做?


虽然答案已经给出,但是为了避免任何人仍然有问题,就我个人而言,问题是由于父文件夹名称中有一个“空格”导致的。所以,它原本是“Android App”,我将其更改为“Android-App”,重新启动项目,然后它就可以工作了。 - Karanveer Singh
Android的“签名”过程真是太痛苦了。在Joel测试中,“你能否一步完成构建”这一项是一个史诗级的失败。 - Paul McCarthy
17个回答

496

如果有人想要使用Android Studio来调试发布版本的构建,请按照以下步骤进行:

  1. 将构建变体设置为发布模式。

输入图像描述

  1. 在左侧导航窗格中右键单击app,然后单击打开模块设置

  2. 进入签名选项卡。添加一个签名配置并填写信息。选择你的密钥链。

输入图像描述

  1. 转到Build Type选项卡。选择发布模式并设置:

- Debuggable为true

- Signing Config为config。(你刚创建的那个)。

输入图像描述

同步gradle即可!享受吧!


5
在生成发布版的 APK 时,我们是否应将 Debuggable 设置为 false?还是 Android Studio 会自动处理? - Ishaan Garg
9
制作发布版 APK 时,您应将 debuggable 设置为 false。 - NightFury
1
你可能会认为它会默认选择第一个创建的,不知道为什么它没有...也许对于一些人来说签署他们不想签署的软件包可能是不好的...但是感谢你,我忘记设置构建类型“签名配置”,直到看到截图才想起来。 - CrandellWS
18
除非真的有意愿,否则无需Debuggable设置为true - computingfreak
4
请注意,将配置设置为生成类型后,您的所有密钥信息(包括密码)将显示在gradle文件中... - Jacob.B
显示剩余9条评论

102

请确保在Android Studio中的构建变体设置为debug模式(而非release模式)(检查构建变体面板)。

如果设置为debug模式,应该会自动使用自动生成的调试密钥库对应用程序进行签名,无需编辑构建脚本。

但是,您需要创建和配置一个特定的密钥库以供发布使用。

官方文档,涵盖了debug和release模式:https://developer.android.com/tools/publishing/app-signing.html


66

始终使用 build.gradle DSL 脚本对你的构建进行签名,如下所示:

    android {
    signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }

        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androidotherkey"
            keyPassword "android"
        }
    }

    buildTypes {
        bar {
            debuggable true
            jniDebugBuild true
            signingConfig signingConfigs.debug
        }
        foo {
            debuggable false
            jniDebugBuild false
            signingConfig signingConfigs.myConfig
        }
    }
}

如果你想更好地了解与Android Studio相关的Gradle构建系统,只需访问:

Gradle插件用户指南


1
但为什么我必须这样做呢?指南上说:“默认情况下,有一个调试配置,它设置为使用一个已知密码的调试密钥库,并带有一个已知密码的默认密钥。” 我在其他应用程序中没有任何问题。 - andrew
如果您的密码正确且debug.keystore可访问,我不知道。我过去遇到的常见问题是文件权限或目录权限。也许您下载的项目保留了Android Studio本地文件,这些文件指向其他调试密钥库而不是您自己的。无论如何,您的Gradle日志必须显示路径错误,请包含该日志以获取更多帮助。 - Martin Revert
嗯,对我也不起作用。没有Gradle错误,但仍然出现签名错误(并且指向我的密钥文件)。 - Brian Knoblauch
嗨,Brian!你能试着删除你的debug.keystore吗?然后创建一个新的虚拟项目,这样就会生成一个新的密钥库。之后,重新打开你现有的项目并尝试。如果之前的任何其他建议都失败了,这是我唯一能推荐的事情。 - Martin Revert
1
“debug.keystore” 不是位于 “.android” 文件夹中吗?除非您已将其移动到项目中,否则建议提供完整路径。 - Gokhan Arik

55
如果有人想使用Android Studio 3.5调试和发布不同的构建变体,请按照以下步骤操作: 1. 将构建变体设置为发布模式。

Build Variant

  1. 转到文件 >> 项目结构
  2. 选择模块,然后选择签名配置
  3. 单击签名配置下的加号图标

Signing Config

  1. 选择发布部分并提供您的发布应用信息,然后点击“应用”和“确定”。

signin

前往您的应用级别的build.gradle文件,更改您的buildTypes > "release"部分,如下截图所示。

final

然后运行你的项目。愉快编码。

1
你从哪里获取.jks文件? - Marc Alexander
@MarcAlexander 这里没有任何 .jks 代码生成截图。你可以从 Android Studio 编辑器中生成 .jks 文件。 - Shohel Rana
3
第六步也可以在项目结构中完成。 项目结构-> 构建变量-> 模块(应用程序)-> 签名配置。 (根据NightFurrys的答案)。 - Vít Kapitola
谢谢。我正在寻找发布变体的SHA-256密钥,以便将其添加到Firebase控制台。按照步骤后,我成功获取了发布版的SHA-256和SAH-1密钥。之前我一个都没有得到。 - Saad Zahoor

38

我成功地调试了已签名的APK,按照以下步骤进行:

  1. 在“Build Variant”工具栏中选择“release”版本
  2. 在模块的Build.gradle中,为release构建类型设置debuggable true
  3. 转到文件->项目结构->签名选项卡下填写所有信息->Flavors选项卡->选择您刚刚创建的签名配置
  4. 设置断点
  5. 以调试模式运行应用程序

对我不起作用。我已经为暂存变体设置了debuggable true,但在构建之前仍需要签署apk。 - Nishant Tanwar

19

对于Gradle Kotlin dsl

signingConfigs {
    create("releaseConfig") {
        storeFile = file("your keystore file path")
        storePassword = "storePassword"
        keyAlias = "keyAlias"
        keyPassword = "keyPassword"
    }
}
buildTypes {
    getByName("release") {
        signingConfig = signingConfigs.getByName("releaseConfig")
        isMinifyEnabled = true
        isShrinkResources = true
        proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
    }
}

16

签名配置应该在构建类型之前。

signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }

        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androidotherkey"
            keyPassword "android"
        }
    }

    buildTypes {
        bar {
            debuggable true
            jniDebugBuild true
            signingConfig signingConfigs.debug
        }
        foo {
            debuggable false
            jniDebugBuild false
            signingConfig signingConfigs.myConfig
        }
    }

14

如果你想以调试模式运行应用程序

1)看左下角,收藏夹上方有构建变体

2)点击构建变体。 点击发布并选择调试

它完美地工作!


11

根据Stéphane的建议,我通过更改构建变体解决了我的问题。如果有人像我一样苦苦寻找“构建变体”,这里是一张截图,您可以在其中找到它。

输入图片描述


2
我在将构建变体从Debug更改为Release后遇到了问题。 - Parth Patel

11

你下载的应用项目可能在 build.gradle 文件中包含已签名的信息。如果你看到类似下面的代码:

buildTypes {
    debug {
        signingConfig signingConfigs.release
    }
    release {
        signingConfig signingConfigs.release
    }
}
你可以删除它们,然后再试一次。

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