使用JDK1.6以编程方式签名Jar文件但使用JDK1.7

时间:2015-05-29 10:17:41

标签: java android jdk1.6 jarsigner

我们正在开发一个Java实用程序来以编程方式签署Jar文件,但是面临的问题是签署JDK 1.6的Jar,因为它正在为JDK1.7正常工作

以下是用于对APK文件进行签名的代码段:

private void signAPK(){

    APK_SIGNER_COMMAND = "jarsigner -verbose -keystore keystore_file.keystore -digestalg SHA1 apk_file.apk Alias_Value -storepass Password_value";

    try {
        System.out.println(APK_SIGNER_COMMAND);
        Process p = Runtime.getRuntime().exec(APK_SIGNER_COMMAND);

        BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));            
        String line=reader.readLine();              
        while(line!=null){ 
            System.out.println(line);
            line=reader.readLine();
        }       

        reader.close();
        p.destroy();
    } catch (IOException e) {           
        e.printStackTrace();
    }
}

对于JDK1.7 jar / apk文件正确签名,但对于JDK 1.6应用程序在读取器readline(String line = reader.readLine();)的行被阻止。 有人可以帮助解释为什么这可能不适用于JDK1.6版本。

感谢。帮助感谢。

1 个答案:

答案 0 :(得分:0)

正在发生这种情况是因为您正在使用SHA1,对于JDK1.6使用SHA256。你或许可以签名。

更改摘要算法可能会有所帮助。

Jarsigner对JDK1.7和JDK1.6使用不同的摘要算法

JDK1.6 jarsigner docs

JDK1.7 jarsigner docs