我无法在Android Studio中打开现有的密钥库文件,也无法从命令行使用jarsigner
。
在这两种情况下,错误信息都是:
java.security.cert.CertificateException:无法初始化,java.io.IOException:DerInputStream.getLength():找到冗余长度字节
显然这是一个应该用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更新解决问题,或者有办法从密钥库中删除冗余长度字节?
答案 0 :(得分:2)
我也遇到了同样的错误,我按照下面的解决方案1修复了它。您可以尝试解决方案1来解决它。否则,请关注其他解决方案。
将JDK从7更新为8
您可以运行以下命令列出密钥库文件的内容:
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
为了获得所有细节,我必须添加 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的新应用程序签名来使其工作了,并要求他们的支持来重置上传密钥。