Android jar是使用有效密钥库签名的,是否需要SHA1证书?

时间:2017-05-16 23:11:03

标签: android android-studio cryptography digital-signature

我正在尝试为我的应用生成已签名的APK。我使用Android Studio生成发布APK:build>生成签名APK。然后我为我的密钥库,别名和密码弹出一个弹出窗口。这个过程过去一直有效,但我怀疑,在最近升级了工具和其他支持后,它停止了工作。如何让Android Studio生成带有效签名的签名APK?

当我使用jarsigner检查APK时,从Java 1.8版本开始,我收到消息:

  

jar未签名。 (签名丢失或无法解析)

如果我使用jarsigner对应用进行签名,则会在大多数设备上安装,但不会在运行Android 4.1的设备上安装。我使用的命令是:

jarsigner -verbose -keystore "...path...\perinote-release.keystore" app-release.apk perinote

此外,如果我添加到jarsigner选项:

  

-digestalg SHA1 -sigalg MD5withRSA

它被Android 4.1设备接受。我在另一篇帖子no manifest. jar is unsigned. (signatures missing or not parsable)中找到了这些选项,表明在某些时候,从SHA1到SHA2的加密发生了变化。

这是" app"

的build.gradle
apply plugin: 'com.android.application'

android {
    signingConfigs {
        release {
            keyAlias 'perinote'
            storeFile file('...path.../perinote-release.keystore')
        }
    }
    compileSdkVersion 24
    buildToolsVersion "25.0.0"
    compileOptions.encoding = 'UTF-8'
    defaultConfig {
        applicationId "com.perinote.camera"
        minSdkVersion 15
        targetSdkVersion 24

        renderscriptTargetApi 20
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.release
        }
    }
    lintOptions {
        checkReleaseBuilds false
    }
}

dependencies {
    compile 'com.android.support:support-v4:24.0.0'
    testCompile 'junit:junit:4.12'
}

如何配置Android Studio以使用SHA1,以便我的应用程序可以继续在Android 4.1设备上运行?或者我还应该做些什么呢?

编辑:我意识到我应该切换到SHA256。但我仍然需要一种方法让我的应用程序在Android 4.1上运行。我是否需要生成两个版本并发布它们?

1 个答案:

答案 0 :(得分:3)

要获得两个签名版本,只需选中第二个生成签名APK 对话框底部的V1和V2复选框。

我没有注意到在更新AS之后这个对话框发生了变化并且直接吹过它。