ZigAndroidTemplate icon indicating copy to clipboard operation
ZigAndroidTemplate copied to clipboard

Use Android SDK apksigner instead JDK jarsigner

Open gajanak opened this issue 2 years ago • 0 comments

Hi again,

Is there a reason to not use the apksigner of SDK ?

Like this: /usr/lib/android-sdk/build-tools/33.0.0/apksigner sign --ks .build_config/android.keystore --ks-key-alias default --ks-pass pass:ziguana app-template.apk

Following a patch : Works for me, perhaps usefull for someone.

diff --git a/Sdk.zig b/Sdk.zig
index 58e3b50..5fbead9 100644
--- a/Sdk.zig
+++ b/Sdk.zig
@@ -42,7 +42,7 @@ pub fn init(b: *Builder, user_config: ?UserConfig, versions: ToolchainVersions)
         const zipalign = std.fs.path.join(b.allocator, &[_][]const u8{ actual_user_config.android_sdk_root, "build-tools", versions.build_tools_version, "zipalign" ++ exe }) catch unreachable;
         const aapt = std.fs.path.join(b.allocator, &[_][]const u8{ actual_user_config.android_sdk_root, "build-tools", versions.build_tools_version, "aapt" ++ exe }) catch unreachable;
         const adb = std.fs.path.join(b.allocator, &[_][]const u8{ actual_user_config.android_sdk_root, "platform-tools", "adb" ++ exe }) catch unreachable;
-        const jarsigner = std.fs.path.join(b.allocator, &[_][]const u8{ actual_user_config.java_home, "bin", "jarsigner" ++ exe }) catch unreachable;
+        const jarsigner = std.fs.path.join(b.allocator, &[_][]const u8{ actual_user_config.android_sdk_root, "build-tools", versions.build_tools_version, "apksigner" ++ exe }) catch unreachable;
         const keytool = std.fs.path.join(b.allocator, &[_][]const u8{ actual_user_config.java_home, "bin", "keytool" ++ exe }) catch unreachable;

         break :blk SystemTools{
@@ -697,17 +680,17 @@ pub fn compressApk(sdk: Sdk, input_apk_file: []const u8, output_apk_file: []cons
 pub fn signApk(sdk: Sdk, apk_file: []const u8, key_store: KeyStore) *Step {
     const sign_apk = sdk.b.addSystemCommand(&[_][]const u8{
         sdk.system_tools.jarsigner,
-        "-sigalg",
-        "SHA1withRSA",
-        "-digestalg",
-        "SHA1",
-        "-verbose",
-        "-keystore",
+        "sign",
+        "--ks",
         key_store.file,
-        "-storepass",
-        key_store.password,
-        sdk.b.pathFromRoot(apk_file),
+        "--ks-key-alias",
         key_store.alias,
+        "--ks-pass",
+        std.mem.concat(sdk.b.allocator, u8, &[_][]const u8{
+            "pass:",
+            key_store.password,
+        }) catch unreachable,
+        sdk.b.pathFromRoot(apk_file),
     });
     return &sign_apk.step;
 }

gajanak avatar Jul 27 '22 13:07 gajanak