Skip to content

Commit 219177c

Browse files
committed
Use ant tools for signing
1 parent 899a08a commit 219177c

File tree

5 files changed

+56
-43
lines changed

5 files changed

+56
-43
lines changed

build.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@
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;
49-
${tools.jar.path}"
48+
${processing.dir}/app/lib/antlr.jar"
5049
debug="on">
5150
<src path="src" />
5251
</javac>

mode/tools.jar

-14.5 MB
Binary file not shown.

src/processing/mode/android/AndroidBuild.java

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import processing.app.exec.ProcessResult;
3434
import processing.core.PApplet;
3535
import processing.mode.java.JavaBuild;
36-
import sun.security.tools.JarSigner;
3736

3837
import java.io.*;
3938
import java.security.Permission;
@@ -294,52 +293,36 @@ private File signPackage(File projectFolder, String keyStorePassword) throws Exc
294293
File unsignedPackage = new File(projectFolder, "bin/" + sketch.getName() + "-release-unsigned.apk");
295294
if(!unsignedPackage.exists()) return null;
296295

297-
String[] args = {
298-
"-sigalg", "SHA1withRSA",
299-
"-digestalg", "SHA1",
300-
"-keypass", keyStorePassword,
301-
"-storepass", keyStorePassword,
302-
"-keystore", keyStore.getCanonicalPath(),
303-
unsignedPackage.getCanonicalPath(),
304-
AndroidKeyStore.ALIAS_STRING
305-
};
306-
307-
// TODO remove hardcoded tools.jar path from build.xml
296+
JarSigner.signJar(unsignedPackage, AndroidKeyStore.ALIAS_STRING, keyStorePassword, keyStore.getAbsolutePath(), keyStorePassword);
308297

309-
SystemExitControl.forbidSystemExitCall();
310-
try {
311-
JarSigner.main(args);
312-
} catch (SystemExitControl.ExitTrappedException ignored) { }
313-
SystemExitControl.enableSystemExitCall();
314-
315-
if(verifySignedPackage(unsignedPackage)) {
316-
File signedPackage = new File(projectFolder, "bin/" + sketch.getName() + "-release-signed.apk");
317-
if(signedPackage.exists()) {
318-
boolean deleteResult = signedPackage.delete();
319-
if(!deleteResult) {
320-
Base.showWarning("Error during package signing",
321-
"Unable to delete old signed package");
322-
return null;
323-
}
324-
}
325-
326-
boolean renameResult = unsignedPackage.renameTo(signedPackage);
327-
if(!renameResult) {
298+
//if(verifySignedPackage(unsignedPackage)) {
299+
File signedPackage = new File(projectFolder, "bin/" + sketch.getName() + "-release-signed.apk");
300+
if(signedPackage.exists()) {
301+
boolean deleteResult = signedPackage.delete();
302+
if(!deleteResult) {
328303
Base.showWarning("Error during package signing",
329-
"Unable to rename package file");
304+
"Unable to delete old signed package");
330305
return null;
331306
}
307+
}
332308

333-
File alignedPackage = zipalignPackage(signedPackage, projectFolder);
334-
return alignedPackage;
335-
} else {
309+
boolean renameResult = unsignedPackage.renameTo(signedPackage);
310+
if(!renameResult) {
336311
Base.showWarning("Error during package signing",
337-
"Verification of the signed package has failed");
312+
"Unable to rename package file");
338313
return null;
339314
}
315+
316+
File alignedPackage = zipalignPackage(signedPackage, projectFolder);
317+
return alignedPackage;
318+
/*} else {
319+
Base.showWarning("Error during package signing",
320+
"Verification of the signed package has failed");
321+
return null;
322+
}*/
340323
}
341324

342-
private boolean verifySignedPackage(File signedPackage) throws Exception {
325+
/*private boolean verifySignedPackage(File signedPackage) throws Exception {
343326
String[] args = {
344327
"-verify", signedPackage.getCanonicalPath()
345328
};
@@ -363,7 +346,7 @@ private boolean verifySignedPackage(File signedPackage) throws Exception {
363346
printStream.close();
364347
365348
return result.contains("verified");
366-
}
349+
} */
367350

368351
private File zipalignPackage(File signedPackage, File projectFolder) throws IOException, InterruptedException {
369352
String zipalignPath = sdk.getSdkFolder().getAbsolutePath() + "/tools/zipalign";

src/processing/mode/android/AndroidKeyStore.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package processing.mode.android;
22

33
import processing.app.Base;
4-
import sun.security.tools.KeyTool;
54

65
import java.io.File;
76

@@ -50,7 +49,9 @@ public static void generateKeyStore(String password,
5049
parseDnameField(locality), parseDnameField(state), parseDnameField(country));
5150

5251
String[] args = {
53-
"-genkey",
52+
System.getProperty("java.home")
53+
+ System.getProperty("file.separator") + "bin"
54+
+ System.getProperty("file.separator") + "keytool", "-genkey",
5455
"-keystore", getKeyStoreLocation().getAbsolutePath(),
5556
"-alias", ALIAS_STRING,
5657
"-keyalg", "RSA",
@@ -61,7 +62,8 @@ public static void generateKeyStore(String password,
6162
"-dname", dname
6263
};
6364

64-
KeyTool.main(args);
65+
Process generation = Runtime.getRuntime().exec(args);
66+
generation.waitFor();
6567

6668
if(getKeyStore() == null) throw new Exception();
6769
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package processing.mode.android;
2+
3+
import org.apache.tools.ant.Project;
4+
import org.apache.tools.ant.Target;
5+
import org.apache.tools.ant.taskdefs.SignJar;
6+
7+
import java.io.File;
8+
9+
public class JarSigner extends SignJar {
10+
11+
public JarSigner() {
12+
setProject(new Project());
13+
getProject().init();
14+
setTaskName("signJar");
15+
setTaskType("signJar");
16+
setOwningTarget(new Target());
17+
}
18+
19+
public static void signJar(File jarToSign, String alias, String keypass, String keystore, String storepass) {
20+
JarSigner signer = new JarSigner();
21+
signer.setJar(jarToSign);
22+
signer.setAlias(alias);
23+
signer.setKeypass(keypass);
24+
signer.setKeystore(keystore);
25+
signer.setStorepass(storepass);
26+
signer.setSignedjar(jarToSign);
27+
signer.execute();
28+
}
29+
}

0 commit comments

Comments
 (0)