【问题标题】:android studio: release apk is not signedandroid studio:发布 apk 未签名
【发布时间】:2016-04-05 19:54:55
【问题描述】:

* 自从最初发布后,我已经改写了帖子 *

当我尝试运行刚刚构建的发行版 apk 时,我收到错误消息“您当前选择的变体的 apk ... 未签名。”这是在编辑配置弹出窗口中。这是我的步骤:

  1. 在“构建变体”选项卡中,选择“发布”
  2. 在菜单中,选择 Build -> Generate Signed APK
  3. 在弹出窗口中,填写密钥库和密码字段。
  4. 在第二个面板中,将目标文件夹更改为 ...\app\build\outputs\apk(请参见下面的注释 *)
  5. 观察工作室右上角的通知:APK 生成成功。
  6. 在菜单中,单击运行 -> 运行应用程序。
  7. 我收到一个“编辑配置”弹出窗口,并显示错误“您当前选择的变体的 apk ... 未签名。

那么,为什么会出现这个错误?生成的 APK 似乎是有效的。我已成功将其发布到 Android 商店(仅限 alpha 测试)并验证堆栈转储已被混淆。

我不能将它(上面的第 6 步)下载到我的设备上。我想没关系,因为我可以下载调试版本就好了。

(*) Android Studio 将发布 apk 的输出默认设置为更高、可能更方便的目录。但是,当生成的文件分散在各处时,我发现很难管理它们的一致性,因此我更喜欢将所有生成的 apk 放在一个地方。

【问题讨论】:

  • “我使用指定的密钥库和提供的密码构建了发布版本。”:您是如何构建的?使用 android studio UI 或 gradle 命令?需要更多信息。
  • 刚建好的;对不起,拼错了
  • 我使用了工作室 - Build -> Generate Signed APK... 向导。
  • @PeriHartman 你能发表你的答案吗
  • 我没有答案。也许它适用于 A.S. 2.0 - 我还没有升级。

标签: android-studio release


【解决方案1】:

转到文件\项目结构

完成! ;)

【讨论】:

  • 谢谢。如果还有其他模块,只需要签名app即可。
  • 传奇发现。很棒的答案。
  • 此接口与当前版本的 AS 不是最新的。有人可以更新吗?
  • 截至 Android Studio 北极狐:文件 -> 项目结构 -> 构建变体 -> 签名配置
【解决方案2】:

在项目结构中设置签名配置。

  1. 文件 -> 项目结构...
  2. 选择模块/应用程序(或其他模块)
  3. 单击“签名”选项卡并填写。
    首先是密钥别名和密钥密码。 “生成签名的 APK”对话框中的顺序不同。
  4. 单击构建类型选项卡并选择发布。
    在 Signing config 下拉列表中选择“config”。
  5. 单击“确定”关闭项目结构。
  6. 运行 -> 运行应用程序

运行(或调试)应用程序似乎使用通过“构建 -> 构建 APK”构建的 apk。 因此,如果应用模块的构建变体是“发布”,我们应该设置签名配置。

【讨论】:

  • 您可以按错误文本右侧的“修复”按钮跳转到签名选项卡
【解决方案3】:

将此行添加到 build.gradle 中的发布 {...}

signingConfig signingConfigs.config

【讨论】:

  • 为我节省了很多时间。谢谢
【解决方案4】:

首先,如果没有,则创建一个密钥库文件。

  1. 从下拉菜单中点击构建
  2. 选择生成签名的APK
  3. 点击下一步
  4. 单击创建新密钥库
  5. 为密钥库和别名填写密钥库路径、别名、密码表格,证书区域至少填写一个字段。
  6. 点击确定
  7. 将在指定的密钥库路径中创建一个密钥库文件。

第二次应用构建 gradle 文件更新为类似这样的文件以包含签名配置。

android {
    signingConfigs {
        config {
            keyAlias 'mykeyalias'
            keyPassword 'android'
            storeFile file('/Users/yourname/path/to/the/android/project/folder/android_project_folder_name/app/debug.keystore')
            storePassword 'android'
        }
    }
    buildTypes {
        debug {
            applicationIdSuffix = ".debug"
            versionNameSuffix "-debug"
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
    }
}

第三,构建并运行应用程序,完成。

【讨论】:

    【解决方案5】:

    https://developer.android.com/studio/publish/app-signing#secure-shared-keystore 中写道,您不应将凭据信息保存在build.gradle 和VCS 中。所以创建一个签名配置文件(Build > Generate Signed APK...),然后这样做。

    在您的根目录中创建一个名为keystore.properties 的文件 项目。此文件应包含您的签名信息,如 如下:

    storePassword=myStorePassword
    keyPassword=mykeyPassword
    keyAlias=myKeyAlias
    storeFile=myStoreFileLocation
    

    在您模块的 build.gradle 文件中,添加代码以加载您的 keystore.properties 文件位于 android {} 块之前。

    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    def keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    def keystoreProperties = new Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    

    您可以使用 keystoreProperties 引用存储的属性 语法keystoreProperties['propertyName']。修改signingConfigs 模块的 build.gradle 文件块以引用签名 使用此语法存储在keystoreProperties 中的信息。

    android {
        signingConfigs {
            config {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
        ...
    }
    

    您可以选择在build.gradle 中添加:

    buildTypes {
        release {
            ...
            signingConfig signingConfigs.config
        }
    }
    

    现在您可以制作一个签名的 apk。不要忘记从 VCS 中排除 keystore.properties

    【讨论】:

      【解决方案6】:

      尝试在你的构建文件中添加这个:

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

      【讨论】:

      • 谢谢,我错过了“signingConfig signingConfigs.release”
      【解决方案7】:

      在 build.gradle 中添加这段代码

      构建类型 { 发布 { 缩小启用假 收缩资源假 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 签名配置签名配置.debug } 调试{ 缩小启用假 签名配置签名配置.debug } }

      【讨论】:

        【解决方案8】:

        我遇到了同样的问题,结果我错误地配置了 signingConfigs 属性。

        具体来说,我以为我没有为我实际设置的密钥设置密码。添加缺少的信息后,它起作用了。

        signingConfigs {
                config {
                    keyAlias 'key0'
                    storeFile file('C:/Users/xxx/xxx/keystore/xxx.jks')
                    storePassword '123'
                    keyPassword '123' // this was missing
                }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-24
          • 2014-05-05
          • 1970-01-01
          • 1970-01-01
          • 2016-08-29
          • 1970-01-01
          • 1970-01-01
          • 2015-08-15
          相关资源
          最近更新 更多