无法在AndroidStudio中打开密钥库 - “找到冗余长度字节”

时间:2017-07-27 13:46:26

标签: android macos java-8 apk signing

我无法在Android Studio中打开现有的密钥库文件,也无法从命令行使用jarsigner

在这两种情况下,错误信息都是:

  

java.security.cert.CertificateException:无法初始化,java.io.IOException:DerInputStream.getLength():找到冗余长度字节

见截图:
Android Studio

显然这是一个应该用JDK8_131修复的问题,但对我不起作用。 (我们都在使用OSX)

我也在travis上得到了同样的错误。 (参见下面的“更新”部分。)

我发现了另一个SO问题(Signing android app throws IOException: Redundant length bytes found),他们将.pkc12文件转换为.keystore但我们已经在使用.keystore

更新

我发现构建也开始在travis上失败,因为他们正在将构建版本移动到新的发行版trusty,它下载最新的JDK,而precise默认使用JDK7。将dist: precise添加到.travis.yml文件的顶部现在可以正常工作,但这绝对不是永久解决方案。

我们是否只希望JDK更新解决问题,或者有办法从密钥库中删除冗余长度字节?

3 个答案:

答案 0 :(得分:2)

我也遇到了同样的错误,我按照下面的解决方案1修复了它。您可以尝试解决方案1来解决它。否则,请关注其他解决方案。

解决方案1 ​​

  

将JDK从7更新为8

解决方案2

您可以运行以下命令列出密钥库文件的内容:

import { Injectable } from '@angular/core';
import {Http,Response} from '@angular/http';

@Injectable()
export class SampleService {
  constructor(private http:Http) { }

  getData(){

    this.http.get(url)
   .map((res:Response) => (
       res.json() //Convert response to JSON
       //OR
       res.text() //Convert response to a string
   ))
   .subscribe(data => {console.log(data)})

  }
}

如果要查找特定别名,还可以在命令中指定它:

keytool -list -keystore .keystore

如果找不到别名,则会显示异常:

keytool -list -keystore .keystore -alias foo

解决方案3

为了获得所有细节,我必须添加 keytool error: java.lang.Exception: Alias does not exist 选项

-v

它肯定会帮助您解决错误,或者您可以获取密钥库的内容,并可以生成应用程序的新密钥库。

答案 1 :(得分:0)

最后,我们可以使用Google Play App Signing来解决此问题。

我们使用一台装有JDK 7的机器来执行App Signing教程中所述的所有步骤。

然后,我们使用JDK9机器创建了新的密钥库。

答案 2 :(得分:0)

我遇到了完全相同的问题,没有一个解决方案。

我终于通过上传使用pepk工具生成的私钥升级到Google的新应用程序签名来使其工作了,并要求他们的支持来重置上传密钥。