Package proguard.io
Class SignedJarWriter
- java.lang.Object
-
- proguard.io.JarWriter
-
- proguard.io.SignedJarWriter
-
- All Implemented Interfaces:
java.lang.AutoCloseable,DataEntryWriter
public class SignedJarWriter extends JarWriter
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class proguard.io.JarWriter
JarWriter.MyMultiDigestOutputStream
-
-
Field Summary
-
Fields inherited from class proguard.io.JarWriter
creator, currentManifestEntry, DEFAULT_DIGEST_ALGORITHM, digestAlgorithms, manifestEntryWriter, zipEntryWriter
-
-
Constructor Summary
Constructors Constructor Description SignedJarWriter(java.security.KeyStore.PrivateKeyEntry privateKeyEntry, java.lang.String[] digestAlgorithms, java.lang.String creator, int[] apkSignatureSchemeIDs, DataEntryWriter zipEntryWriter)Creates a new SignedJarWriter with the given settings.SignedJarWriter(java.security.KeyStore.PrivateKeyEntry privateKeyEntry, java.lang.String[] digestAlgorithms, java.lang.String creator, DataEntryWriter zipEntryWriter)Creates a new SignedJarWriter with the given settings.SignedJarWriter(java.security.KeyStore.PrivateKeyEntry privateKeyEntry, DataEntryWriter zipEntryWriter)Creates a new SignedJarWriter.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.io.OutputStreamcreateManifestOutputStream(DataEntry manifestEntry)Creates an output stream for the specified manifest file.java.io.OutputStreamcreateOutputStream(DataEntry dataEntry)Creates a new output stream for writing data.protected voidfinish()Writes out the collected manifest file before closing the jar, if any.static voidmain(java.lang.String[] args)Provides a simple test for this class, creating a signed apk file (only v1) with the given name and a few aligned/compressed/uncompressed zip entries.protected voidopenManifestFiles()Prepares streams and writers for capturing digests of a parent entry.voidprintln(java.io.PrintWriter pw, java.lang.String prefix)Prints out the structure of the data entry writer.-
Methods inherited from class proguard.io.JarWriter
close, createDirectory, finishIfNecessary, printWriter, sameOutputStream
-
-
-
-
Constructor Detail
-
SignedJarWriter
public SignedJarWriter(java.security.KeyStore.PrivateKeyEntry privateKeyEntry, DataEntryWriter zipEntryWriter)Creates a new SignedJarWriter.- Parameters:
privateKeyEntry- the private key to be used for signing the zip entries.zipEntryWriter- the data entry writer that can provide output streams for the jar entries.
-
SignedJarWriter
public SignedJarWriter(java.security.KeyStore.PrivateKeyEntry privateKeyEntry, java.lang.String[] digestAlgorithms, java.lang.String creator, DataEntryWriter zipEntryWriter)Creates a new SignedJarWriter with the given settings.- Parameters:
privateKeyEntry- the private key to be used for signing the zip entries.digestAlgorithms- the manifest digest algorithms, e.g. "SHA-256".creator- the creator to mention in the manifest file.zipEntryWriter- the data entry writer that can provide output streams for the jar entries.
-
SignedJarWriter
public SignedJarWriter(java.security.KeyStore.PrivateKeyEntry privateKeyEntry, java.lang.String[] digestAlgorithms, java.lang.String creator, int[] apkSignatureSchemeIDs, DataEntryWriter zipEntryWriter)Creates a new SignedJarWriter with the given settings.- Parameters:
privateKeyEntry- the private key to be used for signing the zip entries.digestAlgorithms- the manifest digest algorithms, e.g. "SHA-256".creator- the creator to mention in the manifest file.apkSignatureSchemeIDs- an optional list of external APK signature scheme IDs to be specified with the attribute "X-Android-APK-Signed" in *.SF files.zipEntryWriter- the data entry writer that can provide output streams for the jar entries.
-
-
Method Detail
-
createOutputStream
public java.io.OutputStream createOutputStream(DataEntry dataEntry) throws java.io.IOException
Description copied from interface:DataEntryWriterCreates a new output stream for writing data. The caller is responsible for closing the stream.- Specified by:
createOutputStreamin interfaceDataEntryWriter- Overrides:
createOutputStreamin classJarWriter- Parameters:
dataEntry- the data entry for which the output stream is to be created.- Returns:
- the output stream. The stream may be
nullto indicate that the data entry should not be written. - Throws:
java.io.IOException
-
println
public void println(java.io.PrintWriter pw, java.lang.String prefix)Description copied from interface:DataEntryWriterPrints out the structure of the data entry writer.- Specified by:
printlnin interfaceDataEntryWriter- Overrides:
printlnin classJarWriter- Parameters:
pw- the print stream to which the structure should be printed.prefix- a prefix for every printed line.
-
openManifestFiles
protected void openManifestFiles() throws java.io.IOExceptionDescription copied from class:JarWriterPrepares streams and writers for capturing digests of a parent entry.- Overrides:
openManifestFilesin classJarWriter- Throws:
java.io.IOException
-
createManifestOutputStream
protected java.io.OutputStream createManifestOutputStream(DataEntry manifestEntry) throws java.io.IOException
Description copied from class:JarWriterCreates an output stream for the specified manifest file.- Overrides:
createManifestOutputStreamin classJarWriter- Throws:
java.io.IOException
-
finish
protected void finish() throws java.io.IOExceptionDescription copied from class:JarWriterWrites out the collected manifest file before closing the jar, if any.
-
main
public static void main(java.lang.String[] args)
Provides a simple test for this class, creating a signed apk file (only v1) with the given name and a few aligned/compressed/uncompressed zip entries. Arguments: keystore keystore_password alias password jar_filename Create a keystore with: keytool -genkey -dname 'CN=John Doe, OU=Development, O=Guardsquare, STREET=Tervuursevest, L=Leuven, ST=Brabant, C=Belgium' -keystore /tmp/test.keystore -storepass android -alias AndroidDebugKey -keypass android -keyalg RSA -keysize 512 List the contents of the keystore with keytool -v -list -keystore /tmp/test.keystore -alias androiddebugkey -storepass android Verify the signed jar with: jarsigner -verify -verbose /tmp/test.jar or with: android-sdk/build-tools/24.0.3/apksigner verify --min-sdk-version 19 -v /tmp/test.jar
-
-