app-release-unsigned.apk未签名


199

我在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。我应该做些什么?

Answers:


437

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

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

在此处输入图片说明

  1. 右键单击左侧导航窗格中的应用,然后点击打开模块设置

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

在此处输入图片说明

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

-可调试为true

-将Config签名到config。(您刚刚创建的那个)。

在此处输入图片说明

同步您的gradle。请享用!


3
实际生成产品的APK版本时,是否应该将Debuggable设置为false?还是工作室会自己做?
伊桑·加尔格

7
@IshaanGarg在制作发行版APK时应将debuggable设置为false
NightFury

1
您可能会认为它默认为第一个创建的对象,为什么不这样做呢?也许对某些不想签名的软件包进行签名可能会很糟糕……但是,谢谢,我忘了设置构建类型“ Signing Config”,直到屏幕截图,我都不记得了
CrandellWS

14
没有需要设置可调试真正的,(除非真的打算如此)。
Computingfreak

4
您应该知道,虽然在将配置设置为构建类型之后,所有密钥信息(包括密码)将出现在gradle文件中……
Jacob.B

95

确保将构建变体设置为在Android Studio中调试(而非发布)(检查构建变体面板)。

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

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

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


53

始终使用如下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插件用户指南


但是我为什么要这样做呢?在指南上,他们说:“默认情况下,存在一个调试配置,该配置配置为使用调试密钥库(具有已知密码)和默认密钥(具有已知密码)。” 我的其他应用程序没有任何问题。
安德鲁(Andrew)2014年

如果您的密码正确并且debug.keystore可以访问,我不知道。我过去在此遇到的常见问题是文件权限或目录权限。也许您下载的项目保留了Android Studio本地文件,该文件指向除您以外的其他调试密钥库。无论如何,您的Gradle日志必须显示路径错误,请提供该日志以获取更多帮助。
Martin还原2014年

嗯,对我也不起作用。没有gradle错误,但仍然出现签名错误(并且指向我的密钥文件)。
Brian Knoblauch 2014年

嗨,布莱恩!您可以尝试删除debug.keystore吗?然后启动一个新的虚拟项目,并且必须生成一个新的密钥库。之后,重新打开您的实际项目并尝试。如果之前没有其他评论,这是我唯一推荐的方法。
Martin还原2014年

1
是不是debug.keystore位于.android文件夹?您可能需要给出完整的路径,除非将其移入项目中
Gokhan Arik

35

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

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

不为我工作。我已经为舞台变量设置了debugbable true,但是仍然需要在构建之前对apk进行签名。
Nishant Tanwar

18

如果有人想使用Android Studio 3.5调试和发布单独的构建版本,请执行以下步骤:1.将构建版本设置为发布模式。

构建变体

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

签名配置

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

登入

  1. 转到您的应用程序级别,build.gradle然后更改您的buildTypes“发布”部分,如屏幕截图所示。

最后

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


您从哪里获得.jks文件?
马克·亚历山大

@MarcAlexander这里没有任何.jks代码生成屏幕截图。您可以从Android Studio编辑器生成.jks文件。
Shohel Rana

13

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


9

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

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

您可以删除它们,然后重试。


8

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

6

出于安全原因,您无法在Android上安装未签名的APK。因此,如果您只有未签名的apk:您必须对其进行签名。这是这样做的方法:链接

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

替代方法可以是:

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

1
我不确定我是否了解。我下载了应用程序代码的zip压缩文件,并尝试使用Android Studio进行编译...
andrew

因此您必须编译一个签名版本。通常,已签名版本是在同一时间生成的,并且与未签名版本位于同一目录中。
ben75

如果我生成一个签名的apk,它可以工作,但是每次必须测试该应用程序时,我都做不到。我在这里丢失了一些东西,我只想像使用自己的应用程序一样尝试该应用程序...
andrew 2014年

5

我的问题已通过按照Stéphane的建议更改构建变体来解决,如果有人在努力寻找“构建变体”(如我在此处所做的那样)的屏幕快照中,您可以找到它。

在此处输入图片说明


1
在从Debug到Release的更改构建变体之后,我面临问题
Parth Patel


2

我如何解决这个问题

发生此错误的原因是您已将构建变体设置为发布模式。将其设置为构建模式,然后再次运行项目。

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


我只有“调试”和“发布”选项吗?
史蒂夫·史密斯,

0

我的解决方案是将签名配置的名称从默认的“ config”更改为“ debug”。为了验证,我将其更改为其他随机名称,然后再次得到该错误,然后将其更改回“ debug”,该错误消失了。因此,尽管这似乎是虚假的,而且我倾向于不相信这是整个故事,但请尝试一下此解决方案。


0

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

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

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


0

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

  • 进入LastPass(我用来保留所有密码的服务)
  • 通过将光标放在密码上方并双击来选择我的密码
  • 选择后,我按C来复制
  • 去Android研究并粘贴了cmd V

注意,我确实尝试过多次复制,方法是通过单击密码末尾的来选择密码,然后通过移动鼠标来选择密码。

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

我也确实使用了@NightFury在本文中解释的“打开模块设置”>“签名...”方法。


0

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

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        applicationIdSuffix ".debug"
        debuggable true
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.