Skip to content

Commit 3b71f90

Browse files
committed
Sign APK using SignedJarBuilder
1 parent 12ce9c3 commit 3b71f90

File tree

7 files changed

+476
-33
lines changed

7 files changed

+476
-33
lines changed

build.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@
4545
${processing.dir}/app/pde.jar;
4646
${processing.dir}/app/lib/ant.jar;
4747
${processing.dir}/app/lib/ant-launcher.jar;
48-
${processing.dir}/app/lib/antlr.jar"
48+
${processing.dir}/app/lib/antlr.jar;
49+
mode/org.eclipse.core.runtime-3.1.0.jar"
4950
debug="on">
5051
<src path="src" />
5152
</javac>
443 KB
Binary file not shown.

src/processing/mode/android/AndroidBuild.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import processing.app.exec.ProcessHelper;
3535
import processing.app.exec.ProcessResult;
3636
import processing.core.PApplet;
37+
import processing.mode.android.signing.JarSigner;
3738
import processing.mode.java.JavaBuild;
3839

3940
import java.io.*;
@@ -304,11 +305,12 @@ private File signPackage(File projectFolder, String keyStorePassword) throws Exc
304305

305306
File unsignedPackage = new File(projectFolder, "bin/" + sketch.getName() + "-release-unsigned.apk");
306307
if (!unsignedPackage.exists()) return null;
308+
File signedPackage = new File(projectFolder, "bin/" + sketch.getName() + "-release-signed.apk");
307309

308-
JarSigner.signJar(unsignedPackage, AndroidKeyStore.ALIAS_STRING, keyStorePassword, keyStore.getAbsolutePath(), keyStorePassword);
310+
JarSigner.signJar(unsignedPackage, signedPackage, AndroidKeyStore.ALIAS_STRING, keyStorePassword, keyStore.getAbsolutePath(), keyStorePassword);
309311

310312
//if (verifySignedPackage(unsignedPackage)) {
311-
File signedPackage = new File(projectFolder, "bin/" + sketch.getName() + "-release-signed.apk");
313+
/*File signedPackage = new File(projectFolder, "bin/" + sketch.getName() + "-release-signed.apk");
312314
if (signedPackage.exists()) {
313315
boolean deleteResult = signedPackage.delete();
314316
if (!deleteResult) {
@@ -323,7 +325,7 @@ private File signPackage(File projectFolder, String keyStorePassword) throws Exc
323325
Base.showWarning("Error during package signing",
324326
"Unable to rename package file");
325327
return null;
326-
}
328+
}*/
327329

328330
File alignedPackage = zipalignPackage(signedPackage, projectFolder);
329331
return alignedPackage;

src/processing/mode/android/JarSigner.java

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package processing.mode.android.signing;
2+
3+
import java.io.IOException;
4+
import java.security.GeneralSecurityException;
5+
import java.security.PrivateKey;
6+
import java.security.cert.X509Certificate;
7+
import java.util.jar.JarOutputStream;
8+
9+
public interface IApkSignatureProvider {
10+
11+
public void writeSignatureBlock(byte[] message, String signatureAlgorithm, X509Certificate publicKey,
12+
PrivateKey privateKey,JarOutputStream mOutputJar)throws IOException, GeneralSecurityException;
13+
14+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package processing.mode.android.signing;
2+
3+
import java.io.*;
4+
import java.security.*;
5+
import java.security.cert.CertificateException;
6+
import java.security.cert.X509Certificate;
7+
8+
/**
9+
* Created by ibziy_000 on 17.08.2014.
10+
*/
11+
public class JarSigner {
12+
public static void signJar(File jarToSign, File outputJar, String alias, String keypass, String keystore, String storepass)
13+
throws GeneralSecurityException, IOException, SignedJarBuilder.IZipEntryFilter.ZipAbortException {
14+
15+
PrivateKey mPrivateKey;
16+
X509Certificate mCertificate;
17+
18+
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
19+
FileInputStream fis = new FileInputStream(keystore);
20+
keyStore.load(fis, storepass.toCharArray());
21+
fis.close();
22+
23+
KeyStore.PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry)keyStore.getEntry(
24+
alias, new KeyStore.PasswordProtection(keypass.toCharArray()));
25+
if (entry != null) {
26+
mPrivateKey = entry.getPrivateKey();
27+
mCertificate = (X509Certificate) entry.getCertificate();
28+
} else {
29+
throw new KeyStoreException("Couldn't get key");
30+
}
31+
32+
SignedJarBuilder builder = new SignedJarBuilder(
33+
new FileOutputStream(outputJar, false), mPrivateKey, mCertificate);
34+
builder.writeZip(new FileInputStream(jarToSign), null);
35+
builder.close();
36+
}
37+
}

0 commit comments

Comments
 (0)