diff --git a/src/androidbuild/BuildTools.zig b/src/androidbuild/BuildTools.zig index 736fd70..d06af27 100644 --- a/src/androidbuild/BuildTools.zig +++ b/src/androidbuild/BuildTools.zig @@ -20,7 +20,7 @@ pub const empty: BuildTools = .{ const BuildToolError = Allocator.Error || error{BuildToolFailed}; -pub fn init(b: *std.Build, android_sdk_path: []const u8, build_tools_version: []const u8, errors: *std.ArrayList([]const u8)) BuildToolError!BuildTools { +pub fn init(b: *std.Build, android_sdk_path: []const u8, build_tools_version: []const u8, errors: *std.ArrayListUnmanaged([]const u8)) BuildToolError!BuildTools { const prev_errors_len = errors.items.len; // Get build tools path @@ -38,14 +38,14 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, build_tools_version: [] const message = b.fmt("Android Build Tool version '{s}' not found. Install it via 'sdkmanager' or Android Studio.", .{ build_tools_version, }); - errors.append(message) catch @panic("OOM"); + errors.append(b.allocator, message) catch @panic("OOM"); }, else => { const message = b.fmt("Android Build Tool version '{s}' had unexpected error: {s}", .{ build_tools_version, @errorName(err), }); - errors.append(message) catch @panic("OOM"); + errors.append(b.allocator, message) catch @panic("OOM"); }, }; if (errors.items.len != prev_errors_len) { diff --git a/src/androidbuild/Ndk.zig b/src/androidbuild/Ndk.zig index 2f7401a..e609a33 100644 --- a/src/androidbuild/Ndk.zig +++ b/src/androidbuild/Ndk.zig @@ -28,7 +28,7 @@ pub const empty: Ndk = .{ const NdkError = Allocator.Error || error{NdkFailed}; -pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8, errors: *std.ArrayList([]const u8)) NdkError!Ndk { +pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8, errors: *std.ArrayListUnmanaged([]const u8)) NdkError!Ndk { // Get NDK path // ie. $ANDROID_HOME/ndk/27.0.12077973 const android_ndk_path = b.fmt("{s}/ndk/{s}", .{ android_sdk_path, ndk_version }); @@ -39,7 +39,7 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8 const message = b.fmt("Android NDK version '{s}' not found. Install it via 'sdkmanager' or Android Studio.", .{ ndk_version, }); - try errors.append(message); + try errors.append(b.allocator, message); break :blk false; }, else => { @@ -48,7 +48,7 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8 @errorName(err), android_ndk_path, }); - try errors.append(message); + try errors.append(b.allocator, message); break :blk false; }, }; @@ -82,7 +82,7 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8 ndk_version, ndk_sysroot, }); - try errors.append(message); + try errors.append(b.allocator, message); break :blk false; }, else => { @@ -91,7 +91,7 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8 @errorName(err), ndk_sysroot, }); - try errors.append(message); + try errors.append(b.allocator, message); break :blk false; }, }; @@ -111,7 +111,7 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8 return ndk; } -pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, errors: *std.ArrayList([]const u8)) void { +pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, errors: *std.ArrayListUnmanaged([]const u8)) void { if (ndk.android_sdk_path.len == 0 or ndk.sysroot_path.len == 0) { @panic("Should not call validateApiLevel if NDK path is not set"); } @@ -128,7 +128,7 @@ pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, err @intFromEnum(api_level), ndk_sysroot_target_api_version, }); - errors.append(message) catch @panic("OOM"); + errors.append(b.allocator, message) catch @panic("OOM"); break :blk false; }, else => { @@ -138,7 +138,7 @@ pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, err @errorName(err), ndk_sysroot_target_api_version, }); - errors.append(message) catch @panic("OOM"); + errors.append(b.allocator, message) catch @panic("OOM"); break :blk false; }, }; @@ -160,7 +160,7 @@ pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, err @intFromEnum(api_level), root_jar, }); - errors.append(message) catch @panic("OOM"); + errors.append(b.allocator, message) catch @panic("OOM"); break :blk false; }, else => { @@ -169,7 +169,7 @@ pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, err @errorName(err), root_jar, }); - errors.append(message) catch @panic("OOM"); + errors.append(b.allocator, message) catch @panic("OOM"); break :blk false; }, }; diff --git a/src/androidbuild/apk.zig b/src/androidbuild/apk.zig index 2cecb5a..89b7adf 100644 --- a/src/androidbuild/apk.zig +++ b/src/androidbuild/apk.zig @@ -60,8 +60,8 @@ pub const Options = struct { pub fn create(sdk: *Sdk, options: Options) *Apk { const b = sdk.b; - var errors = std.ArrayList([]const u8).init(b.allocator); - defer errors.deinit(); + var errors = std.ArrayListUnmanaged([]const u8).empty; + defer errors.deinit(b.allocator); const build_tools = BuildTools.init(b, sdk.android_sdk_path, options.build_tools_version, &errors) catch |err| switch (err) { error.BuildToolFailed => BuildTools.empty, // fallthruogh and print all errors below @@ -213,35 +213,37 @@ fn doInstallApk(apk: *Apk) std.mem.Allocator.Error!*Step.InstallFile { // validate { - var errors = std.ArrayList([]const u8).init(b.allocator); + var errors = std.ArrayListUnmanaged([]const u8).empty; + defer errors.deinit(b.allocator); + if (key_store.password.len == 0) { - try errors.append("Keystore not configured with password, must be setup with setKeyStore"); + try errors.append(b.allocator, "Keystore not configured with password, must be setup with setKeyStore"); } if (apk.android_manifest == null) { - try errors.append("AndroidManifest.xml not configured, must be set with setAndroidManifest"); + try errors.append(b.allocator, "AndroidManifest.xml not configured, must be set with setAndroidManifest"); } if (apk.artifacts.items.len == 0) { - try errors.append("Must add at least one artifact targeting a valid Android CPU architecture: aarch64, x86_64, x86, etc"); + try errors.append(b.allocator, "Must add at least one artifact targeting a valid Android CPU architecture: aarch64, x86_64, x86, etc"); } else { for (apk.artifacts.items, 0..) |artifact, i| { if (artifact.kind == .exe) { - try errors.append(b.fmt("artifact[{}]: must make Android artifacts be created with addSharedLibrary, not addExecutable", .{i})); + try errors.append(b.allocator, b.fmt("artifact[{}]: must make Android artifacts be created with addSharedLibrary, not addExecutable", .{i})); } else { if (artifact.linkage) |linkage| { if (linkage != .dynamic) { - try errors.append(b.fmt("artifact[{}]: invalid linkage, expected it to be created via addSharedLibrary", .{i})); + try errors.append(b.allocator, b.fmt("artifact[{}]: invalid linkage, expected it to be created via addSharedLibrary", .{i})); } } else { - try errors.append(b.fmt("artifact[{}]: unable to get linkage from artifact, expected it to be created via addSharedLibrary", .{i})); + try errors.append(b.allocator, b.fmt("artifact[{}]: unable to get linkage from artifact, expected it to be created via addSharedLibrary", .{i})); } } if (artifact.root_module.resolved_target) |target| { if (!target.result.abi.isAndroid()) { - try errors.append(b.fmt("artifact[{}]: must be targetting Android abi", .{i})); + try errors.append(b.allocator, b.fmt("artifact[{}]: must be targetting Android abi", .{i})); continue; } } else { - try errors.append(b.fmt("artifact[{}]: unable to get resolved target from artifact", .{i})); + try errors.append(b.allocator, b.fmt("artifact[{}]: unable to get resolved target from artifact", .{i})); } } } diff --git a/src/androidbuild/tools.zig b/src/androidbuild/tools.zig index f269ff0..1900476 100644 --- a/src/androidbuild/tools.zig +++ b/src/androidbuild/tools.zig @@ -84,18 +84,18 @@ pub fn create(b: *std.Build, options: Options) *Sdk { const jdk_path = path_search.findJDK(b.allocator) catch @panic("OOM"); // Validate - var errors = std.ArrayList([]const u8).init(b.allocator); - defer errors.deinit(); + var errors = std.ArrayListUnmanaged([]const u8).empty; + defer errors.deinit(b.allocator); if (jdk_path.len == 0) { - errors.append( + errors.append(b.allocator, \\JDK not found. \\- Download it from https://www.oracle.com/th/java/technologies/downloads/ \\- Then configure your JDK_HOME environment variable to where you've installed it. ) catch @panic("OOM"); } if (android_sdk_path.len == 0) { - errors.append( + errors.append(b.allocator, \\Android SDK not found. \\- Download it from https://developer.android.com/studio \\- Then configure your ANDROID_HOME environment variable to where you've installed it." @@ -120,14 +120,14 @@ pub fn create(b: *std.Build, options: Options) *Sdk { cmdline_tools, tools, }); - errors.append(message) catch @panic("OOM"); + errors.append(b.allocator, message) catch @panic("OOM"); }, else => { const message = b.fmt("Android Command Line Tools path had unexpected error: {s} ({s})", .{ @errorName(toolerr), tools, }); - errors.append(message) catch @panic("OOM"); + errors.append(b.allocator, message) catch @panic("OOM"); }, }; }, @@ -136,7 +136,7 @@ pub fn create(b: *std.Build, options: Options) *Sdk { @errorName(cmderr), cmdline_tools, }); - errors.append(message) catch @panic("OOM"); + errors.append(b.allocator, message) catch @panic("OOM"); }, }; break :cmdlineblk cmdline_tools;