android studio:发布apk没有签名

时间:2016-01-01 03:17:23

标签: android-studio release

*自从最初发布*

以来,我已经重新发布了帖子

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

  1. 在Build Variants选项卡中,选择“release”
  2. 在菜单中,选择Build - >生成签名APK
  3. 在弹出窗口中,填写密钥库和密码的字段。
  4. 在第二个面板中,将目标文件夹更改为... \ app \ build \ outputs \ apk(请参阅下面的注释*)
  5. 观察工作室右上方的通知:APK(s)已成功生成。
  6. 在菜单中,点击“运行” - >运行App。
  7. 我收到一个“编辑配置”弹出窗口,其中包含错误“您当前所选变体的apk ...未签名。
  8. 那么,为什么会出现这个错误呢?生成的APK似乎有效。我已成功将其发布到Android商店(仅限alpha测试)并验证堆栈转储是否已被混淆。

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

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

7 个答案:

答案 0 :(得分:17)

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

  1. 文件 - >项目结构......
  2. 选择模块/应用程序(或其他模块)
  3. 点击签名标签并填写。
    密钥别名和密码排在第一位。 “生成签名APK”对话框中的订单不同。
  4. 单击“构建类型”选项卡,然后选择“发布” 在签名配置下拉列表中选择“配置”。
  5. 单击“确定”关闭“项目结构”。
  6. 运行 - >运行应用
  7. 运行(或调试)应用程序似乎使用使用“Buiild - > Build APK”构建的apks。 因此,如果app模块的构建变体是“release”,我们应该设置签名配置。

答案 1 :(得分:14)

转到文件\项目结构

Signing Tab

Flavor Tab

Build Type

完成! ;)

答案 2 :(得分:2)

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

signingConfig signingConfigs.config

答案 3 :(得分:0)

尝试在构建文件中添加:

Name    Duration

Fred    00:00:20
John    12:39:10
Jack    03:59:20
Stacy   19:17:34
Stacy   03:39:00
John    04:20:30
Jack    00:29:17
John    03:23:50
Fred    12:17:29

答案 4 :(得分:0)

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

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

第二应用程序构建包文件更新为类似这样的名称,以包括签名配置。

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 :(得分:0)

https://developer.android.com/studio/publish/app-signing#secure-shared-keystore中写道,您不应该在build.gradle和VCS中保留凭据信息。因此,创建一个签名配置文件(“构建”>“生成签名的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 :(得分:0)

在 build.gradle 中添加这段代码

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