【问题标题】:app-release-unsigned.apk is not signedapp-release-unsigned.apk 未签名
【发布时间】:2023-03-25 05:45:01
【问题描述】:

我在 github 上下载了一个 Android 应用程序的 zip 文件,我正在尝试运行它,但我收到一个包含此消息的对话框

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”,重新启动项目并且它工作了

标签: android github android-studio digital-signature


【解决方案1】:

如果有人想使用 Android Studio 调试 发布 构建,请按照以下步骤操作:

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

  1. 右击左侧导航窗格中的app,点击打开模块设置

  2. 转到签名选项卡。添加签名配置并填写信息。也选择您的钥匙串。

  1. 转到构建类型选项卡。选择释放模式并设置:

-可调试为true

-签署配置到config。 (你刚刚创建的那个)。

同步你的 gradle。尽情享受吧!

【讨论】:

  • 在实际为 prod 生成发布 APK 时,我们是否应该将 Debuggable 设置为 false?还是工作室会自己做?
  • @IshaanGarg 你应该在发布 apk 时将 debuggable 设置为 false
  • 您会认为它会默认为第一个创建的奇怪为什么它不...也许对某些人来说签署他们不想签署的包裹会很糟糕...但是谢谢,伙计我忘了设置构建类型“Signing Config”,直到截图,我不记得了
  • 没有不需要Debuggable设置为true,(除非真的打算这样做)。
  • 您应该知道,在将配置设置为构建类型后,您的所有密钥信息(包括密码)都将出现在 gradle 文件中...
【解决方案2】:

确保在 Android Studio 中将 build variant 设置为 debug(而不是 release)(检查 build variant 面板)。

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

但是,您需要创建和配置特定的密钥库以进行发布。

官方文档,涵盖调试和发布模式:https://developer.android.com/tools/publishing/app-signing.html

【讨论】:

    【解决方案3】:

    始终使用 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 Plugin User Guide

    【讨论】:

    • 但是我为什么要这样做呢?在指南上,他们说“默认情况下,有一个调试配置设置为使用调试密钥库,具有已知密码和具有已知密码的默认密钥。”。我对其他应用程序没有任何问题。
    • 如果你的密码没问题并且可以访问 debug.keystore,我不知道。我过去看到的常见问题是文件权限或目录权限。也许您下载的项目保留了指向其他调试密钥库的 Android Studio 本地文件。在任何情况下,您的 Gradle 日志都必须显示路径错误,请包含该日志以获得更多帮助。
    • 嗯,对我也不起作用。没有 gradle 错误,但仍然收到签名错误(它指向我的密钥文件)。
    • 嗨,布赖恩!您可以尝试删除您的 debug.keystore 吗?然后启动一个新的虚拟项目,并且必须生成一个新的密钥库。之后,重新打开您的实际项目并尝试。如果之前有任何其他评论失败,这是我唯一可以推荐的。
    • debug.keystore 不是位于.android 文件夹中吗?除非您将其移至项目中,否则您可能希望提供完整路径
    【解决方案4】:

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

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

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

    1. 转到您的应用级别 build.gradle 并更改您的 buildTypes >“发布”部分,如下图所示。

    然后运行您的项目。快乐编码。

    【讨论】:

    • 从哪里获得 .jks 文件?
    • @MarcAlexander 这里没有任何 .jks 代码生成屏幕截图。您可以从 Android Studio 编辑器生成 .jks 文件。
    • 第 6 步也可以在项目结构中完成。项目结构 -> 构建变体 -> 模块(应用程序) -> 签名配置。 (根据 NightFurrys answer
    • 谢谢。我正在寻找发布变体的 SHA-256 密钥,以便可以将其添加到 Firebase 控制台。遵循这些步骤后,我能够获得 SHA-256 和 SAH-1 密钥以进行释放。在我一无所获之前。
    【解决方案5】:

    我已成功调试已签名的 APK,请按照以下步骤操作:-

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

    【讨论】:

    • 不适合我。我已经为 staging 变体设置了 debuggable true 但仍然需要在构建之前签署 apk。
    【解决方案6】:

    signingConfigs 应该在 buildTypes 之前

    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
            }
        }
    

    【讨论】:

      【解决方案7】:

      对于 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")
          }
      }
      

      【讨论】:

        【解决方案8】:

        如果您想在调试模式下运行应用程序

        1)看左侧底部,收藏夹上方有Build Variants

        2) 单击构建变体。点击发布并选择debug

        效果很好!!!

        【讨论】:

          【解决方案9】:

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

          buildTypes {
              debug {
                  signingConfig signingConfigs.release
              }
              release {
                  signingConfig signingConfigs.release
              }
          }
          

          您可以删除它们并重试。

          【讨论】:

            【解决方案10】:

            按照 Stéphane 的建议,通过更改构建变体解决了我的问题,如果有人像我一样在努力寻找“构建变体”,请在此处找到它的屏幕截图。

            【讨论】:

            • 在将构建变体从调试更改为发布后,我遇到了问题
            【解决方案11】:

            出于安全原因,您不能在 Android 上安装未签名的 apk。因此,如果您只有未签名的 apk:您必须对其进行签名。以下是如何做到这一点:link

            请注意,您可以使用自签名证书对 apk 进行签名。

            替代方案可以是:

            • 下载已签名的 apk(如果有)。
            • 下载源代码,编译它们(使用 Android-Studio 或 gradle 或 ...)。它将生成多个 apk,其中一个将使用您的调试密钥进行签名(因此您将能够安装它)

            【讨论】:

            • 我不确定我是否理解。我下载了应用程序代码的 zip,我正在尝试用 Android Studio 编译它...
            • 所以你必须编译一个签名版本。通常签名版本是同时构建的,并且与未签名版本位于同一目录中。
            • 如果我生成一个签名的 apk 它可以工作,但我不能每次我必须测试应用程序时都这样做。我在这里遗漏了一些东西,我只想像使用自己的应用程序一样尝试该应用程序...
            【解决方案12】:

            我是如何解决这个问题的

            出现此错误是因为您已将构建变体设置为发布模式。将其设置为构建模式并再次运行项目。

            如果你想在发布模式下运行,只需按照我们发布应用时的正常方式生成一个签名的apk

            【讨论】:

            • 我只有“调试”和“发布”选项?
            • 请告诉读者这是在哪里设置以及我们如何到达那里。
            【解决方案13】:

            在工具窗口栏中选择 Build Variants 将 Build Variant 从 Release 更改为 Debug

            【讨论】:

              【解决方案14】:

              我的解决方案是将签名配置的名称从默认的“config”更改为“debug”。为了验证,我将其更改为其他随机名称并再次收到错误,然后将其更改回“调试”并且错误消失了。因此,虽然它看起来是人为的,而且我倾向于不相信这是整个故事,但试试这个解决方案。

              【讨论】:

                【解决方案15】:

                我也出现了这个问题,下面是我的代码

                        storeFile file(properties.getProperty("filepath"))
                        storePassword properties.getProperty("keypassword")
                        keyAlias properties.getProperty("keyAlias")
                        keyPassword properties.getProperty("keypassword")
                

                原因是属性名错误,应该是keyPassword而不是keypassword

                【讨论】:

                  【解决方案16】:

                  最终对我有用的,我不知道为什么,是:

                  • 使用 LastPass(我用来保存所有密码的服务)
                  • 通过将光标放在密码顶部并双击来选择我的密码
                  • 选择后按 cmd C 复制
                  • 去Android学习和cmd V粘贴

                  请注意,我确实尝试通过单击密码末尾来选择密码并通过移动鼠标选择密码来进行多次复制。

                  这很奇怪,但它只能通过双击密码顶部来复制它。

                  我也确实使用了 @NightFury 在这篇文章中解释的 Open Module Settings > Signing... 方法。

                  【讨论】:

                    【解决方案17】:

                    在 build.gradel 文件中添加以下代码行对我有用,将它们添加到 release 下面的 buildTypes 块下,如图所示

                    buildTypes {
                        release {
                            minifyEnabled false
                            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                        }
                        debug {
                            applicationIdSuffix ".debug"
                            debuggable true
                        }
                    

                    【讨论】:

                      猜你喜欢
                      • 2015-01-29
                      • 2020-11-30
                      • 1970-01-01
                      • 2019-10-14
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-05-10
                      • 2016-05-20
                      相关资源
                      最近更新 更多