android studio:发布apk没有签名

问题描述 投票:10回答:7

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

当我尝试运行一个刚构建的版本apk时,我收到一个错误“你当前选择的版本的apk没有签名。”这是在“编辑配置”弹出窗口中。这是我的步骤:

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

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

我不能做的是将它(上面的步骤6)下载到我的设备。我想这没关系,因为我可以下载调试版本。

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

android-studio release
7个回答
17
投票

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

  1. 文件 - >项目结构......
  2. 选择模块/应用程序(或其他模块)
  3. 单击“签名”选项卡并填写。 密钥别名和密钥密码首先出现。 “Generate Signed APK”对话框中的顺序不同。
  4. 单击Build Types选项卡并选择release。 在签名配置下拉列表中选择“配置”。
  5. 单击确定以关闭项目结构。
  6. 运行 - >运行应用程序

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


17
投票

转到文件\项目结构

Signing Tab

Flavor Tab

Build Type

完成! ;)


3
投票

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

signingConfig signingConfigs.config

0
投票

尝试在构建文件中添加:

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

0
投票

首先,如果没有密钥库文件,请创建密钥库文件。

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

第二次将app build 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
        }
    }
}

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


0
投票

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


0
投票

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

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

signingConfigs {
        config {
            keyAlias 'key0'
            storeFile file('C:/Users/xxx/xxx/keystore/xxx.jks')
            storePassword '123'
            keyPassword '123' // this was missing
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.