From 9d794106c25d212dd5d36909474d819c54bb8d39 Mon Sep 17 00:00:00 2001 From: Jae B Date: Sun, 12 Apr 2026 19:45:05 +1000 Subject: [PATCH 1/2] add addLibraryPath --- .github/workflows/ci.yml | 12 + src/androidbuild/Apk.zig | 40 +- src/androidbuild/androidbuild.zig | 42 + test/build/android/AndroidManifest.xml | 24 + test/build/android/res/mipmap/ic_launcher.png | Bin 0 -> 4812 bytes test/build/android/res/values/strings.xml | 10 + test/build/build.zig | 132 + test/build/build.zig.zon | 23 + test/build/src/android-bind.zig | 2627 +++++++++++++++++ test/build/src/build_test_main.zig | 236 ++ 10 files changed, 3142 insertions(+), 4 deletions(-) create mode 100644 test/build/android/AndroidManifest.xml create mode 100644 test/build/android/res/mipmap/ic_launcher.png create mode 100644 test/build/android/res/values/strings.xml create mode 100644 test/build/build.zig create mode 100644 test/build/build.zig.zon create mode 100644 test/build/src/android-bind.zig create mode 100644 test/build/src/build_test_main.zig diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4531cb1..2fd25d8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,6 +93,10 @@ jobs: with: version: ${{ needs.setup.outputs.zig-stable-version }} + - name: Build Test (Zig Stable) + run: zig build -Dandroid=true --verbose + working-directory: test/build + - name: Build Minimal Example (Zig Stable) run: zig build -Dandroid=true --verbose working-directory: examples/minimal @@ -178,6 +182,10 @@ jobs: with: version: "master" + - name: Build Test (Zig Nightly) + run: zig build -Dandroid=true --verbose + working-directory: test/build + - name: Build Minimal Example (Zig Nightly) run: zig build -Dandroid=true --verbose working-directory: examples/minimal @@ -224,6 +232,10 @@ jobs: with: version: ${{ needs.setup.outputs.zig-previous-stable-version }} + - name: Build Test (Zig Nightly) + run: zig build -Dandroid=true --verbose + working-directory: test/build + - name: Build Minimal Example run: zig build -Dandroid=true --verbose working-directory: examples/minimal diff --git a/src/androidbuild/Apk.zig b/src/androidbuild/Apk.zig index b345467..e761b7c 100644 --- a/src/androidbuild/Apk.zig +++ b/src/androidbuild/Apk.zig @@ -4,6 +4,7 @@ const Target = std.Target; const Step = std.Build.Step; const ResolvedTarget = std.Build.ResolvedTarget; const LazyPath = std.Build.LazyPath; +const ArrayList = std.ArrayListUnmanaged; const builtin = @import("builtin"); const androidbuild = @import("androidbuild.zig"); @@ -47,10 +48,13 @@ build_tools: BuildTools, api_level: ApiLevel, key_store: ?KeyStore, android_manifest: ?LazyPath, -artifacts: std.ArrayListUnmanaged(*Step.Compile), -java_files: std.ArrayListUnmanaged(LazyPath), -resources: std.ArrayListUnmanaged(Resource), -assets: std.ArrayListUnmanaged(Resource), +artifacts: ArrayList(*Step.Compile), +/// Precompiled library files can be added to the APK to support features like Vulkan validation layers +/// ie. https://developer.android.com/ndk/guides/graphics/validation-layer +precompiled_library_files: ArrayList(PrecompiledLibraryFile), +java_files: ArrayList(LazyPath), +resources: ArrayList(Resource), +assets: ArrayList(Resource), pub const Options = struct { /// APK file output name, ie. "{name}.apk" @@ -96,6 +100,7 @@ pub fn create(sdk: *Sdk, options: Options) *Apk { .api_level = options.api_level, .key_store = null, .android_manifest = null, + .precompiled_library_files = .empty, .artifacts = .empty, .java_files = .empty, .resources = .empty, @@ -176,6 +181,18 @@ pub fn setKeyStore(apk: *Apk, key_store: KeyStore) void { apk.key_store = key_store; } +/// Add precompiled library files +/// +/// This is useful for when you want to consume vendors compiled library files such as the Vulkan Validation layers +/// ie. https://developer.android.com/ndk/guides/graphics/validation-layer +pub fn addLibraryFile(apk: *Apk, android_target: androidbuild.AndroidTarget, path: LazyPath) void { + const b = apk.b; + apk.precompiled_library_files.append(b.allocator, .{ + .target = android_target.target(b), + .path = path, + }) catch @panic("OOM"); +} + fn addLibraryPaths(apk: *Apk, module: *std.Build.Module) void { const b = apk.b; const android_ndk_sysroot = apk.ndk.sysroot_path; @@ -446,6 +463,14 @@ fn doInstallApk(apk: *Apk) Allocator.Error!*Step.InstallFile { // - classes.dex const apk_files = b.addWriteFiles(); + // Add support for adding compiled library files (Vulkan Validation layers) + // ie. https://developer.android.com/ndk/guides/graphics/validation-layer + for (apk.precompiled_library_files.items) |precompiled_library| { + const so_dir = androidbuild.getTargetLibDir(b, precompiled_library.target); + const lib_file = precompiled_library.path.basename(b, null); + _ = apk_files.addCopyFile(precompiled_library.path, b.fmt("lib/{s}/{s}", .{ so_dir, lib_file })); + } + // These files belong in root and *must not* be compressed // - resources.arsc const apk_files_not_compressed = b.addWriteFiles(); @@ -968,4 +993,11 @@ fn updatePathWithJdk(apk: *Apk, run: *std.Build.Step.Run) Allocator.Error!void { } } +const PrecompiledLibraryFile = struct { + /// The target it belongs to + target: ResolvedTarget, + /// A precompiled *.so file like "libVkLayer_khronos_validation.so" + path: LazyPath, +}; + const Apk = @This(); diff --git a/src/androidbuild/androidbuild.zig b/src/androidbuild/androidbuild.zig index 90e176b..7740768 100644 --- a/src/androidbuild/androidbuild.zig +++ b/src/androidbuild/androidbuild.zig @@ -55,6 +55,48 @@ pub fn getAndroidTriple(target: ResolvedTarget) error{InvalidAndroidTarget}![]co }; } +/// List of supported Android targets, this is used as a shorthand for API functions like "apk.addLibraryFile". +pub const AndroidTarget = enum { + arm64_v8a, + armeabi_v7a, + x86_64, + x86, + + pub fn target(at: AndroidTarget, b: *std.Build) ResolvedTarget { + const android_target_query: AndroidTargetQuery = switch (at) { + .arm64_v8a => .{ + // aarch64-linux-android + .cpu_arch = .aarch64, + .cpu_features_add = Target.aarch64.featureSet(&.{.v8a}), + }, + .armeabi_v7a => .{ + // arm-linux-androideabi + .cpu_arch = .arm, + .cpu_features_add = Target.arm.featureSet(&.{.v7a}), + }, + .x86_64 => .{ + // x86_64-linux-android + .cpu_arch = .x86_64, + }, + .x86 => .{ + // i686-linux-android + .cpu_arch = .x86, + }, + }; + return b.resolveTargetQuery(android_target_query.queryTarget()); + } + + /// The "lib/{AndroidTarget}" directory name as it appears in an APK + pub fn lib(at: AndroidTarget) []const u8 { + return switch (at) { + .arm64_v8a => "arm64-v8a", + .armeabi_v7a => "armeabi-v7a", + .x86_64 => "x86_64", + .x86 => "x86", + }; + } +}; + /// Will return a slice of Android targets /// - If -Dandroid=true, return all Android targets (x86, x86_64, aarch64, etc) /// - If -Dtarget=aarch64-linux-android, return a slice with the one specified Android target diff --git a/test/build/android/AndroidManifest.xml b/test/build/android/AndroidManifest.xml new file mode 100644 index 0000000..0b81905 --- /dev/null +++ b/test/build/android/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + diff --git a/test/build/android/res/mipmap/ic_launcher.png b/test/build/android/res/mipmap/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea4bd87ea6b463338901e4dc0c9c496bdd46541 GIT binary patch literal 4812 zcmV;-5;N_IP)EX>4Tx04R}tkv&MmKpe$iQ>7vm2RmqS$WWauh>D1lR-p(LLaorMgUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!oE)7LU8KbSC509-9vt`M-Mz=%J3y$HnPzp20-A1{ z>10C8=2pbeD?%7R7*R~i%ra&rDFxs0b&mjF@8Uem|JhiQ z+u*!U9APC{B|aw}G3kQDk6c$ge&bwpS>TxwGn1Ypju4B*Hdfl0l}wFzf;gsXI^_#l zk5$fFoV9Y5HSft^7|!diQ*eDdgG! zBgZ@{&>*{h@IUz7tyLHw^OC{|p!3CXK8AqMF3_ks&iAq7G){ovGjOH1{FOQ|^+|fI zrNxeb-fiIGx}_<5z~v6m|76If>`FnJLZJY>pV2qvfWBLxd)4c$xsTHaAVXcHZh(VB zV7N%xYd-JpYVYmeGtK^f0IAV(z0yNMy{D4^000SaNLh0L z01ejw01ejxLMWSf00007bV*G`2jmAC3_BNSOQfm*01(JYL_t(|+U;6-d{pJRe!jCz zW=S$LSuhF7%$b=i7!Z&}E+~sT2(nyTi*>Em1+}e;RP4{HwN|Y^f8Kg4SH)^^qlgIN zg3B#}8v;szNLZ6eCWHi%kjx~roH@()-am$rpojrtuWj@EH)p=(ywCUU-vRp3kAC!{ zAN}aZ4;bud54~P*eqSsu{LrNjc)eqNKA*SevtqAzgakbBZ$SWn$s))3JvD+LECjKP ze-i>&F)=z!K(V4s1ZX4}a(fOMIdY`@uSozyAqeLJ5W6%200{7Pn~Cq1j7^*9Uxom` z*L%_79|RLXw%_BQa_Gs3L!MDl6vgHD`%A&-(zSr$_jt}#6vg__uK|qRRP6DTr{t$r z01%jYBLEPg%l4TBjA5qv3lO6ILVpQk!Yy@mb?QGo0gRv%V^08J4A_z)f=y8rWe~t( zJ+xy6z@`JRGm$?4hL+>qOZ=e-ttg5T4u``4kmYiY2G|vDr;C#)e833T0}vP}k1;d= z7zF^5$jU@fuuB56IAJh|D8uPo5s5_9-n*C|O1xK;XP6|-tFEr@2q?;A5Z(pA8L`>K z=sp00!I)l_FYmczjKei`RC+;n`jO}NReiE{(VC9xkE_%#^mgmRRV`J~?}dOsVW1cS zKiid?wP@3(O?n?CJbwmQVNs~=$7=x!c$Mt{N&%RR(e42ml56qp`B?+Aq_po^t2tse z&so^KetUy@e|0Fdxz9|%=kpC4>dXD(<>S+@9#vu;{>j$J*7lC}#=b~(-Og;0F?yiG z$dLsIRJi=A@6cQmX}pmS8IN+Qo(@X01^N_2ViV@ zQJTE`&Vr#QvNjQD)?@qLs@kXjo4Sn&F;B2=_1 z_;{y|Vs{h{s{qEphIp*v>z_qi+9Kh~6A6Q?z$q_yZSKG+Wd*XIn+E2+c;L(GeKao^ z3`Y9G_LGM3CK#O=ZaugXvfMxt*7)DLJX~_w&(PM^hDD1O zAwNGKRkbbH)70&opS&*jg4Mq*yyos%?)!%n`{(qEfD*6w)XOJ2C!glElyJ_`8IICZ ztK;tlL!o#2D)h-ryw2zIl?CgAZxiTx0NG&lOi`9RdCp|#s9vohn25y_aJgI#rU}z9K&FX`2E;zusjul75speghJ$`|)r8EE0AM7O*c*oVWzbmO zm!~g69981;CHK_U{<_$s=)^Er7Lh%FrrYuLv2`sv>=uUY4H_;SZpS@KTCwc&D5j4} z$D>!~AdpL#o4XrEGKsgpj5fc#mM6;x3Yj1X%^j53almNbzR#$v+Gi}TsjFMrbM2!N zP+lkxvq&rr08CxS>K#UNlJmFvNOl1L_tw|0+3Qud7JHNrOpz_J3K(_YrP-s!ui5Tv z>!Pq*8BQH&fh+vC8O42q|yk?IbTZgNVl-l?^% z+s@Cg-dEkwt1wtvSU7M@sV(QQ`IsC#8_i%S6l&@V>5IMIVF9mq%38o6E?i9vHwc`z zp1_sg=P?KzqF(>r0@I>m{7 z`(vnYO5m#?!KgEE=KvAHA=hzGC93E&R#jE)(N3r%5JSTke zigKP#R4EW?F{}L!FuIG)fU*(Mzg=1HvlLp)I#Hx09azxCV=ER$yw_=o6LbTSv z;5-R*sGeWaXjC0gSvVN1*?rP&anoQmjcumEd3TwA@u-Y}sSAl?)b)P9^HBNhQWT|( zbACYJ^vIr2Xa_)U(#^$^$m(ynz&Y^M+w;%*t}3q!w@!9p#l|Q;+}w^SLu4#nt7CR< z>fAnUHpBbloHuK<<1bsPZ|{?P0WM-|Rg>9asNJRhl@rs)o?2kJEf5F{_=eyf|1}duHJ5AU` zK;wiBowVz*TJwpjPQLD>9MlnYKp@a&W65jI^syYtng+&F?se9fbl=9^@p6^YlkJhn zZUE%-`GyIg-?T@b;Q3W5uE`N0FopwhV11|Y{(_2{TedZ~uRp1N+}Cl@n3BbdZ?Ih^ zTdlA-j(q2jw2F?NA0!s#1eskEmt<^17x>+G=^WezKI zeB0)cILCtb+7VYduA1aRX+d`dN2Uq2GYW2|BGR&T1_rlql&3Rj9H(yc7LD}wcA z<5-gLyCtodKROMWGQ&e3NASSxR03)wHE6LI=ulT@cN0OcHBg?HQrMXeoVi(VEZLCU1pvv;D9ALAIyp^dR+mF?^$@<-Sg@)MHxH7KlLlA>f@l)7qy{z8 ziDWc-Sonr^hWA#hxa^SdZ7Ly>1dzcPBN}(|Rq0XC)YQaPo?)F-o_4OwMxvo<5F{DG zp=>p&6V_BE@Ya_xd{Lu9GYFm>8LXE*=7h$vW0YWqWND9xI_|uXjkcgo;qNrfsPstXiew zwtNvHV~FX5P?V!qBaA4q!0i;|bj#5jCnxO#0HCU>N>e*MzxvB(mgU!vkeo8?j8qg3W>@x_N`2t4xEUC0zV%G1)2XvvPzJAl9k79SP{K{-r zb;8FxOx!dyC46;{Q9HxCNYDZao~k3_$;02>^hqU}*6}E91BRW`)*t zp07Jh6=zDwvkAC+Z47%Gb%ggDpk98X;j}We>42#pd8u?!frQi381m8>+LMGm5sv*T z$Lg@T^{uG6essPBN$w_1)yeqYOrR%r)z-dd8s3uG#Tj=4IPCE!`79{3F#NeHi5Z15 zlv9q*XHo-p?kDWnYa-HaLXQ&mCpe}T9l8Cq)2x`cyaT5Q5_AsiN$~LMu>N#~;ka*B ze)2P`qkH{>ao*OEMEyU6007_uc6KId7l4sH(Zxg1_?`}MfN>74 z0Z0(iOu`_CfQuXqPMZMOfcd*kBvlS>0)p5TRsmPKfX_P2XswDj-fz+G-4zPe2E5*L zE>_Zu($c#L_&8+LFpiD?Fak8wT>Da`ddsv@%aQghFv~q0A>8Q87PES) z|7$zc4lc8gzIPvRxSiF|(6+7B{QJ8#`lhe{XOS5o1FAvj&0Dv}Y@(pWO@6S+!2YHLsy0N-PXvbHU$mMJj&}%|s?5S9Fyqpt9c@1!k`~ywmpuyL zLNGpd<9=E&X`tn%$uCDXK6b7>XF-KpZ*u-L`T)m8KtNGu*kl^=&UQ^}iSo@C_$*}( zE3>OAQDf9x|K{%6YmamP&z{)kpLv=~Jm>PY@y7fA!ruqzhb4k%V;l18-h}e12BztI8P;W>kV4d(nq%{^d zwbz1LQ&^+tPGEmt+ex=S`c-n5YVgXtK8nAWFsUpU3N5a#s~gD~+mX80L>STdr0Uw* z57zB7LZ&GH0smj{`Ful56y-pP&wFRU>w9qFk4_B^E%q-snKk{2@-x3jc?f_Q@F + + + Zig Build Test + + com.zig.build_test + diff --git a/test/build/build.zig b/test/build/build.zig new file mode 100644 index 0000000..304964f --- /dev/null +++ b/test/build/build.zig @@ -0,0 +1,132 @@ +//! This module is for testing that we implemented certain build features and to at least make sure +//! there is code coverage for new APIs added. +//! +//! TODO(Jae): 2026-04-12 +//! Ideally adding functions to also validate the output APK file would be nice too. + +const std = @import("std"); +const builtin = @import("builtin"); + +const android = @import("android"); + +pub fn build(b: *std.Build) void { + const exe_name: []const u8 = "build_test"; + const root_target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + const android_targets = android.standardTargets(b, root_target); + + // NOTE(jae): 2026-04-12 + // Run it *after* the "standardTargets" call + testLazyImportAndResolveTargets(b, root_target); + + var root_target_single = [_]std.Build.ResolvedTarget{root_target}; + const targets: []std.Build.ResolvedTarget = if (android_targets.len == 0) + root_target_single[0..] + else + android_targets; + + const android_apk: ?*android.Apk = blk: { + if (android_targets.len == 0) break :blk null; + + const android_sdk = android.Sdk.create(b, .{}); + const apk = android_sdk.createApk(.{ + .name = exe_name, + .api_level = .android15, + .build_tools_version = "35.0.1", + .ndk_version = "29.0.13113456", + }); + const key_store_file = android_sdk.createKeyStore(.example); + apk.setKeyStore(key_store_file); + apk.setAndroidManifest(b.path("android/AndroidManifest.xml")); + apk.addResourceDirectory(b.path("android/res")); + + testAddLibraryFile(b, apk); + + break :blk apk; + }; + + for (targets) |target| { + const app_module = b.createModule(.{ + .target = target, + .optimize = optimize, + .root_source_file = b.path("src/build_test_main.zig"), + }); + + var exe: *std.Build.Step.Compile = if (target.result.abi.isAndroid()) b.addLibrary(.{ + .name = "main", + .root_module = app_module, + .linkage = .dynamic, + }) else b.addExecutable(.{ + .name = exe_name, + .root_module = app_module, + }); + + // if building as library for Android, add this target + // NOTE: Android has different CPU targets so you need to build a version of your + // code for x86, x86_64, arm, arm64 and more + if (target.result.abi.isAndroid()) { + const apk: *android.Apk = android_apk orelse @panic("Android APK should be initialized"); + const android_dep = b.dependency("android", .{ + .optimize = optimize, + .target = target, + }); + exe.root_module.addImport("android", android_dep.module("android")); + + apk.addArtifact(exe); + } else { + b.installArtifact(exe); + + // If only 1 target, add "run" step + if (targets.len == 1) { + const run_step = b.step("run", "Run the application"); + const run_cmd = b.addRunArtifact(exe); + run_step.dependOn(&run_cmd.step); + } + } + } + if (android_apk) |apk| { + testInstallAndAddRunStep(b, apk); + } +} + +/// Test calling lazyImport and then calling "resolveTargets" +/// +/// PR: https://github.com/silbinarywolf/zig-android-sdk/pull/83 +fn testLazyImportAndResolveTargets(b: *std.Build, root_target: std.Build.ResolvedTarget) void { + const all_android_targets = true; + const android_targets: []std.Build.ResolvedTarget = blk: { + if (all_android_targets or root_target.result.abi.isAndroid()) { + if (b.lazyImport(@This(), "lazy_android")) |lazy_android| { + break :blk lazy_android.resolveTargets(b, .{ + .default_target = root_target, + .all_targets = true, + }); + } + } + break :blk &[0]std.Build.ResolvedTarget{}; + }; + if (android_targets.len != 4) @panic("expected 'resolveTargets' it to return 4 Android targets"); +} + +/// Test the addLibraryFile functionality +/// +/// Requested feature here: https://github.com/silbinarywolf/zig-android-sdk/issues/77 +fn testAddLibraryFile(b: *std.Build, apk: *android.Apk) void { + const vulkan_validation_dep = b.lazyDependency("vulkan_validation", .{}) orelse return; + apk.addLibraryFile(.arm64_v8a, vulkan_validation_dep.path("arm64-v8a/libVkLayer_khronos_validation.so")); + apk.addLibraryFile(.armeabi_v7a, vulkan_validation_dep.path("armeabi-v7a/libVkLayer_khronos_validation.so")); + apk.addLibraryFile(.x86, vulkan_validation_dep.path("x86/libVkLayer_khronos_validation.so")); + apk.addLibraryFile(.x86_64, vulkan_validation_dep.path("x86_64/libVkLayer_khronos_validation.so")); +} + +fn testInstallAndAddRunStep(b: *std.Build, apk: *android.Apk) void { + const installed_apk = apk.addInstallApk(); + b.getInstallStep().dependOn(&installed_apk.step); + + const android_sdk = apk.sdk; + const run_step = b.step("run", "Install and run the application on an Android device"); + const adb_install = android_sdk.addAdbInstall(installed_apk.source); + const adb_start = android_sdk.addAdbStart("com.zig.build_test/android.app.NativeActivity"); + adb_start.step.dependOn(&adb_install.step); + run_step.dependOn(&adb_start.step); +} diff --git a/test/build/build.zig.zon b/test/build/build.zig.zon new file mode 100644 index 0000000..8023e3a --- /dev/null +++ b/test/build/build.zig.zon @@ -0,0 +1,23 @@ +.{ + .name = .android_build_test, + .version = "0.0.0", + .dependencies = .{ + .android = .{ + .path = "../..", + }, + .lazy_android = .{ + .path = "../..", + .lazy = true, + }, + .vulkan_validation = .{ + .url = "https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases/download/vulkan-sdk-1.4.341.0/android-binaries-1.4.341.0.zip", + .hash = "N-V-__8AABTXlAV0z_BGl5-lZeOEm_d2gHEhExT2qjxMqQ72", + .lazy = true, + }, + }, + .paths = .{ + "build.zig", + "build.zig.zon", + }, + .fingerprint = 0xb15d5a3541f113ad, +} diff --git a/test/build/src/android-bind.zig b/test/build/src/android-bind.zig new file mode 100644 index 0000000..0fd96f5 --- /dev/null +++ b/test/build/src/android-bind.zig @@ -0,0 +1,2627 @@ +// TODO(jae): 2024-09-19 +// Consider just making this import from native C libraries. +// For now just wanted a basic example that compiles and runs on an Android emulator + +const __builtin_va_list = extern struct { + padding: u32, +}; + +pub const va_list = __builtin_va_list; +pub const __gnuc_va_list = __builtin_va_list; +pub const ANDROID_LOG_UNKNOWN = @intFromEnum(enum_android_LogPriority.ANDROID_LOG_UNKNOWN); +pub const ANDROID_LOG_DEFAULT = @intFromEnum(enum_android_LogPriority.ANDROID_LOG_DEFAULT); +pub const ANDROID_LOG_VERBOSE = @intFromEnum(enum_android_LogPriority.ANDROID_LOG_VERBOSE); +pub const ANDROID_LOG_DEBUG = @intFromEnum(enum_android_LogPriority.ANDROID_LOG_DEBUG); +pub const ANDROID_LOG_INFO = @intFromEnum(enum_android_LogPriority.ANDROID_LOG_INFO); +pub const ANDROID_LOG_WARN = @intFromEnum(enum_android_LogPriority.ANDROID_LOG_WARN); +pub const ANDROID_LOG_ERROR = @intFromEnum(enum_android_LogPriority.ANDROID_LOG_ERROR); +pub const ANDROID_LOG_FATAL = @intFromEnum(enum_android_LogPriority.ANDROID_LOG_FATAL); +pub const ANDROID_LOG_SILENT = @intFromEnum(enum_android_LogPriority.ANDROID_LOG_SILENT); +pub const enum_android_LogPriority = enum(c_int) { + ANDROID_LOG_UNKNOWN = 0, + ANDROID_LOG_DEFAULT = 1, + ANDROID_LOG_VERBOSE = 2, + ANDROID_LOG_DEBUG = 3, + ANDROID_LOG_INFO = 4, + ANDROID_LOG_WARN = 5, + ANDROID_LOG_ERROR = 6, + ANDROID_LOG_FATAL = 7, + ANDROID_LOG_SILENT = 8, + _, +}; +pub const android_LogPriority = enum_android_LogPriority; +pub extern fn __android_log_write(prio: c_int, tag: [*c]const u8, text: [*c]const u8) c_int; +pub extern fn __android_log_print(prio: c_int, tag: [*c]const u8, fmt: [*c]const u8, ...) c_int; +pub extern fn __android_log_vprint(prio: c_int, tag: [*c]const u8, fmt: [*c]const u8, ap: va_list) c_int; +pub extern fn __android_log_assert(cond: [*c]const u8, tag: [*c]const u8, fmt: [*c]const u8, ...) noreturn; +pub const LOG_ID_MIN = @intFromEnum(enum_log_id.LOG_ID_MIN); +pub const LOG_ID_MAIN = @intFromEnum(enum_log_id.LOG_ID_MAIN); +pub const LOG_ID_RADIO = @intFromEnum(enum_log_id.LOG_ID_RADIO); +pub const LOG_ID_EVENTS = @intFromEnum(enum_log_id.LOG_ID_EVENTS); +pub const LOG_ID_SYSTEM = @intFromEnum(enum_log_id.LOG_ID_SYSTEM); +pub const LOG_ID_CRASH = @intFromEnum(enum_log_id.LOG_ID_CRASH); +pub const LOG_ID_STATS = @intFromEnum(enum_log_id.LOG_ID_STATS); +pub const LOG_ID_SECURITY = @intFromEnum(enum_log_id.LOG_ID_SECURITY); +pub const LOG_ID_KERNEL = @intFromEnum(enum_log_id.LOG_ID_KERNEL); +pub const LOG_ID_MAX = @intFromEnum(enum_log_id.LOG_ID_MAX); +pub const enum_log_id = enum(c_int) { + LOG_ID_MIN = 0, + LOG_ID_MAIN = 0, + LOG_ID_RADIO = 1, + LOG_ID_EVENTS = 2, + LOG_ID_SYSTEM = 3, + LOG_ID_CRASH = 4, + LOG_ID_STATS = 5, + LOG_ID_SECURITY = 6, + LOG_ID_KERNEL = 7, + LOG_ID_MAX = 8, + _, +}; +pub const log_id_t = enum_log_id; +pub extern fn __android_log_buf_write(bufID: c_int, prio: c_int, tag: [*c]const u8, text: [*c]const u8) c_int; +pub extern fn __android_log_buf_print(bufID: c_int, prio: c_int, tag: [*c]const u8, fmt: [*c]const u8, ...) c_int; +pub extern fn android_get_application_target_sdk_version(...) c_int; +pub extern fn android_get_device_api_level(...) c_int; +pub const ptrdiff_t = c_long; +pub const wchar_t = c_uint; +const struct_unnamed_1 = extern struct { + __clang_max_align_nonce1: c_longlong align(8), + __clang_max_align_nonce2: c_longdouble align(16), +}; +pub const max_align_t = struct_unnamed_1; +pub const __int8_t = i8; +pub const __uint8_t = u8; +pub const __int16_t = c_short; +pub const __uint16_t = c_ushort; +pub const __int32_t = c_int; +pub const __uint32_t = c_uint; +pub const __int64_t = c_long; +pub const __uint64_t = c_ulong; +pub const __intptr_t = c_long; +pub const __uintptr_t = c_ulong; +pub const int_least8_t = i8; +pub const uint_least8_t = u8; +pub const int_least16_t = i16; +pub const uint_least16_t = u16; +pub const int_least32_t = i32; +pub const uint_least32_t = u32; +pub const int_least64_t = i64; +pub const uint_least64_t = u64; +pub const int_fast8_t = i8; +pub const uint_fast8_t = u8; +pub const int_fast64_t = i64; +pub const uint_fast64_t = u64; +pub const int_fast16_t = i64; +pub const uint_fast16_t = u64; +pub const int_fast32_t = i64; +pub const uint_fast32_t = u64; +pub const uintmax_t = u64; +pub const intmax_t = i64; +pub const __s8 = i8; +pub const __u8 = u8; +pub const __s16 = c_short; +pub const __u16 = c_ushort; +pub const __s32 = c_int; +pub const __u32 = c_uint; +pub const __s64 = c_longlong; +pub const __u64 = c_ulonglong; +const struct_unnamed_2 = extern struct { + fds_bits: [16]c_ulong, +}; +pub const __kernel_fd_set = struct_unnamed_2; +pub const __kernel_sighandler_t = ?*const fn (c_int) callconv(.c) void; +pub const __kernel_key_t = c_int; +pub const __kernel_mqd_t = c_int; +pub const __kernel_old_uid_t = c_ushort; +pub const __kernel_old_gid_t = c_ushort; +pub const __kernel_long_t = c_long; +pub const __kernel_ulong_t = c_ulong; +pub const __kernel_ino_t = __kernel_ulong_t; +pub const __kernel_mode_t = c_uint; +pub const __kernel_pid_t = c_int; +pub const __kernel_ipc_pid_t = c_int; +pub const __kernel_uid_t = c_uint; +pub const __kernel_gid_t = c_uint; +pub const __kernel_suseconds_t = __kernel_long_t; +pub const __kernel_daddr_t = c_int; +pub const __kernel_uid32_t = c_uint; +pub const __kernel_gid32_t = c_uint; +pub const __kernel_old_dev_t = c_uint; +pub const __kernel_size_t = __kernel_ulong_t; +pub const __kernel_ssize_t = __kernel_long_t; +pub const __kernel_ptrdiff_t = __kernel_long_t; +const struct_unnamed_3 = extern struct { + val: [2]c_int, +}; +pub const __kernel_fsid_t = struct_unnamed_3; +pub const __kernel_off_t = __kernel_long_t; +pub const __kernel_loff_t = c_longlong; +pub const __kernel_time_t = __kernel_long_t; +pub const __kernel_time64_t = c_longlong; +pub const __kernel_clock_t = __kernel_long_t; +pub const __kernel_timer_t = c_int; +pub const __kernel_clockid_t = c_int; +pub const __kernel_caddr_t = [*c]u8; +pub const __kernel_uid16_t = c_ushort; +pub const __kernel_gid16_t = c_ushort; +pub const __le16 = __u16; +pub const __be16 = __u16; +pub const __le32 = __u32; +pub const __be32 = __u32; +pub const __le64 = __u64; +pub const __be64 = __u64; +pub const __sum16 = __u16; +pub const __wsum = __u32; +pub const __poll_t = c_uint; +const struct_unnamed_4 = extern struct { + flags: u32, + stack_base: ?*anyopaque, + stack_size: usize, + guard_size: usize, + sched_policy: i32, + sched_priority: i32, + __reserved: [16]u8, +}; +pub const pthread_attr_t = struct_unnamed_4; +const struct_unnamed_5 = extern struct { + __private: [4]i64, +}; +pub const pthread_barrier_t = struct_unnamed_5; +pub const pthread_barrierattr_t = c_int; +const struct_unnamed_6 = extern struct { + __private: [12]i32, +}; +pub const pthread_cond_t = struct_unnamed_6; +pub const pthread_condattr_t = c_long; +pub const pthread_key_t = c_int; +const struct_unnamed_7 = extern struct { + __private: [10]i32, +}; +pub const pthread_mutex_t = struct_unnamed_7; +pub const pthread_mutexattr_t = c_long; +pub const pthread_once_t = c_int; +const struct_unnamed_8 = extern struct { + __private: [14]i32, +}; +pub const pthread_rwlock_t = struct_unnamed_8; +pub const pthread_rwlockattr_t = c_long; +const struct_unnamed_9 = extern struct { + __private: i64, +}; +pub const pthread_spinlock_t = struct_unnamed_9; +pub const pthread_t = c_long; +pub const __gid_t = __kernel_gid32_t; +pub const gid_t = __gid_t; +pub const __uid_t = __kernel_uid32_t; +pub const uid_t = __uid_t; +pub const __pid_t = __kernel_pid_t; +pub const pid_t = __pid_t; +pub const __id_t = u32; +pub const id_t = __id_t; +pub const blkcnt_t = c_ulong; +pub const blksize_t = c_ulong; +pub const caddr_t = __kernel_caddr_t; +pub const clock_t = __kernel_clock_t; +pub const __clockid_t = __kernel_clockid_t; +pub const clockid_t = __clockid_t; +pub const daddr_t = __kernel_daddr_t; +pub const fsblkcnt_t = c_ulong; +pub const fsfilcnt_t = c_ulong; +pub const __mode_t = __kernel_mode_t; +pub const mode_t = __mode_t; +pub const __key_t = __kernel_key_t; +pub const key_t = __key_t; +pub const __ino_t = __kernel_ino_t; +pub const ino_t = __ino_t; +pub const ino64_t = u64; +pub const __nlink_t = u32; +pub const nlink_t = __nlink_t; +pub const __timer_t = ?*anyopaque; +pub const timer_t = __timer_t; +pub const __suseconds_t = __kernel_suseconds_t; +pub const suseconds_t = __suseconds_t; +pub const __useconds_t = u32; +pub const useconds_t = __useconds_t; +pub const dev_t = u64; +pub const __time_t = __kernel_time_t; +pub const time_t = __time_t; +pub const off_t = i64; +pub const loff_t = off_t; +pub const off64_t = loff_t; +pub const __socklen_t = u32; +pub const socklen_t = __socklen_t; +pub const __va_list = __builtin_va_list; +pub const uint_t = c_uint; +pub const uint = c_uint; +pub const u_char = u8; +pub const u_short = c_ushort; +pub const u_int = c_uint; +pub const u_long = c_ulong; +pub const u_int32_t = u32; +pub const u_int16_t = u16; +pub const u_int8_t = u8; +pub const u_int64_t = u64; +pub const AAssetManager = opaque {}; +pub const AAssetDir = opaque {}; +pub const AAsset = opaque {}; +pub const AASSET_MODE_UNKNOWN = @intFromEnum(enum_unnamed_10.AASSET_MODE_UNKNOWN); +pub const AASSET_MODE_RANDOM = @intFromEnum(enum_unnamed_10.AASSET_MODE_RANDOM); +pub const AASSET_MODE_STREAMING = @intFromEnum(enum_unnamed_10.AASSET_MODE_STREAMING); +pub const AASSET_MODE_BUFFER = @intFromEnum(enum_unnamed_10.AASSET_MODE_BUFFER); +const enum_unnamed_10 = enum(c_int) { + AASSET_MODE_UNKNOWN = 0, + AASSET_MODE_RANDOM = 1, + AASSET_MODE_STREAMING = 2, + AASSET_MODE_BUFFER = 3, + _, +}; +pub extern fn AAssetManager_openDir(mgr: ?*AAssetManager, dirName: [*c]const u8) ?*AAssetDir; +pub extern fn AAssetManager_open(mgr: ?*AAssetManager, filename: [*c]const u8, mode: c_int) ?*AAsset; +pub extern fn AAssetDir_getNextFileName(assetDir: ?*AAssetDir) [*c]const u8; +pub extern fn AAssetDir_rewind(assetDir: ?*AAssetDir) void; +pub extern fn AAssetDir_close(assetDir: ?*AAssetDir) void; +pub extern fn AAsset_read(asset: ?*AAsset, buf: ?*anyopaque, count: usize) c_int; +pub extern fn AAsset_seek(asset: ?*AAsset, offset: off_t, whence: c_int) off_t; +pub extern fn AAsset_seek64(asset: ?*AAsset, offset: off64_t, whence: c_int) off64_t; +pub extern fn AAsset_close(asset: ?*AAsset) void; +pub extern fn AAsset_getBuffer(asset: ?*AAsset) ?*const anyopaque; +pub extern fn AAsset_getLength(asset: ?*AAsset) off_t; +pub extern fn AAsset_getLength64(asset: ?*AAsset) off64_t; +pub extern fn AAsset_getRemainingLength(asset: ?*AAsset) off_t; +pub extern fn AAsset_getRemainingLength64(asset: ?*AAsset) off64_t; +pub extern fn AAsset_openFileDescriptor(asset: ?*AAsset, outStart: [*c]off_t, outLength: [*c]off_t) c_int; +pub extern fn AAsset_openFileDescriptor64(asset: ?*AAsset, outStart: [*c]off64_t, outLength: [*c]off64_t) c_int; +pub extern fn AAsset_isAllocated(asset: ?*AAsset) c_int; + +pub const AConfiguration = opaque {}; +pub const ACONFIGURATION_ORIENTATION_ANY = 0; +pub const ACONFIGURATION_ORIENTATION_PORT = 1; +pub const ACONFIGURATION_ORIENTATION_LAND = 2; +pub const ACONFIGURATION_ORIENTATION_SQUARE = 3; +pub const ACONFIGURATION_TOUCHSCREEN_ANY = 0; +pub const ACONFIGURATION_TOUCHSCREEN_NOTOUCH = 1; +pub const ACONFIGURATION_TOUCHSCREEN_STYLUS = 2; +pub const ACONFIGURATION_TOUCHSCREEN_FINGER = 3; +pub const ACONFIGURATION_DENSITY_DEFAULT = 0; +pub const ACONFIGURATION_DENSITY_LOW = 120; +pub const ACONFIGURATION_DENSITY_MEDIUM = 160; +pub const ACONFIGURATION_DENSITY_TV = 213; +pub const ACONFIGURATION_DENSITY_HIGH = 240; +pub const ACONFIGURATION_DENSITY_XHIGH = 320; +pub const ACONFIGURATION_DENSITY_XXHIGH = 480; +pub const ACONFIGURATION_DENSITY_XXXHIGH = 640; +pub const ACONFIGURATION_DENSITY_ANY = 65534; +pub const ACONFIGURATION_DENSITY_NONE = 65535; +pub const ACONFIGURATION_KEYBOARD_ANY = 0; +pub const ACONFIGURATION_KEYBOARD_NOKEYS = 1; +pub const ACONFIGURATION_KEYBOARD_QWERTY = 2; +pub const ACONFIGURATION_KEYBOARD_12KEY = 3; +pub const ACONFIGURATION_NAVIGATION_ANY = 0; +pub const ACONFIGURATION_NAVIGATION_NONAV = 1; +pub const ACONFIGURATION_NAVIGATION_DPAD = 2; +pub const ACONFIGURATION_NAVIGATION_TRACKBALL = 3; +pub const ACONFIGURATION_NAVIGATION_WHEEL = 4; +pub const ACONFIGURATION_KEYSHIDDEN_ANY = 0; +pub const ACONFIGURATION_KEYSHIDDEN_NO = 1; +pub const ACONFIGURATION_KEYSHIDDEN_YES = 2; +pub const ACONFIGURATION_KEYSHIDDEN_SOFT = 3; +pub const ACONFIGURATION_NAVHIDDEN_ANY = 0; +pub const ACONFIGURATION_NAVHIDDEN_NO = 1; +pub const ACONFIGURATION_NAVHIDDEN_YES = 2; +pub const ACONFIGURATION_SCREENSIZE_ANY = 0; +pub const ACONFIGURATION_SCREENSIZE_SMALL = 1; +pub const ACONFIGURATION_SCREENSIZE_NORMAL = 2; +pub const ACONFIGURATION_SCREENSIZE_LARGE = 3; +pub const ACONFIGURATION_SCREENSIZE_XLARGE = 4; +pub const ACONFIGURATION_SCREENLONG_ANY = 0; +pub const ACONFIGURATION_SCREENLONG_NO = 1; +pub const ACONFIGURATION_SCREENLONG_YES = 2; +pub const ACONFIGURATION_SCREENROUND_ANY = 0; +pub const ACONFIGURATION_SCREENROUND_NO = 1; +pub const ACONFIGURATION_SCREENROUND_YES = 2; +pub const ACONFIGURATION_WIDE_COLOR_GAMUT_ANY = 0; +pub const ACONFIGURATION_WIDE_COLOR_GAMUT_NO = 1; +pub const ACONFIGURATION_WIDE_COLOR_GAMUT_YES = 2; +pub const ACONFIGURATION_HDR_ANY = 0; +pub const ACONFIGURATION_HDR_NO = 1; +pub const ACONFIGURATION_HDR_YES = 2; +pub const ACONFIGURATION_UI_MODE_TYPE_ANY = 0; +pub const ACONFIGURATION_UI_MODE_TYPE_NORMAL = 1; +pub const ACONFIGURATION_UI_MODE_TYPE_DESK = 2; +pub const ACONFIGURATION_UI_MODE_TYPE_CAR = 3; +pub const ACONFIGURATION_UI_MODE_TYPE_TELEVISION = 4; +pub const ACONFIGURATION_UI_MODE_TYPE_APPLIANCE = 5; +pub const ACONFIGURATION_UI_MODE_TYPE_WATCH = 6; +pub const ACONFIGURATION_UI_MODE_TYPE_VR_HEADSET = 7; +pub const ACONFIGURATION_UI_MODE_NIGHT_ANY = 0; +pub const ACONFIGURATION_UI_MODE_NIGHT_NO = 1; +pub const ACONFIGURATION_UI_MODE_NIGHT_YES = 2; +pub const ACONFIGURATION_SCREEN_WIDTH_DP_ANY = 0; +pub const ACONFIGURATION_SCREEN_HEIGHT_DP_ANY = 0; +pub const ACONFIGURATION_SMALLEST_SCREEN_WIDTH_DP_ANY = 0; +pub const ACONFIGURATION_LAYOUTDIR_ANY = 0; +pub const ACONFIGURATION_LAYOUTDIR_LTR = 1; +pub const ACONFIGURATION_LAYOUTDIR_RTL = 2; +pub const ACONFIGURATION_MCC = 1; +pub const ACONFIGURATION_MNC = 2; +pub const ACONFIGURATION_LOCALE = 4; +pub const ACONFIGURATION_TOUCHSCREEN = 8; +pub const ACONFIGURATION_KEYBOARD = 16; +pub const ACONFIGURATION_KEYBOARD_HIDDEN = 32; +pub const ACONFIGURATION_NAVIGATION = 64; +pub const ACONFIGURATION_ORIENTATION = 128; +pub const ACONFIGURATION_DENSITY = 256; +pub const ACONFIGURATION_SCREEN_SIZE = 512; +pub const ACONFIGURATION_VERSION = 1024; +pub const ACONFIGURATION_SCREEN_LAYOUT = 2048; +pub const ACONFIGURATION_UI_MODE = 4096; +pub const ACONFIGURATION_SMALLEST_SCREEN_SIZE = 8192; +pub const ACONFIGURATION_LAYOUTDIR = 16384; +pub const ACONFIGURATION_SCREEN_ROUND = 32768; +pub const ACONFIGURATION_COLOR_MODE = 65536; +pub const ACONFIGURATION_MNC_ZERO = 65535; + +pub extern fn AConfiguration_new(...) ?*AConfiguration; +pub extern fn AConfiguration_delete(config: ?*AConfiguration) void; +pub extern fn AConfiguration_fromAssetManager(out: ?*AConfiguration, am: ?*AAssetManager) void; +pub extern fn AConfiguration_copy(dest: ?*AConfiguration, src: ?*AConfiguration) void; +pub extern fn AConfiguration_getMcc(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setMcc(config: ?*AConfiguration, mcc: i32) void; +pub extern fn AConfiguration_getMnc(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setMnc(config: ?*AConfiguration, mnc: i32) void; +pub extern fn AConfiguration_getLanguage(config: ?*AConfiguration, outLanguage: [*c]u8) void; +pub extern fn AConfiguration_setLanguage(config: ?*AConfiguration, language: [*c]const u8) void; +pub extern fn AConfiguration_getCountry(config: ?*AConfiguration, outCountry: [*c]u8) void; +pub extern fn AConfiguration_setCountry(config: ?*AConfiguration, country: [*c]const u8) void; +pub extern fn AConfiguration_getOrientation(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setOrientation(config: ?*AConfiguration, orientation: i32) void; +pub extern fn AConfiguration_getTouchscreen(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setTouchscreen(config: ?*AConfiguration, touchscreen: i32) void; +pub extern fn AConfiguration_getDensity(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setDensity(config: ?*AConfiguration, density: i32) void; +pub extern fn AConfiguration_getKeyboard(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setKeyboard(config: ?*AConfiguration, keyboard: i32) void; +pub extern fn AConfiguration_getNavigation(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setNavigation(config: ?*AConfiguration, navigation: i32) void; +pub extern fn AConfiguration_getKeysHidden(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setKeysHidden(config: ?*AConfiguration, keysHidden: i32) void; +pub extern fn AConfiguration_getNavHidden(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setNavHidden(config: ?*AConfiguration, navHidden: i32) void; +pub extern fn AConfiguration_getSdkVersion(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setSdkVersion(config: ?*AConfiguration, sdkVersion: i32) void; +pub extern fn AConfiguration_getScreenSize(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setScreenSize(config: ?*AConfiguration, screenSize: i32) void; +pub extern fn AConfiguration_getScreenLong(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setScreenLong(config: ?*AConfiguration, screenLong: i32) void; +pub extern fn AConfiguration_getScreenRound(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setScreenRound(config: ?*AConfiguration, screenRound: i32) void; +pub extern fn AConfiguration_getUiModeType(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setUiModeType(config: ?*AConfiguration, uiModeType: i32) void; +pub extern fn AConfiguration_getUiModeNight(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setUiModeNight(config: ?*AConfiguration, uiModeNight: i32) void; +pub extern fn AConfiguration_getScreenWidthDp(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setScreenWidthDp(config: ?*AConfiguration, value: i32) void; +pub extern fn AConfiguration_getScreenHeightDp(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setScreenHeightDp(config: ?*AConfiguration, value: i32) void; +pub extern fn AConfiguration_getSmallestScreenWidthDp(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setSmallestScreenWidthDp(config: ?*AConfiguration, value: i32) void; +pub extern fn AConfiguration_getLayoutDirection(config: ?*AConfiguration) i32; +pub extern fn AConfiguration_setLayoutDirection(config: ?*AConfiguration, value: i32) void; +pub extern fn AConfiguration_diff(config1: ?*AConfiguration, config2: ?*AConfiguration) i32; +pub extern fn AConfiguration_match(base: ?*AConfiguration, requested: ?*AConfiguration) i32; +pub extern fn AConfiguration_isBetterThan(base: ?*AConfiguration, @"test": ?*AConfiguration, requested: ?*AConfiguration) i32; +pub const struct_ALooper = opaque {}; +pub const ALooper = struct_ALooper; +pub extern fn ALooper_forThread(...) ?*ALooper; +pub const ALOOPER_PREPARE_ALLOW_NON_CALLBACKS = @intFromEnum(enum_unnamed_12.ALOOPER_PREPARE_ALLOW_NON_CALLBACKS); +const enum_unnamed_12 = enum(c_int) { + ALOOPER_PREPARE_ALLOW_NON_CALLBACKS = 1, + _, +}; +pub extern fn ALooper_prepare(opts: c_int) ?*ALooper; +pub const ALOOPER_POLL_WAKE = @intFromEnum(enum_unnamed_13.ALOOPER_POLL_WAKE); +pub const ALOOPER_POLL_CALLBACK = @intFromEnum(enum_unnamed_13.ALOOPER_POLL_CALLBACK); +pub const ALOOPER_POLL_TIMEOUT = @intFromEnum(enum_unnamed_13.ALOOPER_POLL_TIMEOUT); +pub const ALOOPER_POLL_ERROR = @intFromEnum(enum_unnamed_13.ALOOPER_POLL_ERROR); +const enum_unnamed_13 = enum(c_int) { + ALOOPER_POLL_WAKE = -1, + ALOOPER_POLL_CALLBACK = -2, + ALOOPER_POLL_TIMEOUT = -3, + ALOOPER_POLL_ERROR = -4, + _, +}; +pub extern fn ALooper_acquire(looper: ?*ALooper) void; +pub extern fn ALooper_release(looper: ?*ALooper) void; +pub const ALOOPER_EVENT_INPUT = @intFromEnum(enum_unnamed_14.ALOOPER_EVENT_INPUT); +pub const ALOOPER_EVENT_OUTPUT = @intFromEnum(enum_unnamed_14.ALOOPER_EVENT_OUTPUT); +pub const ALOOPER_EVENT_ERROR = @intFromEnum(enum_unnamed_14.ALOOPER_EVENT_ERROR); +pub const ALOOPER_EVENT_HANGUP = @intFromEnum(enum_unnamed_14.ALOOPER_EVENT_HANGUP); +pub const ALOOPER_EVENT_INVALID = @intFromEnum(enum_unnamed_14.ALOOPER_EVENT_INVALID); +const enum_unnamed_14 = enum(c_int) { + ALOOPER_EVENT_INPUT = 1, + ALOOPER_EVENT_OUTPUT = 2, + ALOOPER_EVENT_ERROR = 4, + ALOOPER_EVENT_HANGUP = 8, + ALOOPER_EVENT_INVALID = 16, + _, +}; +pub const ALooper_callbackFunc = ?*const fn (c_int, c_int, ?*anyopaque) callconv(.c) c_int; +pub extern fn ALooper_pollOnce(timeoutMillis: c_int, outFd: [*c]c_int, outEvents: [*c]c_int, outData: [*c]?*anyopaque) c_int; +pub extern fn ALooper_pollAll(timeoutMillis: c_int, outFd: [*c]c_int, outEvents: [*c]c_int, outData: [*c]?*anyopaque) c_int; +pub extern fn ALooper_wake(looper: ?*ALooper) void; +pub extern fn ALooper_addFd(looper: ?*ALooper, fd: c_int, ident: c_int, events: c_int, callback: ALooper_callbackFunc, data: ?*anyopaque) c_int; +pub extern fn ALooper_removeFd(looper: ?*ALooper, fd: c_int) c_int; +pub const jboolean = u8; +pub const jbyte = i8; +pub const jchar = u16; +pub const jshort = i16; +pub const jint = i32; +pub const jlong = i64; +pub const jfloat = f32; +pub const jdouble = f64; +pub const jsize = jint; +pub const jobject = ?*anyopaque; +pub const jclass = jobject; +pub const jstring = jobject; +pub const jarray = jobject; +pub const jobjectArray = jarray; +pub const jbooleanArray = jarray; +pub const jbyteArray = jarray; +pub const jcharArray = jarray; +pub const jshortArray = jarray; +pub const jintArray = jarray; +pub const jlongArray = jarray; +pub const jfloatArray = jarray; +pub const jdoubleArray = jarray; +pub const jthrowable = jobject; +pub const jweak = jobject; +pub const struct__jfieldID = opaque {}; +pub const jfieldID = ?*struct__jfieldID; +pub const struct__jmethodID = opaque {}; +pub const jmethodID = ?*struct__jmethodID; +pub const struct_JNIInvokeInterface = extern struct { + reserved0: ?*anyopaque, + reserved1: ?*anyopaque, + reserved2: ?*anyopaque, + DestroyJavaVM: *const fn (*JavaVM) callconv(.c) jint, + AttachCurrentThread: *const fn (*JavaVM, **JNIEnv, ?*anyopaque) callconv(.c) jint, + DetachCurrentThread: *const fn (*JavaVM) callconv(.c) jint, + GetEnv: *const fn (*JavaVM, *?*anyopaque, jint) callconv(.c) jint, + AttachCurrentThreadAsDaemon: *const fn (*JavaVM, **JNIEnv, ?*anyopaque) callconv(.c) jint, +}; +pub const union_jvalue = extern union { + z: jboolean, + b: jbyte, + c: jchar, + s: jshort, + i: jint, + j: jlong, + f: jfloat, + d: jdouble, + l: jobject, +}; +pub const jvalue = union_jvalue; +pub const JNIInvalidRefType = @intFromEnum(enum_jobjectRefType.JNIInvalidRefType); +pub const JNILocalRefType = @intFromEnum(enum_jobjectRefType.JNILocalRefType); +pub const JNIGlobalRefType = @intFromEnum(enum_jobjectRefType.JNIGlobalRefType); +pub const JNIWeakGlobalRefType = @intFromEnum(enum_jobjectRefType.JNIWeakGlobalRefType); +pub const enum_jobjectRefType = enum(c_int) { + JNIInvalidRefType = 0, + JNILocalRefType = 1, + JNIGlobalRefType = 2, + JNIWeakGlobalRefType = 3, + _, +}; +pub const jobjectRefType = enum_jobjectRefType; +const struct_unnamed_15 = extern struct { + name: [*c]const u8, + signature: [*c]const u8, + fnPtr: ?*const anyopaque, +}; +pub const JNINativeMethod = struct_unnamed_15; +pub const JNINativeInterface = extern struct { + reserved0: ?*anyopaque, + reserved1: ?*anyopaque, + reserved2: ?*anyopaque, + reserved3: ?*anyopaque, + GetVersion: *const fn (*JNIEnv) callconv(.c) jint, + DefineClass: *const fn (*JNIEnv, [*:0]const u8, jobject, [*c]const jbyte, jsize) callconv(.c) jclass, + FindClass: *const fn (*JNIEnv, [*:0]const u8) callconv(.c) jclass, + FromReflectedMethod: *const fn (*JNIEnv, jobject) callconv(.c) jmethodID, + FromReflectedField: *const fn (*JNIEnv, jobject) callconv(.c) jfieldID, + ToReflectedMethod: *const fn (*JNIEnv, jclass, jmethodID, jboolean) callconv(.c) jobject, + GetSuperclass: *const fn (*JNIEnv, jclass) callconv(.c) jclass, + IsAssignableFrom: *const fn (*JNIEnv, jclass, jclass) callconv(.c) jboolean, + ToReflectedField: *const fn (*JNIEnv, jclass, jfieldID, jboolean) callconv(.c) jobject, + Throw: *const fn (*JNIEnv, jthrowable) callconv(.c) jint, + ThrowNew: *const fn (*JNIEnv, jclass, [*:0]const u8) callconv(.c) jint, + ExceptionOccurred: *const fn (*JNIEnv) callconv(.c) jthrowable, + ExceptionDescribe: *const fn (*JNIEnv) callconv(.c) void, + ExceptionClear: *const fn (*JNIEnv) callconv(.c) void, + FatalError: *const fn (*JNIEnv, [*:0]const u8) callconv(.c) void, + PushLocalFrame: *const fn (*JNIEnv, jint) callconv(.c) jint, + PopLocalFrame: *const fn (*JNIEnv, jobject) callconv(.c) jobject, + NewGlobalRef: *const fn (*JNIEnv, jobject) callconv(.c) jobject, + DeleteGlobalRef: *const fn (*JNIEnv, jobject) callconv(.c) void, + DeleteLocalRef: *const fn (*JNIEnv, jobject) callconv(.c) void, + IsSameObject: *const fn (*JNIEnv, jobject, jobject) callconv(.c) jboolean, + NewLocalRef: *const fn (*JNIEnv, jobject) callconv(.c) jobject, + EnsureLocalCapacity: *const fn (*JNIEnv, jint) callconv(.c) jint, + AllocObject: *const fn (*JNIEnv, jclass) callconv(.c) jobject, + NewObject: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jobject, + NewObjectV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jobject, + NewObjectA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jobject, + GetObjectClass: *const fn (*JNIEnv, jobject) callconv(.c) jclass, + IsInstanceOf: *const fn (*JNIEnv, jobject, jclass) callconv(.c) jboolean, + GetMethodID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.c) jmethodID, + CallObjectMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jobject, + CallObjectMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jobject, + CallObjectMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jobject, + CallBooleanMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jboolean, + CallBooleanMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jboolean, + CallBooleanMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jboolean, + CallByteMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jbyte, + CallByteMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jbyte, + CallByteMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jbyte, + CallCharMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jchar, + CallCharMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jchar, + CallCharMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jchar, + CallShortMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jshort, + CallShortMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jshort, + CallShortMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jshort, + CallIntMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jint, + CallIntMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jint, + CallIntMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jint, + CallLongMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jlong, + CallLongMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jlong, + CallLongMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jlong, + CallFloatMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jfloat, + CallFloatMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jfloat, + CallFloatMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jfloat, + CallDoubleMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jdouble, + CallDoubleMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jdouble, + CallDoubleMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jdouble, + CallVoidMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) void, + CallVoidMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) void, + CallVoidMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) void, + CallNonvirtualObjectMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jobject, + CallNonvirtualObjectMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jobject, + CallNonvirtualObjectMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jobject, + CallNonvirtualBooleanMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jboolean, + CallNonvirtualBooleanMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jboolean, + CallNonvirtualBooleanMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jboolean, + CallNonvirtualByteMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jbyte, + CallNonvirtualByteMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jbyte, + CallNonvirtualByteMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jbyte, + CallNonvirtualCharMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jchar, + CallNonvirtualCharMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jchar, + CallNonvirtualCharMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jchar, + CallNonvirtualShortMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jshort, + CallNonvirtualShortMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jshort, + CallNonvirtualShortMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jshort, + CallNonvirtualIntMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jint, + CallNonvirtualIntMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jint, + CallNonvirtualIntMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jint, + CallNonvirtualLongMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jlong, + CallNonvirtualLongMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jlong, + CallNonvirtualLongMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jlong, + CallNonvirtualFloatMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jfloat, + CallNonvirtualFloatMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jfloat, + CallNonvirtualFloatMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jfloat, + CallNonvirtualDoubleMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jdouble, + CallNonvirtualDoubleMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jdouble, + CallNonvirtualDoubleMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jdouble, + CallNonvirtualVoidMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) void, + CallNonvirtualVoidMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) void, + CallNonvirtualVoidMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) void, + GetFieldID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.c) jfieldID, + GetObjectField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jobject, + GetBooleanField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jboolean, + GetByteField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jbyte, + GetCharField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jchar, + GetShortField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jshort, + GetIntField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jint, + GetLongField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jlong, + GetFloatField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jfloat, + GetDoubleField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jdouble, + SetObjectField: *const fn (*JNIEnv, jobject, jfieldID, jobject) callconv(.c) void, + SetBooleanField: *const fn (*JNIEnv, jobject, jfieldID, jboolean) callconv(.c) void, + SetByteField: *const fn (*JNIEnv, jobject, jfieldID, jbyte) callconv(.c) void, + SetCharField: *const fn (*JNIEnv, jobject, jfieldID, jchar) callconv(.c) void, + SetShortField: *const fn (*JNIEnv, jobject, jfieldID, jshort) callconv(.c) void, + SetIntField: *const fn (*JNIEnv, jobject, jfieldID, jint) callconv(.c) void, + SetLongField: *const fn (*JNIEnv, jobject, jfieldID, jlong) callconv(.c) void, + SetFloatField: *const fn (*JNIEnv, jobject, jfieldID, jfloat) callconv(.c) void, + SetDoubleField: *const fn (*JNIEnv, jobject, jfieldID, jdouble) callconv(.c) void, + GetStaticMethodID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.c) jmethodID, + CallStaticObjectMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jobject, + CallStaticObjectMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jobject, + CallStaticObjectMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jobject, + CallStaticBooleanMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jboolean, + CallStaticBooleanMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jboolean, + CallStaticBooleanMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jboolean, + CallStaticByteMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jbyte, + CallStaticByteMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jbyte, + CallStaticByteMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jbyte, + CallStaticCharMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jchar, + CallStaticCharMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jchar, + CallStaticCharMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jchar, + CallStaticShortMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jshort, + CallStaticShortMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jshort, + CallStaticShortMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jshort, + CallStaticIntMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jint, + CallStaticIntMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jint, + CallStaticIntMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jint, + CallStaticLongMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jlong, + CallStaticLongMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jlong, + CallStaticLongMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jlong, + CallStaticFloatMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jfloat, + CallStaticFloatMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jfloat, + CallStaticFloatMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jfloat, + CallStaticDoubleMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jdouble, + CallStaticDoubleMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jdouble, + CallStaticDoubleMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jdouble, + CallStaticVoidMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) void, + CallStaticVoidMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) void, + CallStaticVoidMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) void, + GetStaticFieldID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.c) jfieldID, + GetStaticObjectField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jobject, + GetStaticBooleanField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jboolean, + GetStaticByteField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jbyte, + GetStaticCharField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jchar, + GetStaticShortField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jshort, + GetStaticIntField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jint, + GetStaticLongField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jlong, + GetStaticFloatField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jfloat, + GetStaticDoubleField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jdouble, + SetStaticObjectField: *const fn (*JNIEnv, jclass, jfieldID, jobject) callconv(.c) void, + SetStaticBooleanField: *const fn (*JNIEnv, jclass, jfieldID, jboolean) callconv(.c) void, + SetStaticByteField: *const fn (*JNIEnv, jclass, jfieldID, jbyte) callconv(.c) void, + SetStaticCharField: *const fn (*JNIEnv, jclass, jfieldID, jchar) callconv(.c) void, + SetStaticShortField: *const fn (*JNIEnv, jclass, jfieldID, jshort) callconv(.c) void, + SetStaticIntField: *const fn (*JNIEnv, jclass, jfieldID, jint) callconv(.c) void, + SetStaticLongField: *const fn (*JNIEnv, jclass, jfieldID, jlong) callconv(.c) void, + SetStaticFloatField: *const fn (*JNIEnv, jclass, jfieldID, jfloat) callconv(.c) void, + SetStaticDoubleField: *const fn (*JNIEnv, jclass, jfieldID, jdouble) callconv(.c) void, + NewString: *const fn (*JNIEnv, [*c]const jchar, jsize) callconv(.c) jstring, + GetStringLength: *const fn (*JNIEnv, jstring) callconv(.c) jsize, + GetStringChars: *const fn (*JNIEnv, jstring, [*c]jboolean) callconv(.c) [*c]const jchar, + ReleaseStringChars: *const fn (*JNIEnv, jstring, [*c]const jchar) callconv(.c) void, + NewStringUTF: *const fn (*JNIEnv, [*:0]const u8) callconv(.c) jstring, + GetStringUTFLength: *const fn (*JNIEnv, jstring) callconv(.c) jsize, + GetStringUTFChars: *const fn (*JNIEnv, jstring, [*c]jboolean) callconv(.c) [*:0]const u8, + ReleaseStringUTFChars: *const fn (*JNIEnv, jstring, [*:0]const u8) callconv(.c) void, + GetArrayLength: *const fn (*JNIEnv, jarray) callconv(.c) jsize, + NewObjectArray: *const fn (*JNIEnv, jsize, jclass, jobject) callconv(.c) jobjectArray, + GetObjectArrayElement: *const fn (*JNIEnv, jobjectArray, jsize) callconv(.c) jobject, + SetObjectArrayElement: *const fn (*JNIEnv, jobjectArray, jsize, jobject) callconv(.c) void, + NewBooleanArray: *const fn (*JNIEnv, jsize) callconv(.c) jbooleanArray, + NewByteArray: *const fn (*JNIEnv, jsize) callconv(.c) jbyteArray, + NewCharArray: *const fn (*JNIEnv, jsize) callconv(.c) jcharArray, + NewShortArray: *const fn (*JNIEnv, jsize) callconv(.c) jshortArray, + NewIntArray: *const fn (*JNIEnv, jsize) callconv(.c) jintArray, + NewLongArray: *const fn (*JNIEnv, jsize) callconv(.c) jlongArray, + NewFloatArray: *const fn (*JNIEnv, jsize) callconv(.c) jfloatArray, + NewDoubleArray: *const fn (*JNIEnv, jsize) callconv(.c) jdoubleArray, + GetBooleanArrayElements: *const fn (*JNIEnv, jbooleanArray, [*c]jboolean) callconv(.c) [*c]jboolean, + GetByteArrayElements: *const fn (*JNIEnv, jbyteArray, [*c]jboolean) callconv(.c) [*c]jbyte, + GetCharArrayElements: *const fn (*JNIEnv, jcharArray, [*c]jboolean) callconv(.c) [*c]jchar, + GetShortArrayElements: *const fn (*JNIEnv, jshortArray, [*c]jboolean) callconv(.c) [*c]jshort, + GetIntArrayElements: *const fn (*JNIEnv, jintArray, [*c]jboolean) callconv(.c) [*c]jint, + GetLongArrayElements: *const fn (*JNIEnv, jlongArray, [*c]jboolean) callconv(.c) [*c]jlong, + GetFloatArrayElements: *const fn (*JNIEnv, jfloatArray, [*c]jboolean) callconv(.c) [*c]jfloat, + GetDoubleArrayElements: *const fn (*JNIEnv, jdoubleArray, [*c]jboolean) callconv(.c) [*c]jdouble, + ReleaseBooleanArrayElements: *const fn (*JNIEnv, jbooleanArray, [*c]jboolean, jint) callconv(.c) void, + ReleaseByteArrayElements: *const fn (*JNIEnv, jbyteArray, [*c]jbyte, jint) callconv(.c) void, + ReleaseCharArrayElements: *const fn (*JNIEnv, jcharArray, [*c]jchar, jint) callconv(.c) void, + ReleaseShortArrayElements: *const fn (*JNIEnv, jshortArray, [*c]jshort, jint) callconv(.c) void, + ReleaseIntArrayElements: *const fn (*JNIEnv, jintArray, [*c]jint, jint) callconv(.c) void, + ReleaseLongArrayElements: *const fn (*JNIEnv, jlongArray, [*c]jlong, jint) callconv(.c) void, + ReleaseFloatArrayElements: *const fn (*JNIEnv, jfloatArray, [*c]jfloat, jint) callconv(.c) void, + ReleaseDoubleArrayElements: *const fn (*JNIEnv, jdoubleArray, [*c]jdouble, jint) callconv(.c) void, + GetBooleanArrayRegion: *const fn (*JNIEnv, jbooleanArray, jsize, jsize, [*c]jboolean) callconv(.c) void, + GetByteArrayRegion: *const fn (*JNIEnv, jbyteArray, jsize, jsize, [*c]jbyte) callconv(.c) void, + GetCharArrayRegion: *const fn (*JNIEnv, jcharArray, jsize, jsize, [*c]jchar) callconv(.c) void, + GetShortArrayRegion: *const fn (*JNIEnv, jshortArray, jsize, jsize, [*c]jshort) callconv(.c) void, + GetIntArrayRegion: *const fn (*JNIEnv, jintArray, jsize, jsize, [*c]jint) callconv(.c) void, + GetLongArrayRegion: *const fn (*JNIEnv, jlongArray, jsize, jsize, [*c]jlong) callconv(.c) void, + GetFloatArrayRegion: *const fn (*JNIEnv, jfloatArray, jsize, jsize, [*c]jfloat) callconv(.c) void, + GetDoubleArrayRegion: *const fn (*JNIEnv, jdoubleArray, jsize, jsize, [*c]jdouble) callconv(.c) void, + SetBooleanArrayRegion: *const fn (*JNIEnv, jbooleanArray, jsize, jsize, [*c]const jboolean) callconv(.c) void, + SetByteArrayRegion: *const fn (*JNIEnv, jbyteArray, jsize, jsize, [*c]const jbyte) callconv(.c) void, + SetCharArrayRegion: *const fn (*JNIEnv, jcharArray, jsize, jsize, [*c]const jchar) callconv(.c) void, + SetShortArrayRegion: *const fn (*JNIEnv, jshortArray, jsize, jsize, [*c]const jshort) callconv(.c) void, + SetIntArrayRegion: *const fn (*JNIEnv, jintArray, jsize, jsize, [*c]const jint) callconv(.c) void, + SetLongArrayRegion: *const fn (*JNIEnv, jlongArray, jsize, jsize, [*c]const jlong) callconv(.c) void, + SetFloatArrayRegion: *const fn (*JNIEnv, jfloatArray, jsize, jsize, [*c]const jfloat) callconv(.c) void, + SetDoubleArrayRegion: *const fn (*JNIEnv, jdoubleArray, jsize, jsize, [*c]const jdouble) callconv(.c) void, + RegisterNatives: *const fn (*JNIEnv, jclass, [*c]const JNINativeMethod, jint) callconv(.c) jint, + UnregisterNatives: *const fn (*JNIEnv, jclass) callconv(.c) jint, + MonitorEnter: *const fn (*JNIEnv, jobject) callconv(.c) jint, + MonitorExit: *const fn (*JNIEnv, jobject) callconv(.c) jint, + GetJavaVM: *const fn (*JNIEnv, [*c][*c]JavaVM) callconv(.c) jint, + GetStringRegion: *const fn (*JNIEnv, jstring, jsize, jsize, [*c]jchar) callconv(.c) void, + GetStringUTFRegion: *const fn (*JNIEnv, jstring, jsize, jsize, [*c]u8) callconv(.c) void, + GetPrimitiveArrayCritical: *const fn (*JNIEnv, jarray, [*c]jboolean) callconv(.c) ?*anyopaque, + ReleasePrimitiveArrayCritical: *const fn (*JNIEnv, jarray, ?*anyopaque, jint) callconv(.c) void, + GetStringCritical: *const fn (*JNIEnv, jstring, [*c]jboolean) callconv(.c) [*c]const jchar, + ReleaseStringCritical: *const fn (*JNIEnv, jstring, [*c]const jchar) callconv(.c) void, + NewWeakGlobalRef: *const fn (*JNIEnv, jobject) callconv(.c) jweak, + DeleteWeakGlobalRef: *const fn (*JNIEnv, jweak) callconv(.c) void, + ExceptionCheck: *const fn (*JNIEnv) callconv(.c) jboolean, + NewDirectByteBuffer: *const fn (*JNIEnv, ?*anyopaque, jlong) callconv(.c) jobject, + GetDirectBufferAddress: *const fn (*JNIEnv, jobject) callconv(.c) ?*anyopaque, + GetDirectBufferCapacity: *const fn (*JNIEnv, jobject) callconv(.c) jlong, + GetObjectRefType: *const fn (*JNIEnv, jobject) callconv(.c) jobjectRefType, +}; +pub const struct__JNIEnv = extern struct { + functions: [*c]const JNINativeInterface, +}; +pub const struct__JavaVM = extern struct { + functions: [*c]const struct_JNIInvokeInterface, +}; +pub const C_JNIEnv = *const JNINativeInterface; +pub const JNIEnv = *const JNINativeInterface; +pub const JavaVM = *const struct_JNIInvokeInterface; +pub const struct_JavaVMAttachArgs = extern struct { + version: jint, + name: [*c]const u8, + group: jobject, +}; +pub const JavaVMAttachArgs = struct_JavaVMAttachArgs; +pub const struct_JavaVMOption = extern struct { + optionString: [*c]const u8, + extraInfo: ?*anyopaque, +}; +pub const JavaVMOption = struct_JavaVMOption; +pub const struct_JavaVMInitArgs = extern struct { + version: jint, + nOptions: jint, + options: [*c]JavaVMOption, + ignoreUnrecognized: jboolean, +}; +pub const JavaVMInitArgs = struct_JavaVMInitArgs; +pub extern fn JNI_GetDefaultJavaVMInitArgs(?*anyopaque) jint; +pub extern fn JNI_CreateJavaVM([*c][*c]JavaVM, [*c][*c]JNIEnv, ?*anyopaque) jint; +pub extern fn JNI_GetCreatedJavaVMs([*c][*c]JavaVM, jsize, [*c]jsize) jint; +pub extern fn JNI_OnLoad(vm: [*c]JavaVM, reserved: ?*anyopaque) jint; +pub extern fn JNI_OnUnload(vm: [*c]JavaVM, reserved: ?*anyopaque) void; +pub const AKEYCODE_UNKNOWN = @intFromEnum(enum_unnamed_16.AKEYCODE_UNKNOWN); +pub const AKEYCODE_SOFT_LEFT = @intFromEnum(enum_unnamed_16.AKEYCODE_SOFT_LEFT); +pub const AKEYCODE_SOFT_RIGHT = @intFromEnum(enum_unnamed_16.AKEYCODE_SOFT_RIGHT); +pub const AKEYCODE_HOME = @intFromEnum(enum_unnamed_16.AKEYCODE_HOME); +pub const AKEYCODE_BACK = @intFromEnum(enum_unnamed_16.AKEYCODE_BACK); +pub const AKEYCODE_CALL = @intFromEnum(enum_unnamed_16.AKEYCODE_CALL); +pub const AKEYCODE_ENDCALL = @intFromEnum(enum_unnamed_16.AKEYCODE_ENDCALL); +pub const AKEYCODE_0 = @intFromEnum(enum_unnamed_16.AKEYCODE_0); +pub const AKEYCODE_1 = @intFromEnum(enum_unnamed_16.AKEYCODE_1); +pub const AKEYCODE_2 = @intFromEnum(enum_unnamed_16.AKEYCODE_2); +pub const AKEYCODE_3 = @intFromEnum(enum_unnamed_16.AKEYCODE_3); +pub const AKEYCODE_4 = @intFromEnum(enum_unnamed_16.AKEYCODE_4); +pub const AKEYCODE_5 = @intFromEnum(enum_unnamed_16.AKEYCODE_5); +pub const AKEYCODE_6 = @intFromEnum(enum_unnamed_16.AKEYCODE_6); +pub const AKEYCODE_7 = @intFromEnum(enum_unnamed_16.AKEYCODE_7); +pub const AKEYCODE_8 = @intFromEnum(enum_unnamed_16.AKEYCODE_8); +pub const AKEYCODE_9 = @intFromEnum(enum_unnamed_16.AKEYCODE_9); +pub const AKEYCODE_STAR = @intFromEnum(enum_unnamed_16.AKEYCODE_STAR); +pub const AKEYCODE_POUND = @intFromEnum(enum_unnamed_16.AKEYCODE_POUND); +pub const AKEYCODE_DPAD_UP = @intFromEnum(enum_unnamed_16.AKEYCODE_DPAD_UP); +pub const AKEYCODE_DPAD_DOWN = @intFromEnum(enum_unnamed_16.AKEYCODE_DPAD_DOWN); +pub const AKEYCODE_DPAD_LEFT = @intFromEnum(enum_unnamed_16.AKEYCODE_DPAD_LEFT); +pub const AKEYCODE_DPAD_RIGHT = @intFromEnum(enum_unnamed_16.AKEYCODE_DPAD_RIGHT); +pub const AKEYCODE_DPAD_CENTER = @intFromEnum(enum_unnamed_16.AKEYCODE_DPAD_CENTER); +pub const AKEYCODE_VOLUME_UP = @intFromEnum(enum_unnamed_16.AKEYCODE_VOLUME_UP); +pub const AKEYCODE_VOLUME_DOWN = @intFromEnum(enum_unnamed_16.AKEYCODE_VOLUME_DOWN); +pub const AKEYCODE_POWER = @intFromEnum(enum_unnamed_16.AKEYCODE_POWER); +pub const AKEYCODE_CAMERA = @intFromEnum(enum_unnamed_16.AKEYCODE_CAMERA); +pub const AKEYCODE_CLEAR = @intFromEnum(enum_unnamed_16.AKEYCODE_CLEAR); +pub const AKEYCODE_A = @intFromEnum(enum_unnamed_16.AKEYCODE_A); +pub const AKEYCODE_B = @intFromEnum(enum_unnamed_16.AKEYCODE_B); +pub const AKEYCODE_C = @intFromEnum(enum_unnamed_16.AKEYCODE_C); +pub const AKEYCODE_D = @intFromEnum(enum_unnamed_16.AKEYCODE_D); +pub const AKEYCODE_E = @intFromEnum(enum_unnamed_16.AKEYCODE_E); +pub const AKEYCODE_F = @intFromEnum(enum_unnamed_16.AKEYCODE_F); +pub const AKEYCODE_G = @intFromEnum(enum_unnamed_16.AKEYCODE_G); +pub const AKEYCODE_H = @intFromEnum(enum_unnamed_16.AKEYCODE_H); +pub const AKEYCODE_I = @intFromEnum(enum_unnamed_16.AKEYCODE_I); +pub const AKEYCODE_J = @intFromEnum(enum_unnamed_16.AKEYCODE_J); +pub const AKEYCODE_K = @intFromEnum(enum_unnamed_16.AKEYCODE_K); +pub const AKEYCODE_L = @intFromEnum(enum_unnamed_16.AKEYCODE_L); +pub const AKEYCODE_M = @intFromEnum(enum_unnamed_16.AKEYCODE_M); +pub const AKEYCODE_N = @intFromEnum(enum_unnamed_16.AKEYCODE_N); +pub const AKEYCODE_O = @intFromEnum(enum_unnamed_16.AKEYCODE_O); +pub const AKEYCODE_P = @intFromEnum(enum_unnamed_16.AKEYCODE_P); +pub const AKEYCODE_Q = @intFromEnum(enum_unnamed_16.AKEYCODE_Q); +pub const AKEYCODE_R = @intFromEnum(enum_unnamed_16.AKEYCODE_R); +pub const AKEYCODE_S = @intFromEnum(enum_unnamed_16.AKEYCODE_S); +pub const AKEYCODE_T = @intFromEnum(enum_unnamed_16.AKEYCODE_T); +pub const AKEYCODE_U = @intFromEnum(enum_unnamed_16.AKEYCODE_U); +pub const AKEYCODE_V = @intFromEnum(enum_unnamed_16.AKEYCODE_V); +pub const AKEYCODE_W = @intFromEnum(enum_unnamed_16.AKEYCODE_W); +pub const AKEYCODE_X = @intFromEnum(enum_unnamed_16.AKEYCODE_X); +pub const AKEYCODE_Y = @intFromEnum(enum_unnamed_16.AKEYCODE_Y); +pub const AKEYCODE_Z = @intFromEnum(enum_unnamed_16.AKEYCODE_Z); +pub const AKEYCODE_COMMA = @intFromEnum(enum_unnamed_16.AKEYCODE_COMMA); +pub const AKEYCODE_PERIOD = @intFromEnum(enum_unnamed_16.AKEYCODE_PERIOD); +pub const AKEYCODE_ALT_LEFT = @intFromEnum(enum_unnamed_16.AKEYCODE_ALT_LEFT); +pub const AKEYCODE_ALT_RIGHT = @intFromEnum(enum_unnamed_16.AKEYCODE_ALT_RIGHT); +pub const AKEYCODE_SHIFT_LEFT = @intFromEnum(enum_unnamed_16.AKEYCODE_SHIFT_LEFT); +pub const AKEYCODE_SHIFT_RIGHT = @intFromEnum(enum_unnamed_16.AKEYCODE_SHIFT_RIGHT); +pub const AKEYCODE_TAB = @intFromEnum(enum_unnamed_16.AKEYCODE_TAB); +pub const AKEYCODE_SPACE = @intFromEnum(enum_unnamed_16.AKEYCODE_SPACE); +pub const AKEYCODE_SYM = @intFromEnum(enum_unnamed_16.AKEYCODE_SYM); +pub const AKEYCODE_EXPLORER = @intFromEnum(enum_unnamed_16.AKEYCODE_EXPLORER); +pub const AKEYCODE_ENVELOPE = @intFromEnum(enum_unnamed_16.AKEYCODE_ENVELOPE); +pub const AKEYCODE_ENTER = @intFromEnum(enum_unnamed_16.AKEYCODE_ENTER); +pub const AKEYCODE_DEL = @intFromEnum(enum_unnamed_16.AKEYCODE_DEL); +pub const AKEYCODE_GRAVE = @intFromEnum(enum_unnamed_16.AKEYCODE_GRAVE); +pub const AKEYCODE_MINUS = @intFromEnum(enum_unnamed_16.AKEYCODE_MINUS); +pub const AKEYCODE_EQUALS = @intFromEnum(enum_unnamed_16.AKEYCODE_EQUALS); +pub const AKEYCODE_LEFT_BRACKET = @intFromEnum(enum_unnamed_16.AKEYCODE_LEFT_BRACKET); +pub const AKEYCODE_RIGHT_BRACKET = @intFromEnum(enum_unnamed_16.AKEYCODE_RIGHT_BRACKET); +pub const AKEYCODE_BACKSLASH = @intFromEnum(enum_unnamed_16.AKEYCODE_BACKSLASH); +pub const AKEYCODE_SEMICOLON = @intFromEnum(enum_unnamed_16.AKEYCODE_SEMICOLON); +pub const AKEYCODE_APOSTROPHE = @intFromEnum(enum_unnamed_16.AKEYCODE_APOSTROPHE); +pub const AKEYCODE_SLASH = @intFromEnum(enum_unnamed_16.AKEYCODE_SLASH); +pub const AKEYCODE_AT = @intFromEnum(enum_unnamed_16.AKEYCODE_AT); +pub const AKEYCODE_NUM = @intFromEnum(enum_unnamed_16.AKEYCODE_NUM); +pub const AKEYCODE_HEADSETHOOK = @intFromEnum(enum_unnamed_16.AKEYCODE_HEADSETHOOK); +pub const AKEYCODE_FOCUS = @intFromEnum(enum_unnamed_16.AKEYCODE_FOCUS); +pub const AKEYCODE_PLUS = @intFromEnum(enum_unnamed_16.AKEYCODE_PLUS); +pub const AKEYCODE_MENU = @intFromEnum(enum_unnamed_16.AKEYCODE_MENU); +pub const AKEYCODE_NOTIFICATION = @intFromEnum(enum_unnamed_16.AKEYCODE_NOTIFICATION); +pub const AKEYCODE_SEARCH = @intFromEnum(enum_unnamed_16.AKEYCODE_SEARCH); +pub const AKEYCODE_MEDIA_PLAY_PAUSE = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_PLAY_PAUSE); +pub const AKEYCODE_MEDIA_STOP = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_STOP); +pub const AKEYCODE_MEDIA_NEXT = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_NEXT); +pub const AKEYCODE_MEDIA_PREVIOUS = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_PREVIOUS); +pub const AKEYCODE_MEDIA_REWIND = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_REWIND); +pub const AKEYCODE_MEDIA_FAST_FORWARD = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_FAST_FORWARD); +pub const AKEYCODE_MUTE = @intFromEnum(enum_unnamed_16.AKEYCODE_MUTE); +pub const AKEYCODE_PAGE_UP = @intFromEnum(enum_unnamed_16.AKEYCODE_PAGE_UP); +pub const AKEYCODE_PAGE_DOWN = @intFromEnum(enum_unnamed_16.AKEYCODE_PAGE_DOWN); +pub const AKEYCODE_PICTSYMBOLS = @intFromEnum(enum_unnamed_16.AKEYCODE_PICTSYMBOLS); +pub const AKEYCODE_SWITCH_CHARSET = @intFromEnum(enum_unnamed_16.AKEYCODE_SWITCH_CHARSET); +pub const AKEYCODE_BUTTON_A = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_A); +pub const AKEYCODE_BUTTON_B = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_B); +pub const AKEYCODE_BUTTON_C = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_C); +pub const AKEYCODE_BUTTON_X = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_X); +pub const AKEYCODE_BUTTON_Y = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_Y); +pub const AKEYCODE_BUTTON_Z = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_Z); +pub const AKEYCODE_BUTTON_L1 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_L1); +pub const AKEYCODE_BUTTON_R1 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_R1); +pub const AKEYCODE_BUTTON_L2 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_L2); +pub const AKEYCODE_BUTTON_R2 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_R2); +pub const AKEYCODE_BUTTON_THUMBL = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_THUMBL); +pub const AKEYCODE_BUTTON_THUMBR = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_THUMBR); +pub const AKEYCODE_BUTTON_START = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_START); +pub const AKEYCODE_BUTTON_SELECT = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_SELECT); +pub const AKEYCODE_BUTTON_MODE = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_MODE); +pub const AKEYCODE_ESCAPE = @intFromEnum(enum_unnamed_16.AKEYCODE_ESCAPE); +pub const AKEYCODE_FORWARD_DEL = @intFromEnum(enum_unnamed_16.AKEYCODE_FORWARD_DEL); +pub const AKEYCODE_CTRL_LEFT = @intFromEnum(enum_unnamed_16.AKEYCODE_CTRL_LEFT); +pub const AKEYCODE_CTRL_RIGHT = @intFromEnum(enum_unnamed_16.AKEYCODE_CTRL_RIGHT); +pub const AKEYCODE_CAPS_LOCK = @intFromEnum(enum_unnamed_16.AKEYCODE_CAPS_LOCK); +pub const AKEYCODE_SCROLL_LOCK = @intFromEnum(enum_unnamed_16.AKEYCODE_SCROLL_LOCK); +pub const AKEYCODE_META_LEFT = @intFromEnum(enum_unnamed_16.AKEYCODE_META_LEFT); +pub const AKEYCODE_META_RIGHT = @intFromEnum(enum_unnamed_16.AKEYCODE_META_RIGHT); +pub const AKEYCODE_FUNCTION = @intFromEnum(enum_unnamed_16.AKEYCODE_FUNCTION); +pub const AKEYCODE_SYSRQ = @intFromEnum(enum_unnamed_16.AKEYCODE_SYSRQ); +pub const AKEYCODE_BREAK = @intFromEnum(enum_unnamed_16.AKEYCODE_BREAK); +pub const AKEYCODE_MOVE_HOME = @intFromEnum(enum_unnamed_16.AKEYCODE_MOVE_HOME); +pub const AKEYCODE_MOVE_END = @intFromEnum(enum_unnamed_16.AKEYCODE_MOVE_END); +pub const AKEYCODE_INSERT = @intFromEnum(enum_unnamed_16.AKEYCODE_INSERT); +pub const AKEYCODE_FORWARD = @intFromEnum(enum_unnamed_16.AKEYCODE_FORWARD); +pub const AKEYCODE_MEDIA_PLAY = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_PLAY); +pub const AKEYCODE_MEDIA_PAUSE = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_PAUSE); +pub const AKEYCODE_MEDIA_CLOSE = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_CLOSE); +pub const AKEYCODE_MEDIA_EJECT = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_EJECT); +pub const AKEYCODE_MEDIA_RECORD = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_RECORD); +pub const AKEYCODE_F1 = @intFromEnum(enum_unnamed_16.AKEYCODE_F1); +pub const AKEYCODE_F2 = @intFromEnum(enum_unnamed_16.AKEYCODE_F2); +pub const AKEYCODE_F3 = @intFromEnum(enum_unnamed_16.AKEYCODE_F3); +pub const AKEYCODE_F4 = @intFromEnum(enum_unnamed_16.AKEYCODE_F4); +pub const AKEYCODE_F5 = @intFromEnum(enum_unnamed_16.AKEYCODE_F5); +pub const AKEYCODE_F6 = @intFromEnum(enum_unnamed_16.AKEYCODE_F6); +pub const AKEYCODE_F7 = @intFromEnum(enum_unnamed_16.AKEYCODE_F7); +pub const AKEYCODE_F8 = @intFromEnum(enum_unnamed_16.AKEYCODE_F8); +pub const AKEYCODE_F9 = @intFromEnum(enum_unnamed_16.AKEYCODE_F9); +pub const AKEYCODE_F10 = @intFromEnum(enum_unnamed_16.AKEYCODE_F10); +pub const AKEYCODE_F11 = @intFromEnum(enum_unnamed_16.AKEYCODE_F11); +pub const AKEYCODE_F12 = @intFromEnum(enum_unnamed_16.AKEYCODE_F12); +pub const AKEYCODE_NUM_LOCK = @intFromEnum(enum_unnamed_16.AKEYCODE_NUM_LOCK); +pub const AKEYCODE_NUMPAD_0 = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_0); +pub const AKEYCODE_NUMPAD_1 = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_1); +pub const AKEYCODE_NUMPAD_2 = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_2); +pub const AKEYCODE_NUMPAD_3 = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_3); +pub const AKEYCODE_NUMPAD_4 = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_4); +pub const AKEYCODE_NUMPAD_5 = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_5); +pub const AKEYCODE_NUMPAD_6 = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_6); +pub const AKEYCODE_NUMPAD_7 = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_7); +pub const AKEYCODE_NUMPAD_8 = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_8); +pub const AKEYCODE_NUMPAD_9 = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_9); +pub const AKEYCODE_NUMPAD_DIVIDE = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_DIVIDE); +pub const AKEYCODE_NUMPAD_MULTIPLY = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_MULTIPLY); +pub const AKEYCODE_NUMPAD_SUBTRACT = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_SUBTRACT); +pub const AKEYCODE_NUMPAD_ADD = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_ADD); +pub const AKEYCODE_NUMPAD_DOT = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_DOT); +pub const AKEYCODE_NUMPAD_COMMA = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_COMMA); +pub const AKEYCODE_NUMPAD_ENTER = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_ENTER); +pub const AKEYCODE_NUMPAD_EQUALS = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_EQUALS); +pub const AKEYCODE_NUMPAD_LEFT_PAREN = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_LEFT_PAREN); +pub const AKEYCODE_NUMPAD_RIGHT_PAREN = @intFromEnum(enum_unnamed_16.AKEYCODE_NUMPAD_RIGHT_PAREN); +pub const AKEYCODE_VOLUME_MUTE = @intFromEnum(enum_unnamed_16.AKEYCODE_VOLUME_MUTE); +pub const AKEYCODE_INFO = @intFromEnum(enum_unnamed_16.AKEYCODE_INFO); +pub const AKEYCODE_CHANNEL_UP = @intFromEnum(enum_unnamed_16.AKEYCODE_CHANNEL_UP); +pub const AKEYCODE_CHANNEL_DOWN = @intFromEnum(enum_unnamed_16.AKEYCODE_CHANNEL_DOWN); +pub const AKEYCODE_ZOOM_IN = @intFromEnum(enum_unnamed_16.AKEYCODE_ZOOM_IN); +pub const AKEYCODE_ZOOM_OUT = @intFromEnum(enum_unnamed_16.AKEYCODE_ZOOM_OUT); +pub const AKEYCODE_TV = @intFromEnum(enum_unnamed_16.AKEYCODE_TV); +pub const AKEYCODE_WINDOW = @intFromEnum(enum_unnamed_16.AKEYCODE_WINDOW); +pub const AKEYCODE_GUIDE = @intFromEnum(enum_unnamed_16.AKEYCODE_GUIDE); +pub const AKEYCODE_DVR = @intFromEnum(enum_unnamed_16.AKEYCODE_DVR); +pub const AKEYCODE_BOOKMARK = @intFromEnum(enum_unnamed_16.AKEYCODE_BOOKMARK); +pub const AKEYCODE_CAPTIONS = @intFromEnum(enum_unnamed_16.AKEYCODE_CAPTIONS); +pub const AKEYCODE_SETTINGS = @intFromEnum(enum_unnamed_16.AKEYCODE_SETTINGS); +pub const AKEYCODE_TV_POWER = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_POWER); +pub const AKEYCODE_TV_INPUT = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_INPUT); +pub const AKEYCODE_STB_POWER = @intFromEnum(enum_unnamed_16.AKEYCODE_STB_POWER); +pub const AKEYCODE_STB_INPUT = @intFromEnum(enum_unnamed_16.AKEYCODE_STB_INPUT); +pub const AKEYCODE_AVR_POWER = @intFromEnum(enum_unnamed_16.AKEYCODE_AVR_POWER); +pub const AKEYCODE_AVR_INPUT = @intFromEnum(enum_unnamed_16.AKEYCODE_AVR_INPUT); +pub const AKEYCODE_PROG_RED = @intFromEnum(enum_unnamed_16.AKEYCODE_PROG_RED); +pub const AKEYCODE_PROG_GREEN = @intFromEnum(enum_unnamed_16.AKEYCODE_PROG_GREEN); +pub const AKEYCODE_PROG_YELLOW = @intFromEnum(enum_unnamed_16.AKEYCODE_PROG_YELLOW); +pub const AKEYCODE_PROG_BLUE = @intFromEnum(enum_unnamed_16.AKEYCODE_PROG_BLUE); +pub const AKEYCODE_APP_SWITCH = @intFromEnum(enum_unnamed_16.AKEYCODE_APP_SWITCH); +pub const AKEYCODE_BUTTON_1 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_1); +pub const AKEYCODE_BUTTON_2 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_2); +pub const AKEYCODE_BUTTON_3 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_3); +pub const AKEYCODE_BUTTON_4 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_4); +pub const AKEYCODE_BUTTON_5 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_5); +pub const AKEYCODE_BUTTON_6 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_6); +pub const AKEYCODE_BUTTON_7 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_7); +pub const AKEYCODE_BUTTON_8 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_8); +pub const AKEYCODE_BUTTON_9 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_9); +pub const AKEYCODE_BUTTON_10 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_10); +pub const AKEYCODE_BUTTON_11 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_11); +pub const AKEYCODE_BUTTON_12 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_12); +pub const AKEYCODE_BUTTON_13 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_13); +pub const AKEYCODE_BUTTON_14 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_14); +pub const AKEYCODE_BUTTON_15 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_15); +pub const AKEYCODE_BUTTON_16 = @intFromEnum(enum_unnamed_16.AKEYCODE_BUTTON_16); +pub const AKEYCODE_LANGUAGE_SWITCH = @intFromEnum(enum_unnamed_16.AKEYCODE_LANGUAGE_SWITCH); +pub const AKEYCODE_MANNER_MODE = @intFromEnum(enum_unnamed_16.AKEYCODE_MANNER_MODE); +pub const AKEYCODE_3D_MODE = @intFromEnum(enum_unnamed_16.AKEYCODE_3D_MODE); +pub const AKEYCODE_CONTACTS = @intFromEnum(enum_unnamed_16.AKEYCODE_CONTACTS); +pub const AKEYCODE_CALENDAR = @intFromEnum(enum_unnamed_16.AKEYCODE_CALENDAR); +pub const AKEYCODE_MUSIC = @intFromEnum(enum_unnamed_16.AKEYCODE_MUSIC); +pub const AKEYCODE_CALCULATOR = @intFromEnum(enum_unnamed_16.AKEYCODE_CALCULATOR); +pub const AKEYCODE_ZENKAKU_HANKAKU = @intFromEnum(enum_unnamed_16.AKEYCODE_ZENKAKU_HANKAKU); +pub const AKEYCODE_EISU = @intFromEnum(enum_unnamed_16.AKEYCODE_EISU); +pub const AKEYCODE_MUHENKAN = @intFromEnum(enum_unnamed_16.AKEYCODE_MUHENKAN); +pub const AKEYCODE_HENKAN = @intFromEnum(enum_unnamed_16.AKEYCODE_HENKAN); +pub const AKEYCODE_KATAKANA_HIRAGANA = @intFromEnum(enum_unnamed_16.AKEYCODE_KATAKANA_HIRAGANA); +pub const AKEYCODE_YEN = @intFromEnum(enum_unnamed_16.AKEYCODE_YEN); +pub const AKEYCODE_RO = @intFromEnum(enum_unnamed_16.AKEYCODE_RO); +pub const AKEYCODE_KANA = @intFromEnum(enum_unnamed_16.AKEYCODE_KANA); +pub const AKEYCODE_ASSIST = @intFromEnum(enum_unnamed_16.AKEYCODE_ASSIST); +pub const AKEYCODE_BRIGHTNESS_DOWN = @intFromEnum(enum_unnamed_16.AKEYCODE_BRIGHTNESS_DOWN); +pub const AKEYCODE_BRIGHTNESS_UP = @intFromEnum(enum_unnamed_16.AKEYCODE_BRIGHTNESS_UP); +pub const AKEYCODE_MEDIA_AUDIO_TRACK = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_AUDIO_TRACK); +pub const AKEYCODE_SLEEP = @intFromEnum(enum_unnamed_16.AKEYCODE_SLEEP); +pub const AKEYCODE_WAKEUP = @intFromEnum(enum_unnamed_16.AKEYCODE_WAKEUP); +pub const AKEYCODE_PAIRING = @intFromEnum(enum_unnamed_16.AKEYCODE_PAIRING); +pub const AKEYCODE_MEDIA_TOP_MENU = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_TOP_MENU); +pub const AKEYCODE_11 = @intFromEnum(enum_unnamed_16.AKEYCODE_11); +pub const AKEYCODE_12 = @intFromEnum(enum_unnamed_16.AKEYCODE_12); +pub const AKEYCODE_LAST_CHANNEL = @intFromEnum(enum_unnamed_16.AKEYCODE_LAST_CHANNEL); +pub const AKEYCODE_TV_DATA_SERVICE = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_DATA_SERVICE); +pub const AKEYCODE_VOICE_ASSIST = @intFromEnum(enum_unnamed_16.AKEYCODE_VOICE_ASSIST); +pub const AKEYCODE_TV_RADIO_SERVICE = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_RADIO_SERVICE); +pub const AKEYCODE_TV_TELETEXT = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_TELETEXT); +pub const AKEYCODE_TV_NUMBER_ENTRY = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_NUMBER_ENTRY); +pub const AKEYCODE_TV_TERRESTRIAL_ANALOG = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_TERRESTRIAL_ANALOG); +pub const AKEYCODE_TV_TERRESTRIAL_DIGITAL = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_TERRESTRIAL_DIGITAL); +pub const AKEYCODE_TV_SATELLITE = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_SATELLITE); +pub const AKEYCODE_TV_SATELLITE_BS = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_SATELLITE_BS); +pub const AKEYCODE_TV_SATELLITE_CS = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_SATELLITE_CS); +pub const AKEYCODE_TV_SATELLITE_SERVICE = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_SATELLITE_SERVICE); +pub const AKEYCODE_TV_NETWORK = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_NETWORK); +pub const AKEYCODE_TV_ANTENNA_CABLE = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_ANTENNA_CABLE); +pub const AKEYCODE_TV_INPUT_HDMI_1 = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_INPUT_HDMI_1); +pub const AKEYCODE_TV_INPUT_HDMI_2 = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_INPUT_HDMI_2); +pub const AKEYCODE_TV_INPUT_HDMI_3 = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_INPUT_HDMI_3); +pub const AKEYCODE_TV_INPUT_HDMI_4 = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_INPUT_HDMI_4); +pub const AKEYCODE_TV_INPUT_COMPOSITE_1 = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_INPUT_COMPOSITE_1); +pub const AKEYCODE_TV_INPUT_COMPOSITE_2 = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_INPUT_COMPOSITE_2); +pub const AKEYCODE_TV_INPUT_COMPONENT_1 = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_INPUT_COMPONENT_1); +pub const AKEYCODE_TV_INPUT_COMPONENT_2 = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_INPUT_COMPONENT_2); +pub const AKEYCODE_TV_INPUT_VGA_1 = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_INPUT_VGA_1); +pub const AKEYCODE_TV_AUDIO_DESCRIPTION = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_AUDIO_DESCRIPTION); +pub const AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP); +pub const AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN); +pub const AKEYCODE_TV_ZOOM_MODE = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_ZOOM_MODE); +pub const AKEYCODE_TV_CONTENTS_MENU = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_CONTENTS_MENU); +pub const AKEYCODE_TV_MEDIA_CONTEXT_MENU = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_MEDIA_CONTEXT_MENU); +pub const AKEYCODE_TV_TIMER_PROGRAMMING = @intFromEnum(enum_unnamed_16.AKEYCODE_TV_TIMER_PROGRAMMING); +pub const AKEYCODE_HELP = @intFromEnum(enum_unnamed_16.AKEYCODE_HELP); +pub const AKEYCODE_NAVIGATE_PREVIOUS = @intFromEnum(enum_unnamed_16.AKEYCODE_NAVIGATE_PREVIOUS); +pub const AKEYCODE_NAVIGATE_NEXT = @intFromEnum(enum_unnamed_16.AKEYCODE_NAVIGATE_NEXT); +pub const AKEYCODE_NAVIGATE_IN = @intFromEnum(enum_unnamed_16.AKEYCODE_NAVIGATE_IN); +pub const AKEYCODE_NAVIGATE_OUT = @intFromEnum(enum_unnamed_16.AKEYCODE_NAVIGATE_OUT); +pub const AKEYCODE_STEM_PRIMARY = @intFromEnum(enum_unnamed_16.AKEYCODE_STEM_PRIMARY); +pub const AKEYCODE_STEM_1 = @intFromEnum(enum_unnamed_16.AKEYCODE_STEM_1); +pub const AKEYCODE_STEM_2 = @intFromEnum(enum_unnamed_16.AKEYCODE_STEM_2); +pub const AKEYCODE_STEM_3 = @intFromEnum(enum_unnamed_16.AKEYCODE_STEM_3); +pub const AKEYCODE_DPAD_UP_LEFT = @intFromEnum(enum_unnamed_16.AKEYCODE_DPAD_UP_LEFT); +pub const AKEYCODE_DPAD_DOWN_LEFT = @intFromEnum(enum_unnamed_16.AKEYCODE_DPAD_DOWN_LEFT); +pub const AKEYCODE_DPAD_UP_RIGHT = @intFromEnum(enum_unnamed_16.AKEYCODE_DPAD_UP_RIGHT); +pub const AKEYCODE_DPAD_DOWN_RIGHT = @intFromEnum(enum_unnamed_16.AKEYCODE_DPAD_DOWN_RIGHT); +pub const AKEYCODE_MEDIA_SKIP_FORWARD = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_SKIP_FORWARD); +pub const AKEYCODE_MEDIA_SKIP_BACKWARD = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_SKIP_BACKWARD); +pub const AKEYCODE_MEDIA_STEP_FORWARD = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_STEP_FORWARD); +pub const AKEYCODE_MEDIA_STEP_BACKWARD = @intFromEnum(enum_unnamed_16.AKEYCODE_MEDIA_STEP_BACKWARD); +pub const AKEYCODE_SOFT_SLEEP = @intFromEnum(enum_unnamed_16.AKEYCODE_SOFT_SLEEP); +pub const AKEYCODE_CUT = @intFromEnum(enum_unnamed_16.AKEYCODE_CUT); +pub const AKEYCODE_COPY = @intFromEnum(enum_unnamed_16.AKEYCODE_COPY); +pub const AKEYCODE_PASTE = @intFromEnum(enum_unnamed_16.AKEYCODE_PASTE); +pub const AKEYCODE_SYSTEM_NAVIGATION_UP = @intFromEnum(enum_unnamed_16.AKEYCODE_SYSTEM_NAVIGATION_UP); +pub const AKEYCODE_SYSTEM_NAVIGATION_DOWN = @intFromEnum(enum_unnamed_16.AKEYCODE_SYSTEM_NAVIGATION_DOWN); +pub const AKEYCODE_SYSTEM_NAVIGATION_LEFT = @intFromEnum(enum_unnamed_16.AKEYCODE_SYSTEM_NAVIGATION_LEFT); +pub const AKEYCODE_SYSTEM_NAVIGATION_RIGHT = @intFromEnum(enum_unnamed_16.AKEYCODE_SYSTEM_NAVIGATION_RIGHT); +pub const AKEYCODE_ALL_APPS = @intFromEnum(enum_unnamed_16.AKEYCODE_ALL_APPS); +pub const AKEYCODE_REFRESH = @intFromEnum(enum_unnamed_16.AKEYCODE_REFRESH); +pub const AKEYCODE_THUMBS_UP = @intFromEnum(enum_unnamed_16.AKEYCODE_THUMBS_UP); +pub const AKEYCODE_THUMBS_DOWN = @intFromEnum(enum_unnamed_16.AKEYCODE_THUMBS_DOWN); +pub const AKEYCODE_PROFILE_SWITCH = @intFromEnum(enum_unnamed_16.AKEYCODE_PROFILE_SWITCH); +const enum_unnamed_16 = enum(c_int) { + AKEYCODE_UNKNOWN = 0, + AKEYCODE_SOFT_LEFT = 1, + AKEYCODE_SOFT_RIGHT = 2, + AKEYCODE_HOME = 3, + AKEYCODE_BACK = 4, + AKEYCODE_CALL = 5, + AKEYCODE_ENDCALL = 6, + AKEYCODE_0 = 7, + AKEYCODE_1 = 8, + AKEYCODE_2 = 9, + AKEYCODE_3 = 10, + AKEYCODE_4 = 11, + AKEYCODE_5 = 12, + AKEYCODE_6 = 13, + AKEYCODE_7 = 14, + AKEYCODE_8 = 15, + AKEYCODE_9 = 16, + AKEYCODE_STAR = 17, + AKEYCODE_POUND = 18, + AKEYCODE_DPAD_UP = 19, + AKEYCODE_DPAD_DOWN = 20, + AKEYCODE_DPAD_LEFT = 21, + AKEYCODE_DPAD_RIGHT = 22, + AKEYCODE_DPAD_CENTER = 23, + AKEYCODE_VOLUME_UP = 24, + AKEYCODE_VOLUME_DOWN = 25, + AKEYCODE_POWER = 26, + AKEYCODE_CAMERA = 27, + AKEYCODE_CLEAR = 28, + AKEYCODE_A = 29, + AKEYCODE_B = 30, + AKEYCODE_C = 31, + AKEYCODE_D = 32, + AKEYCODE_E = 33, + AKEYCODE_F = 34, + AKEYCODE_G = 35, + AKEYCODE_H = 36, + AKEYCODE_I = 37, + AKEYCODE_J = 38, + AKEYCODE_K = 39, + AKEYCODE_L = 40, + AKEYCODE_M = 41, + AKEYCODE_N = 42, + AKEYCODE_O = 43, + AKEYCODE_P = 44, + AKEYCODE_Q = 45, + AKEYCODE_R = 46, + AKEYCODE_S = 47, + AKEYCODE_T = 48, + AKEYCODE_U = 49, + AKEYCODE_V = 50, + AKEYCODE_W = 51, + AKEYCODE_X = 52, + AKEYCODE_Y = 53, + AKEYCODE_Z = 54, + AKEYCODE_COMMA = 55, + AKEYCODE_PERIOD = 56, + AKEYCODE_ALT_LEFT = 57, + AKEYCODE_ALT_RIGHT = 58, + AKEYCODE_SHIFT_LEFT = 59, + AKEYCODE_SHIFT_RIGHT = 60, + AKEYCODE_TAB = 61, + AKEYCODE_SPACE = 62, + AKEYCODE_SYM = 63, + AKEYCODE_EXPLORER = 64, + AKEYCODE_ENVELOPE = 65, + AKEYCODE_ENTER = 66, + AKEYCODE_DEL = 67, + AKEYCODE_GRAVE = 68, + AKEYCODE_MINUS = 69, + AKEYCODE_EQUALS = 70, + AKEYCODE_LEFT_BRACKET = 71, + AKEYCODE_RIGHT_BRACKET = 72, + AKEYCODE_BACKSLASH = 73, + AKEYCODE_SEMICOLON = 74, + AKEYCODE_APOSTROPHE = 75, + AKEYCODE_SLASH = 76, + AKEYCODE_AT = 77, + AKEYCODE_NUM = 78, + AKEYCODE_HEADSETHOOK = 79, + AKEYCODE_FOCUS = 80, + AKEYCODE_PLUS = 81, + AKEYCODE_MENU = 82, + AKEYCODE_NOTIFICATION = 83, + AKEYCODE_SEARCH = 84, + AKEYCODE_MEDIA_PLAY_PAUSE = 85, + AKEYCODE_MEDIA_STOP = 86, + AKEYCODE_MEDIA_NEXT = 87, + AKEYCODE_MEDIA_PREVIOUS = 88, + AKEYCODE_MEDIA_REWIND = 89, + AKEYCODE_MEDIA_FAST_FORWARD = 90, + AKEYCODE_MUTE = 91, + AKEYCODE_PAGE_UP = 92, + AKEYCODE_PAGE_DOWN = 93, + AKEYCODE_PICTSYMBOLS = 94, + AKEYCODE_SWITCH_CHARSET = 95, + AKEYCODE_BUTTON_A = 96, + AKEYCODE_BUTTON_B = 97, + AKEYCODE_BUTTON_C = 98, + AKEYCODE_BUTTON_X = 99, + AKEYCODE_BUTTON_Y = 100, + AKEYCODE_BUTTON_Z = 101, + AKEYCODE_BUTTON_L1 = 102, + AKEYCODE_BUTTON_R1 = 103, + AKEYCODE_BUTTON_L2 = 104, + AKEYCODE_BUTTON_R2 = 105, + AKEYCODE_BUTTON_THUMBL = 106, + AKEYCODE_BUTTON_THUMBR = 107, + AKEYCODE_BUTTON_START = 108, + AKEYCODE_BUTTON_SELECT = 109, + AKEYCODE_BUTTON_MODE = 110, + AKEYCODE_ESCAPE = 111, + AKEYCODE_FORWARD_DEL = 112, + AKEYCODE_CTRL_LEFT = 113, + AKEYCODE_CTRL_RIGHT = 114, + AKEYCODE_CAPS_LOCK = 115, + AKEYCODE_SCROLL_LOCK = 116, + AKEYCODE_META_LEFT = 117, + AKEYCODE_META_RIGHT = 118, + AKEYCODE_FUNCTION = 119, + AKEYCODE_SYSRQ = 120, + AKEYCODE_BREAK = 121, + AKEYCODE_MOVE_HOME = 122, + AKEYCODE_MOVE_END = 123, + AKEYCODE_INSERT = 124, + AKEYCODE_FORWARD = 125, + AKEYCODE_MEDIA_PLAY = 126, + AKEYCODE_MEDIA_PAUSE = 127, + AKEYCODE_MEDIA_CLOSE = 128, + AKEYCODE_MEDIA_EJECT = 129, + AKEYCODE_MEDIA_RECORD = 130, + AKEYCODE_F1 = 131, + AKEYCODE_F2 = 132, + AKEYCODE_F3 = 133, + AKEYCODE_F4 = 134, + AKEYCODE_F5 = 135, + AKEYCODE_F6 = 136, + AKEYCODE_F7 = 137, + AKEYCODE_F8 = 138, + AKEYCODE_F9 = 139, + AKEYCODE_F10 = 140, + AKEYCODE_F11 = 141, + AKEYCODE_F12 = 142, + AKEYCODE_NUM_LOCK = 143, + AKEYCODE_NUMPAD_0 = 144, + AKEYCODE_NUMPAD_1 = 145, + AKEYCODE_NUMPAD_2 = 146, + AKEYCODE_NUMPAD_3 = 147, + AKEYCODE_NUMPAD_4 = 148, + AKEYCODE_NUMPAD_5 = 149, + AKEYCODE_NUMPAD_6 = 150, + AKEYCODE_NUMPAD_7 = 151, + AKEYCODE_NUMPAD_8 = 152, + AKEYCODE_NUMPAD_9 = 153, + AKEYCODE_NUMPAD_DIVIDE = 154, + AKEYCODE_NUMPAD_MULTIPLY = 155, + AKEYCODE_NUMPAD_SUBTRACT = 156, + AKEYCODE_NUMPAD_ADD = 157, + AKEYCODE_NUMPAD_DOT = 158, + AKEYCODE_NUMPAD_COMMA = 159, + AKEYCODE_NUMPAD_ENTER = 160, + AKEYCODE_NUMPAD_EQUALS = 161, + AKEYCODE_NUMPAD_LEFT_PAREN = 162, + AKEYCODE_NUMPAD_RIGHT_PAREN = 163, + AKEYCODE_VOLUME_MUTE = 164, + AKEYCODE_INFO = 165, + AKEYCODE_CHANNEL_UP = 166, + AKEYCODE_CHANNEL_DOWN = 167, + AKEYCODE_ZOOM_IN = 168, + AKEYCODE_ZOOM_OUT = 169, + AKEYCODE_TV = 170, + AKEYCODE_WINDOW = 171, + AKEYCODE_GUIDE = 172, + AKEYCODE_DVR = 173, + AKEYCODE_BOOKMARK = 174, + AKEYCODE_CAPTIONS = 175, + AKEYCODE_SETTINGS = 176, + AKEYCODE_TV_POWER = 177, + AKEYCODE_TV_INPUT = 178, + AKEYCODE_STB_POWER = 179, + AKEYCODE_STB_INPUT = 180, + AKEYCODE_AVR_POWER = 181, + AKEYCODE_AVR_INPUT = 182, + AKEYCODE_PROG_RED = 183, + AKEYCODE_PROG_GREEN = 184, + AKEYCODE_PROG_YELLOW = 185, + AKEYCODE_PROG_BLUE = 186, + AKEYCODE_APP_SWITCH = 187, + AKEYCODE_BUTTON_1 = 188, + AKEYCODE_BUTTON_2 = 189, + AKEYCODE_BUTTON_3 = 190, + AKEYCODE_BUTTON_4 = 191, + AKEYCODE_BUTTON_5 = 192, + AKEYCODE_BUTTON_6 = 193, + AKEYCODE_BUTTON_7 = 194, + AKEYCODE_BUTTON_8 = 195, + AKEYCODE_BUTTON_9 = 196, + AKEYCODE_BUTTON_10 = 197, + AKEYCODE_BUTTON_11 = 198, + AKEYCODE_BUTTON_12 = 199, + AKEYCODE_BUTTON_13 = 200, + AKEYCODE_BUTTON_14 = 201, + AKEYCODE_BUTTON_15 = 202, + AKEYCODE_BUTTON_16 = 203, + AKEYCODE_LANGUAGE_SWITCH = 204, + AKEYCODE_MANNER_MODE = 205, + AKEYCODE_3D_MODE = 206, + AKEYCODE_CONTACTS = 207, + AKEYCODE_CALENDAR = 208, + AKEYCODE_MUSIC = 209, + AKEYCODE_CALCULATOR = 210, + AKEYCODE_ZENKAKU_HANKAKU = 211, + AKEYCODE_EISU = 212, + AKEYCODE_MUHENKAN = 213, + AKEYCODE_HENKAN = 214, + AKEYCODE_KATAKANA_HIRAGANA = 215, + AKEYCODE_YEN = 216, + AKEYCODE_RO = 217, + AKEYCODE_KANA = 218, + AKEYCODE_ASSIST = 219, + AKEYCODE_BRIGHTNESS_DOWN = 220, + AKEYCODE_BRIGHTNESS_UP = 221, + AKEYCODE_MEDIA_AUDIO_TRACK = 222, + AKEYCODE_SLEEP = 223, + AKEYCODE_WAKEUP = 224, + AKEYCODE_PAIRING = 225, + AKEYCODE_MEDIA_TOP_MENU = 226, + AKEYCODE_11 = 227, + AKEYCODE_12 = 228, + AKEYCODE_LAST_CHANNEL = 229, + AKEYCODE_TV_DATA_SERVICE = 230, + AKEYCODE_VOICE_ASSIST = 231, + AKEYCODE_TV_RADIO_SERVICE = 232, + AKEYCODE_TV_TELETEXT = 233, + AKEYCODE_TV_NUMBER_ENTRY = 234, + AKEYCODE_TV_TERRESTRIAL_ANALOG = 235, + AKEYCODE_TV_TERRESTRIAL_DIGITAL = 236, + AKEYCODE_TV_SATELLITE = 237, + AKEYCODE_TV_SATELLITE_BS = 238, + AKEYCODE_TV_SATELLITE_CS = 239, + AKEYCODE_TV_SATELLITE_SERVICE = 240, + AKEYCODE_TV_NETWORK = 241, + AKEYCODE_TV_ANTENNA_CABLE = 242, + AKEYCODE_TV_INPUT_HDMI_1 = 243, + AKEYCODE_TV_INPUT_HDMI_2 = 244, + AKEYCODE_TV_INPUT_HDMI_3 = 245, + AKEYCODE_TV_INPUT_HDMI_4 = 246, + AKEYCODE_TV_INPUT_COMPOSITE_1 = 247, + AKEYCODE_TV_INPUT_COMPOSITE_2 = 248, + AKEYCODE_TV_INPUT_COMPONENT_1 = 249, + AKEYCODE_TV_INPUT_COMPONENT_2 = 250, + AKEYCODE_TV_INPUT_VGA_1 = 251, + AKEYCODE_TV_AUDIO_DESCRIPTION = 252, + AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253, + AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254, + AKEYCODE_TV_ZOOM_MODE = 255, + AKEYCODE_TV_CONTENTS_MENU = 256, + AKEYCODE_TV_MEDIA_CONTEXT_MENU = 257, + AKEYCODE_TV_TIMER_PROGRAMMING = 258, + AKEYCODE_HELP = 259, + AKEYCODE_NAVIGATE_PREVIOUS = 260, + AKEYCODE_NAVIGATE_NEXT = 261, + AKEYCODE_NAVIGATE_IN = 262, + AKEYCODE_NAVIGATE_OUT = 263, + AKEYCODE_STEM_PRIMARY = 264, + AKEYCODE_STEM_1 = 265, + AKEYCODE_STEM_2 = 266, + AKEYCODE_STEM_3 = 267, + AKEYCODE_DPAD_UP_LEFT = 268, + AKEYCODE_DPAD_DOWN_LEFT = 269, + AKEYCODE_DPAD_UP_RIGHT = 270, + AKEYCODE_DPAD_DOWN_RIGHT = 271, + AKEYCODE_MEDIA_SKIP_FORWARD = 272, + AKEYCODE_MEDIA_SKIP_BACKWARD = 273, + AKEYCODE_MEDIA_STEP_FORWARD = 274, + AKEYCODE_MEDIA_STEP_BACKWARD = 275, + AKEYCODE_SOFT_SLEEP = 276, + AKEYCODE_CUT = 277, + AKEYCODE_COPY = 278, + AKEYCODE_PASTE = 279, + AKEYCODE_SYSTEM_NAVIGATION_UP = 280, + AKEYCODE_SYSTEM_NAVIGATION_DOWN = 281, + AKEYCODE_SYSTEM_NAVIGATION_LEFT = 282, + AKEYCODE_SYSTEM_NAVIGATION_RIGHT = 283, + AKEYCODE_ALL_APPS = 284, + AKEYCODE_REFRESH = 285, + AKEYCODE_THUMBS_UP = 286, + AKEYCODE_THUMBS_DOWN = 287, + AKEYCODE_PROFILE_SWITCH = 288, + _, +}; +pub const AKEY_STATE_UNKNOWN = @intFromEnum(enum_unnamed_17.AKEY_STATE_UNKNOWN); +pub const AKEY_STATE_UP = @intFromEnum(enum_unnamed_17.AKEY_STATE_UP); +pub const AKEY_STATE_DOWN = @intFromEnum(enum_unnamed_17.AKEY_STATE_DOWN); +pub const AKEY_STATE_VIRTUAL = @intFromEnum(enum_unnamed_17.AKEY_STATE_VIRTUAL); +const enum_unnamed_17 = enum(c_int) { + AKEY_STATE_UNKNOWN = -1, + AKEY_STATE_UP = 0, + AKEY_STATE_DOWN = 1, + AKEY_STATE_VIRTUAL = 2, + _, +}; +pub const AMETA_NONE = @intFromEnum(enum_unnamed_18.AMETA_NONE); +pub const AMETA_ALT_ON = @intFromEnum(enum_unnamed_18.AMETA_ALT_ON); +pub const AMETA_ALT_LEFT_ON = @intFromEnum(enum_unnamed_18.AMETA_ALT_LEFT_ON); +pub const AMETA_ALT_RIGHT_ON = @intFromEnum(enum_unnamed_18.AMETA_ALT_RIGHT_ON); +pub const AMETA_SHIFT_ON = @intFromEnum(enum_unnamed_18.AMETA_SHIFT_ON); +pub const AMETA_SHIFT_LEFT_ON = @intFromEnum(enum_unnamed_18.AMETA_SHIFT_LEFT_ON); +pub const AMETA_SHIFT_RIGHT_ON = @intFromEnum(enum_unnamed_18.AMETA_SHIFT_RIGHT_ON); +pub const AMETA_SYM_ON = @intFromEnum(enum_unnamed_18.AMETA_SYM_ON); +pub const AMETA_FUNCTION_ON = @intFromEnum(enum_unnamed_18.AMETA_FUNCTION_ON); +pub const AMETA_CTRL_ON = @intFromEnum(enum_unnamed_18.AMETA_CTRL_ON); +pub const AMETA_CTRL_LEFT_ON = @intFromEnum(enum_unnamed_18.AMETA_CTRL_LEFT_ON); +pub const AMETA_CTRL_RIGHT_ON = @intFromEnum(enum_unnamed_18.AMETA_CTRL_RIGHT_ON); +pub const AMETA_META_ON = @intFromEnum(enum_unnamed_18.AMETA_META_ON); +pub const AMETA_META_LEFT_ON = @intFromEnum(enum_unnamed_18.AMETA_META_LEFT_ON); +pub const AMETA_META_RIGHT_ON = @intFromEnum(enum_unnamed_18.AMETA_META_RIGHT_ON); +pub const AMETA_CAPS_LOCK_ON = @intFromEnum(enum_unnamed_18.AMETA_CAPS_LOCK_ON); +pub const AMETA_NUM_LOCK_ON = @intFromEnum(enum_unnamed_18.AMETA_NUM_LOCK_ON); +pub const AMETA_SCROLL_LOCK_ON = @intFromEnum(enum_unnamed_18.AMETA_SCROLL_LOCK_ON); +const enum_unnamed_18 = enum(c_int) { + AMETA_NONE = 0, + AMETA_ALT_ON = 2, + AMETA_ALT_LEFT_ON = 16, + AMETA_ALT_RIGHT_ON = 32, + AMETA_SHIFT_ON = 1, + AMETA_SHIFT_LEFT_ON = 64, + AMETA_SHIFT_RIGHT_ON = 128, + AMETA_SYM_ON = 4, + AMETA_FUNCTION_ON = 8, + AMETA_CTRL_ON = 4096, + AMETA_CTRL_LEFT_ON = 8192, + AMETA_CTRL_RIGHT_ON = 16384, + AMETA_META_ON = 65536, + AMETA_META_LEFT_ON = 131072, + AMETA_META_RIGHT_ON = 262144, + AMETA_CAPS_LOCK_ON = 1048576, + AMETA_NUM_LOCK_ON = 2097152, + AMETA_SCROLL_LOCK_ON = 4194304, + _, +}; +pub const AInputEvent = opaque {}; +pub const AInputEventType = enum(c_int) { + AINPUT_EVENT_TYPE_KEY = 1, + AINPUT_EVENT_TYPE_MOTION = 2, + _, +}; +pub const AKEY_EVENT_ACTION_DOWN = @intFromEnum(AKeyEventActionType.AKEY_EVENT_ACTION_DOWN); +pub const AKEY_EVENT_ACTION_UP = @intFromEnum(AKeyEventActionType.AKEY_EVENT_ACTION_UP); +pub const AKEY_EVENT_ACTION_MULTIPLE = @intFromEnum(AKeyEventActionType.AKEY_EVENT_ACTION_MULTIPLE); +pub const AKeyEventActionType = enum(c_int) { + AKEY_EVENT_ACTION_DOWN = 0, + AKEY_EVENT_ACTION_UP = 1, + AKEY_EVENT_ACTION_MULTIPLE = 2, + _, +}; +pub const AKEY_EVENT_FLAG_WOKE_HERE = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_WOKE_HERE); +pub const AKEY_EVENT_FLAG_SOFT_KEYBOARD = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_SOFT_KEYBOARD); +pub const AKEY_EVENT_FLAG_KEEP_TOUCH_MODE = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_KEEP_TOUCH_MODE); +pub const AKEY_EVENT_FLAG_FROM_SYSTEM = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_FROM_SYSTEM); +pub const AKEY_EVENT_FLAG_EDITOR_ACTION = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_EDITOR_ACTION); +pub const AKEY_EVENT_FLAG_CANCELED = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_CANCELED); +pub const AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY); +pub const AKEY_EVENT_FLAG_LONG_PRESS = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_LONG_PRESS); +pub const AKEY_EVENT_FLAG_CANCELED_LONG_PRESS = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_CANCELED_LONG_PRESS); +pub const AKEY_EVENT_FLAG_TRACKING = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_TRACKING); +pub const AKEY_EVENT_FLAG_FALLBACK = @intFromEnum(enum_unnamed_21.AKEY_EVENT_FLAG_FALLBACK); +const enum_unnamed_21 = enum(c_int) { + AKEY_EVENT_FLAG_WOKE_HERE = 1, + AKEY_EVENT_FLAG_SOFT_KEYBOARD = 2, + AKEY_EVENT_FLAG_KEEP_TOUCH_MODE = 4, + AKEY_EVENT_FLAG_FROM_SYSTEM = 8, + AKEY_EVENT_FLAG_EDITOR_ACTION = 16, + AKEY_EVENT_FLAG_CANCELED = 32, + AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY = 64, + AKEY_EVENT_FLAG_LONG_PRESS = 128, + AKEY_EVENT_FLAG_CANCELED_LONG_PRESS = 256, + AKEY_EVENT_FLAG_TRACKING = 512, + AKEY_EVENT_FLAG_FALLBACK = 1024, + _, +}; +pub const AMOTION_EVENT_ACTION_MASK = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_MASK); +pub const AMOTION_EVENT_ACTION_POINTER_INDEX_MASK = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_POINTER_INDEX_MASK); +pub const AMOTION_EVENT_ACTION_DOWN = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_DOWN); +pub const AMOTION_EVENT_ACTION_UP = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_UP); +pub const AMOTION_EVENT_ACTION_MOVE = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_MOVE); +pub const AMOTION_EVENT_ACTION_CANCEL = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_CANCEL); +pub const AMOTION_EVENT_ACTION_OUTSIDE = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_OUTSIDE); +pub const AMOTION_EVENT_ACTION_POINTER_DOWN = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_POINTER_DOWN); +pub const AMOTION_EVENT_ACTION_POINTER_UP = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_POINTER_UP); +pub const AMOTION_EVENT_ACTION_HOVER_MOVE = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_HOVER_MOVE); +pub const AMOTION_EVENT_ACTION_SCROLL = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_SCROLL); +pub const AMOTION_EVENT_ACTION_HOVER_ENTER = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_HOVER_ENTER); +pub const AMOTION_EVENT_ACTION_HOVER_EXIT = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_HOVER_EXIT); +pub const AMOTION_EVENT_ACTION_BUTTON_PRESS = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_BUTTON_PRESS); +pub const AMOTION_EVENT_ACTION_BUTTON_RELEASE = @intFromEnum(AMotionEventActionType.AMOTION_EVENT_ACTION_BUTTON_RELEASE); +pub const AMotionEventActionType = enum(c_int) { + AMOTION_EVENT_ACTION_MASK = 255, + AMOTION_EVENT_ACTION_POINTER_INDEX_MASK = 65280, + AMOTION_EVENT_ACTION_DOWN = 0, + AMOTION_EVENT_ACTION_UP = 1, + AMOTION_EVENT_ACTION_MOVE = 2, + AMOTION_EVENT_ACTION_CANCEL = 3, + AMOTION_EVENT_ACTION_OUTSIDE = 4, + AMOTION_EVENT_ACTION_POINTER_DOWN = 5, + AMOTION_EVENT_ACTION_POINTER_UP = 6, + AMOTION_EVENT_ACTION_HOVER_MOVE = 7, + AMOTION_EVENT_ACTION_SCROLL = 8, + AMOTION_EVENT_ACTION_HOVER_ENTER = 9, + AMOTION_EVENT_ACTION_HOVER_EXIT = 10, + AMOTION_EVENT_ACTION_BUTTON_PRESS = 11, + AMOTION_EVENT_ACTION_BUTTON_RELEASE = 12, + _, +}; +pub const AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED = @intFromEnum(enum_unnamed_23.AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED); +const enum_unnamed_23 = enum(c_int) { + AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED = 1, + _, +}; +pub const AMOTION_EVENT_EDGE_FLAG_NONE = @intFromEnum(enum_unnamed_24.AMOTION_EVENT_EDGE_FLAG_NONE); +pub const AMOTION_EVENT_EDGE_FLAG_TOP = @intFromEnum(enum_unnamed_24.AMOTION_EVENT_EDGE_FLAG_TOP); +pub const AMOTION_EVENT_EDGE_FLAG_BOTTOM = @intFromEnum(enum_unnamed_24.AMOTION_EVENT_EDGE_FLAG_BOTTOM); +pub const AMOTION_EVENT_EDGE_FLAG_LEFT = @intFromEnum(enum_unnamed_24.AMOTION_EVENT_EDGE_FLAG_LEFT); +pub const AMOTION_EVENT_EDGE_FLAG_RIGHT = @intFromEnum(enum_unnamed_24.AMOTION_EVENT_EDGE_FLAG_RIGHT); +const enum_unnamed_24 = enum(c_int) { + AMOTION_EVENT_EDGE_FLAG_NONE = 0, + AMOTION_EVENT_EDGE_FLAG_TOP = 1, + AMOTION_EVENT_EDGE_FLAG_BOTTOM = 2, + AMOTION_EVENT_EDGE_FLAG_LEFT = 4, + AMOTION_EVENT_EDGE_FLAG_RIGHT = 8, + _, +}; +pub const AMOTION_EVENT_AXIS_X = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_X); +pub const AMOTION_EVENT_AXIS_Y = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_Y); +pub const AMOTION_EVENT_AXIS_PRESSURE = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_PRESSURE); +pub const AMOTION_EVENT_AXIS_SIZE = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_SIZE); +pub const AMOTION_EVENT_AXIS_TOUCH_MAJOR = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_TOUCH_MAJOR); +pub const AMOTION_EVENT_AXIS_TOUCH_MINOR = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_TOUCH_MINOR); +pub const AMOTION_EVENT_AXIS_TOOL_MAJOR = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_TOOL_MAJOR); +pub const AMOTION_EVENT_AXIS_TOOL_MINOR = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_TOOL_MINOR); +pub const AMOTION_EVENT_AXIS_ORIENTATION = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_ORIENTATION); +pub const AMOTION_EVENT_AXIS_VSCROLL = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_VSCROLL); +pub const AMOTION_EVENT_AXIS_HSCROLL = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_HSCROLL); +pub const AMOTION_EVENT_AXIS_Z = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_Z); +pub const AMOTION_EVENT_AXIS_RX = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_RX); +pub const AMOTION_EVENT_AXIS_RY = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_RY); +pub const AMOTION_EVENT_AXIS_RZ = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_RZ); +pub const AMOTION_EVENT_AXIS_HAT_X = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_HAT_X); +pub const AMOTION_EVENT_AXIS_HAT_Y = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_HAT_Y); +pub const AMOTION_EVENT_AXIS_LTRIGGER = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_LTRIGGER); +pub const AMOTION_EVENT_AXIS_RTRIGGER = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_RTRIGGER); +pub const AMOTION_EVENT_AXIS_THROTTLE = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_THROTTLE); +pub const AMOTION_EVENT_AXIS_RUDDER = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_RUDDER); +pub const AMOTION_EVENT_AXIS_WHEEL = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_WHEEL); +pub const AMOTION_EVENT_AXIS_GAS = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GAS); +pub const AMOTION_EVENT_AXIS_BRAKE = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_BRAKE); +pub const AMOTION_EVENT_AXIS_DISTANCE = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_DISTANCE); +pub const AMOTION_EVENT_AXIS_TILT = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_TILT); +pub const AMOTION_EVENT_AXIS_SCROLL = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_SCROLL); +pub const AMOTION_EVENT_AXIS_RELATIVE_X = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_RELATIVE_X); +pub const AMOTION_EVENT_AXIS_RELATIVE_Y = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_RELATIVE_Y); +pub const AMOTION_EVENT_AXIS_GENERIC_1 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_1); +pub const AMOTION_EVENT_AXIS_GENERIC_2 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_2); +pub const AMOTION_EVENT_AXIS_GENERIC_3 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_3); +pub const AMOTION_EVENT_AXIS_GENERIC_4 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_4); +pub const AMOTION_EVENT_AXIS_GENERIC_5 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_5); +pub const AMOTION_EVENT_AXIS_GENERIC_6 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_6); +pub const AMOTION_EVENT_AXIS_GENERIC_7 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_7); +pub const AMOTION_EVENT_AXIS_GENERIC_8 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_8); +pub const AMOTION_EVENT_AXIS_GENERIC_9 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_9); +pub const AMOTION_EVENT_AXIS_GENERIC_10 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_10); +pub const AMOTION_EVENT_AXIS_GENERIC_11 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_11); +pub const AMOTION_EVENT_AXIS_GENERIC_12 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_12); +pub const AMOTION_EVENT_AXIS_GENERIC_13 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_13); +pub const AMOTION_EVENT_AXIS_GENERIC_14 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_14); +pub const AMOTION_EVENT_AXIS_GENERIC_15 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_15); +pub const AMOTION_EVENT_AXIS_GENERIC_16 = @intFromEnum(enum_unnamed_25.AMOTION_EVENT_AXIS_GENERIC_16); +const enum_unnamed_25 = enum(c_int) { + AMOTION_EVENT_AXIS_X = 0, + AMOTION_EVENT_AXIS_Y = 1, + AMOTION_EVENT_AXIS_PRESSURE = 2, + AMOTION_EVENT_AXIS_SIZE = 3, + AMOTION_EVENT_AXIS_TOUCH_MAJOR = 4, + AMOTION_EVENT_AXIS_TOUCH_MINOR = 5, + AMOTION_EVENT_AXIS_TOOL_MAJOR = 6, + AMOTION_EVENT_AXIS_TOOL_MINOR = 7, + AMOTION_EVENT_AXIS_ORIENTATION = 8, + AMOTION_EVENT_AXIS_VSCROLL = 9, + AMOTION_EVENT_AXIS_HSCROLL = 10, + AMOTION_EVENT_AXIS_Z = 11, + AMOTION_EVENT_AXIS_RX = 12, + AMOTION_EVENT_AXIS_RY = 13, + AMOTION_EVENT_AXIS_RZ = 14, + AMOTION_EVENT_AXIS_HAT_X = 15, + AMOTION_EVENT_AXIS_HAT_Y = 16, + AMOTION_EVENT_AXIS_LTRIGGER = 17, + AMOTION_EVENT_AXIS_RTRIGGER = 18, + AMOTION_EVENT_AXIS_THROTTLE = 19, + AMOTION_EVENT_AXIS_RUDDER = 20, + AMOTION_EVENT_AXIS_WHEEL = 21, + AMOTION_EVENT_AXIS_GAS = 22, + AMOTION_EVENT_AXIS_BRAKE = 23, + AMOTION_EVENT_AXIS_DISTANCE = 24, + AMOTION_EVENT_AXIS_TILT = 25, + AMOTION_EVENT_AXIS_SCROLL = 26, + AMOTION_EVENT_AXIS_RELATIVE_X = 27, + AMOTION_EVENT_AXIS_RELATIVE_Y = 28, + AMOTION_EVENT_AXIS_GENERIC_1 = 32, + AMOTION_EVENT_AXIS_GENERIC_2 = 33, + AMOTION_EVENT_AXIS_GENERIC_3 = 34, + AMOTION_EVENT_AXIS_GENERIC_4 = 35, + AMOTION_EVENT_AXIS_GENERIC_5 = 36, + AMOTION_EVENT_AXIS_GENERIC_6 = 37, + AMOTION_EVENT_AXIS_GENERIC_7 = 38, + AMOTION_EVENT_AXIS_GENERIC_8 = 39, + AMOTION_EVENT_AXIS_GENERIC_9 = 40, + AMOTION_EVENT_AXIS_GENERIC_10 = 41, + AMOTION_EVENT_AXIS_GENERIC_11 = 42, + AMOTION_EVENT_AXIS_GENERIC_12 = 43, + AMOTION_EVENT_AXIS_GENERIC_13 = 44, + AMOTION_EVENT_AXIS_GENERIC_14 = 45, + AMOTION_EVENT_AXIS_GENERIC_15 = 46, + AMOTION_EVENT_AXIS_GENERIC_16 = 47, + _, +}; +pub const AMOTION_EVENT_BUTTON_PRIMARY = @intFromEnum(enum_unnamed_26.AMOTION_EVENT_BUTTON_PRIMARY); +pub const AMOTION_EVENT_BUTTON_SECONDARY = @intFromEnum(enum_unnamed_26.AMOTION_EVENT_BUTTON_SECONDARY); +pub const AMOTION_EVENT_BUTTON_TERTIARY = @intFromEnum(enum_unnamed_26.AMOTION_EVENT_BUTTON_TERTIARY); +pub const AMOTION_EVENT_BUTTON_BACK = @intFromEnum(enum_unnamed_26.AMOTION_EVENT_BUTTON_BACK); +pub const AMOTION_EVENT_BUTTON_FORWARD = @intFromEnum(enum_unnamed_26.AMOTION_EVENT_BUTTON_FORWARD); +pub const AMOTION_EVENT_BUTTON_STYLUS_PRIMARY = @intFromEnum(enum_unnamed_26.AMOTION_EVENT_BUTTON_STYLUS_PRIMARY); +pub const AMOTION_EVENT_BUTTON_STYLUS_SECONDARY = @intFromEnum(enum_unnamed_26.AMOTION_EVENT_BUTTON_STYLUS_SECONDARY); +const enum_unnamed_26 = enum(c_int) { + AMOTION_EVENT_BUTTON_PRIMARY = 1, + AMOTION_EVENT_BUTTON_SECONDARY = 2, + AMOTION_EVENT_BUTTON_TERTIARY = 4, + AMOTION_EVENT_BUTTON_BACK = 8, + AMOTION_EVENT_BUTTON_FORWARD = 16, + AMOTION_EVENT_BUTTON_STYLUS_PRIMARY = 32, + AMOTION_EVENT_BUTTON_STYLUS_SECONDARY = 64, + _, +}; +pub const AMOTION_EVENT_TOOL_TYPE_UNKNOWN = @intFromEnum(enum_unnamed_27.AMOTION_EVENT_TOOL_TYPE_UNKNOWN); +pub const AMOTION_EVENT_TOOL_TYPE_FINGER = @intFromEnum(enum_unnamed_27.AMOTION_EVENT_TOOL_TYPE_FINGER); +pub const AMOTION_EVENT_TOOL_TYPE_STYLUS = @intFromEnum(enum_unnamed_27.AMOTION_EVENT_TOOL_TYPE_STYLUS); +pub const AMOTION_EVENT_TOOL_TYPE_MOUSE = @intFromEnum(enum_unnamed_27.AMOTION_EVENT_TOOL_TYPE_MOUSE); +pub const AMOTION_EVENT_TOOL_TYPE_ERASER = @intFromEnum(enum_unnamed_27.AMOTION_EVENT_TOOL_TYPE_ERASER); +const enum_unnamed_27 = enum(c_int) { + AMOTION_EVENT_TOOL_TYPE_UNKNOWN = 0, + AMOTION_EVENT_TOOL_TYPE_FINGER = 1, + AMOTION_EVENT_TOOL_TYPE_STYLUS = 2, + AMOTION_EVENT_TOOL_TYPE_MOUSE = 3, + AMOTION_EVENT_TOOL_TYPE_ERASER = 4, + _, +}; +pub const AINPUT_SOURCE_CLASS_MASK = @intFromEnum(enum_unnamed_28.AINPUT_SOURCE_CLASS_MASK); +pub const AINPUT_SOURCE_CLASS_NONE = @intFromEnum(enum_unnamed_28.AINPUT_SOURCE_CLASS_NONE); +pub const AINPUT_SOURCE_CLASS_BUTTON = @intFromEnum(enum_unnamed_28.AINPUT_SOURCE_CLASS_BUTTON); +pub const AINPUT_SOURCE_CLASS_POINTER = @intFromEnum(enum_unnamed_28.AINPUT_SOURCE_CLASS_POINTER); +pub const AINPUT_SOURCE_CLASS_NAVIGATION = @intFromEnum(enum_unnamed_28.AINPUT_SOURCE_CLASS_NAVIGATION); +pub const AINPUT_SOURCE_CLASS_POSITION = @intFromEnum(enum_unnamed_28.AINPUT_SOURCE_CLASS_POSITION); +pub const AINPUT_SOURCE_CLASS_JOYSTICK = @intFromEnum(enum_unnamed_28.AINPUT_SOURCE_CLASS_JOYSTICK); +const enum_unnamed_28 = enum(c_int) { + AINPUT_SOURCE_CLASS_MASK = 255, + AINPUT_SOURCE_CLASS_NONE = 0, + AINPUT_SOURCE_CLASS_BUTTON = 1, + AINPUT_SOURCE_CLASS_POINTER = 2, + AINPUT_SOURCE_CLASS_NAVIGATION = 4, + AINPUT_SOURCE_CLASS_POSITION = 8, + AINPUT_SOURCE_CLASS_JOYSTICK = 16, + _, +}; +pub const AINPUT_SOURCE_UNKNOWN = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_UNKNOWN); +pub const AINPUT_SOURCE_KEYBOARD = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_KEYBOARD); +pub const AINPUT_SOURCE_DPAD = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_DPAD); +pub const AINPUT_SOURCE_GAMEPAD = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_GAMEPAD); +pub const AINPUT_SOURCE_TOUCHSCREEN = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_TOUCHSCREEN); +pub const AINPUT_SOURCE_MOUSE = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_MOUSE); +pub const AINPUT_SOURCE_STYLUS = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_STYLUS); +pub const AINPUT_SOURCE_BLUETOOTH_STYLUS = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_BLUETOOTH_STYLUS); +pub const AINPUT_SOURCE_TRACKBALL = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_TRACKBALL); +pub const AINPUT_SOURCE_MOUSE_RELATIVE = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_MOUSE_RELATIVE); +pub const AINPUT_SOURCE_TOUCHPAD = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_TOUCHPAD); +pub const AINPUT_SOURCE_TOUCH_NAVIGATION = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_TOUCH_NAVIGATION); +pub const AINPUT_SOURCE_JOYSTICK = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_JOYSTICK); +pub const AINPUT_SOURCE_ROTARY_ENCODER = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_ROTARY_ENCODER); +pub const AINPUT_SOURCE_ANY = @intFromEnum(enum_unnamed_29.AINPUT_SOURCE_ANY); +const enum_unnamed_29 = enum(c_int) { + AINPUT_SOURCE_UNKNOWN = 0, + AINPUT_SOURCE_KEYBOARD = 257, + AINPUT_SOURCE_DPAD = 513, + AINPUT_SOURCE_GAMEPAD = 1025, + AINPUT_SOURCE_TOUCHSCREEN = 4098, + AINPUT_SOURCE_MOUSE = 8194, + AINPUT_SOURCE_STYLUS = 16386, + AINPUT_SOURCE_BLUETOOTH_STYLUS = 49154, + AINPUT_SOURCE_TRACKBALL = 65540, + AINPUT_SOURCE_MOUSE_RELATIVE = 131076, + AINPUT_SOURCE_TOUCHPAD = 1048584, + AINPUT_SOURCE_TOUCH_NAVIGATION = 2097152, + AINPUT_SOURCE_JOYSTICK = 16777232, + AINPUT_SOURCE_ROTARY_ENCODER = 4194304, + AINPUT_SOURCE_ANY = 4294967040, + _, +}; +pub const AINPUT_KEYBOARD_TYPE_NONE = @intFromEnum(enum_unnamed_30.AINPUT_KEYBOARD_TYPE_NONE); +pub const AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC = @intFromEnum(enum_unnamed_30.AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC); +pub const AINPUT_KEYBOARD_TYPE_ALPHABETIC = @intFromEnum(enum_unnamed_30.AINPUT_KEYBOARD_TYPE_ALPHABETIC); +const enum_unnamed_30 = enum(c_int) { + AINPUT_KEYBOARD_TYPE_NONE = 0, + AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC = 1, + AINPUT_KEYBOARD_TYPE_ALPHABETIC = 2, + _, +}; +pub const AINPUT_MOTION_RANGE_X = @intFromEnum(enum_unnamed_31.AINPUT_MOTION_RANGE_X); +pub const AINPUT_MOTION_RANGE_Y = @intFromEnum(enum_unnamed_31.AINPUT_MOTION_RANGE_Y); +pub const AINPUT_MOTION_RANGE_PRESSURE = @intFromEnum(enum_unnamed_31.AINPUT_MOTION_RANGE_PRESSURE); +pub const AINPUT_MOTION_RANGE_SIZE = @intFromEnum(enum_unnamed_31.AINPUT_MOTION_RANGE_SIZE); +pub const AINPUT_MOTION_RANGE_TOUCH_MAJOR = @intFromEnum(enum_unnamed_31.AINPUT_MOTION_RANGE_TOUCH_MAJOR); +pub const AINPUT_MOTION_RANGE_TOUCH_MINOR = @intFromEnum(enum_unnamed_31.AINPUT_MOTION_RANGE_TOUCH_MINOR); +pub const AINPUT_MOTION_RANGE_TOOL_MAJOR = @intFromEnum(enum_unnamed_31.AINPUT_MOTION_RANGE_TOOL_MAJOR); +pub const AINPUT_MOTION_RANGE_TOOL_MINOR = @intFromEnum(enum_unnamed_31.AINPUT_MOTION_RANGE_TOOL_MINOR); +pub const AINPUT_MOTION_RANGE_ORIENTATION = @intFromEnum(enum_unnamed_31.AINPUT_MOTION_RANGE_ORIENTATION); +const enum_unnamed_31 = enum(c_int) { + AINPUT_MOTION_RANGE_X = 0, + AINPUT_MOTION_RANGE_Y = 1, + AINPUT_MOTION_RANGE_PRESSURE = 2, + AINPUT_MOTION_RANGE_SIZE = 3, + AINPUT_MOTION_RANGE_TOUCH_MAJOR = 4, + AINPUT_MOTION_RANGE_TOUCH_MINOR = 5, + AINPUT_MOTION_RANGE_TOOL_MAJOR = 6, + AINPUT_MOTION_RANGE_TOOL_MINOR = 7, + AINPUT_MOTION_RANGE_ORIENTATION = 8, + _, +}; +pub extern fn AInputEvent_getType(event: ?*const AInputEvent) i32; +pub extern fn AInputEvent_getDeviceId(event: ?*const AInputEvent) i32; +pub extern fn AInputEvent_getSource(event: ?*const AInputEvent) i32; +pub extern fn AKeyEvent_getAction(key_event: ?*const AInputEvent) i32; +pub extern fn AKeyEvent_getFlags(key_event: ?*const AInputEvent) i32; +pub extern fn AKeyEvent_getKeyCode(key_event: ?*const AInputEvent) i32; +pub extern fn AKeyEvent_getScanCode(key_event: ?*const AInputEvent) i32; +pub extern fn AKeyEvent_getMetaState(key_event: ?*const AInputEvent) i32; +pub extern fn AKeyEvent_getRepeatCount(key_event: ?*const AInputEvent) i32; +pub extern fn AKeyEvent_getDownTime(key_event: ?*const AInputEvent) c_long; +pub extern fn AKeyEvent_getEventTime(key_event: ?*const AInputEvent) c_long; +pub extern fn AMotionEvent_getAction(motion_event: ?*const AInputEvent) i32; +pub extern fn AMotionEvent_getFlags(motion_event: ?*const AInputEvent) i32; +pub extern fn AMotionEvent_getMetaState(motion_event: ?*const AInputEvent) i32; +pub extern fn AMotionEvent_getButtonState(motion_event: ?*const AInputEvent) i32; +pub extern fn AMotionEvent_getEdgeFlags(motion_event: ?*const AInputEvent) i32; +pub extern fn AMotionEvent_getDownTime(motion_event: ?*const AInputEvent) c_long; +pub extern fn AMotionEvent_getEventTime(motion_event: ?*const AInputEvent) c_long; +pub extern fn AMotionEvent_getXOffset(motion_event: ?*const AInputEvent) f32; +pub extern fn AMotionEvent_getYOffset(motion_event: ?*const AInputEvent) f32; +pub extern fn AMotionEvent_getXPrecision(motion_event: ?*const AInputEvent) f32; +pub extern fn AMotionEvent_getYPrecision(motion_event: ?*const AInputEvent) f32; +pub extern fn AMotionEvent_getPointerCount(motion_event: ?*const AInputEvent) usize; +pub extern fn AMotionEvent_getPointerId(motion_event: ?*const AInputEvent, pointer_index: usize) i32; +pub extern fn AMotionEvent_getToolType(motion_event: ?*const AInputEvent, pointer_index: usize) i32; +pub extern fn AMotionEvent_getRawX(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getRawY(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getX(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getY(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getPressure(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getSize(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getTouchMajor(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getTouchMinor(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getToolMajor(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getToolMinor(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getOrientation(motion_event: ?*const AInputEvent, pointer_index: usize) f32; +pub extern fn AMotionEvent_getAxisValue(motion_event: ?*const AInputEvent, axis: i32, pointer_index: usize) f32; +pub extern fn AMotionEvent_getHistorySize(motion_event: ?*const AInputEvent) usize; +pub extern fn AMotionEvent_getHistoricalEventTime(motion_event: ?*const AInputEvent, history_index: usize) i64; +pub extern fn AMotionEvent_getHistoricalRawX(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalRawY(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalX(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalY(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalPressure(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalSize(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalTouchMajor(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalTouchMinor(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalToolMajor(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalToolMinor(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalOrientation(motion_event: ?*const AInputEvent, pointer_index: usize, history_index: usize) f32; +pub extern fn AMotionEvent_getHistoricalAxisValue(motion_event: ?*const AInputEvent, axis: i32, pointer_index: usize, history_index: usize) f32; + +pub const AInputQueue = opaque {}; + +pub extern fn AInputQueue_attachLooper(queue: ?*AInputQueue, looper: ?*ALooper, ident: c_int, callback: ALooper_callbackFunc, data: ?*anyopaque) void; +pub extern fn AInputQueue_detachLooper(queue: ?*AInputQueue) void; +pub extern fn AInputQueue_hasEvents(queue: ?*AInputQueue) i32; +pub extern fn AInputQueue_getEvent(queue: ?*AInputQueue, outEvent: *?*AInputEvent) i32; +pub extern fn AInputQueue_preDispatchEvent(queue: ?*AInputQueue, event: ?*AInputEvent) i32; +pub extern fn AInputQueue_finishEvent(queue: ?*AInputQueue, event: ?*AInputEvent, handled: c_int) void; +const struct_unnamed_32 = extern struct { + quot: intmax_t, + rem: intmax_t, +}; +pub const imaxdiv_t = struct_unnamed_32; +pub extern fn imaxabs(__i: intmax_t) intmax_t; +pub extern fn imaxdiv(__numerator: intmax_t, __denominator: intmax_t) imaxdiv_t; +pub extern fn strtoimax(__s: [*c]const u8, __end_ptr: [*c][*c]u8, __base: c_int) intmax_t; +pub extern fn strtoumax(__s: [*c]const u8, __end_ptr: [*c][*c]u8, __base: c_int) uintmax_t; +pub extern fn wcstoimax(__s: [*c]const wchar_t, __end_ptr: [*c][*c]wchar_t, __base: c_int) intmax_t; +pub extern fn wcstoumax(__s: [*c]const wchar_t, __end_ptr: [*c][*c]wchar_t, __base: c_int) uintmax_t; +pub const ADATASPACE_UNKNOWN = @intFromEnum(enum_ADataSpace.ADATASPACE_UNKNOWN); +pub const ADATASPACE_SCRGB_LINEAR = @intFromEnum(enum_ADataSpace.ADATASPACE_SCRGB_LINEAR); +pub const ADATASPACE_SRGB = @intFromEnum(enum_ADataSpace.ADATASPACE_SRGB); +pub const ADATASPACE_SCRGB = @intFromEnum(enum_ADataSpace.ADATASPACE_SCRGB); +pub const ADATASPACE_DISPLAY_P3 = @intFromEnum(enum_ADataSpace.ADATASPACE_DISPLAY_P3); +pub const ADATASPACE_BT2020_PQ = @intFromEnum(enum_ADataSpace.ADATASPACE_BT2020_PQ); +pub const enum_ADataSpace = enum(c_int) { + ADATASPACE_UNKNOWN = 0, + ADATASPACE_SCRGB_LINEAR = 406913024, + ADATASPACE_SRGB = 142671872, + ADATASPACE_SCRGB = 411107328, + ADATASPACE_DISPLAY_P3 = 143261696, + ADATASPACE_BT2020_PQ = 163971072, + _, +}; +pub const struct_ARect = extern struct { + left: i32, + top: i32, + right: i32, + bottom: i32, +}; +pub const ARect = struct_ARect; +pub const AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM); +pub const AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM); +pub const AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM); +pub const AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM); +pub const AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT); +pub const AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM); +pub const AHARDWAREBUFFER_FORMAT_BLOB = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_BLOB); +pub const AHARDWAREBUFFER_FORMAT_D16_UNORM = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_D16_UNORM); +pub const AHARDWAREBUFFER_FORMAT_D24_UNORM = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_D24_UNORM); +pub const AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT); +pub const AHARDWAREBUFFER_FORMAT_D32_FLOAT = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_D32_FLOAT); +pub const AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT); +pub const AHARDWAREBUFFER_FORMAT_S8_UINT = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_S8_UINT); +pub const AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420 = @intFromEnum(enum_AHardwareBuffer_Format.AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420); +pub const enum_AHardwareBuffer_Format = enum(c_int) { + AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM = 1, + AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM = 2, + AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM = 3, + AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM = 4, + AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT = 22, + AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM = 43, + AHARDWAREBUFFER_FORMAT_BLOB = 33, + AHARDWAREBUFFER_FORMAT_D16_UNORM = 48, + AHARDWAREBUFFER_FORMAT_D24_UNORM = 49, + AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT = 50, + AHARDWAREBUFFER_FORMAT_D32_FLOAT = 51, + AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT = 52, + AHARDWAREBUFFER_FORMAT_S8_UINT = 53, + AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420 = 35, + _, +}; +pub const AHARDWAREBUFFER_USAGE_CPU_READ_NEVER = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_CPU_READ_NEVER); +pub const AHARDWAREBUFFER_USAGE_CPU_READ_RARELY = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_CPU_READ_RARELY); +pub const AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN); +pub const AHARDWAREBUFFER_USAGE_CPU_READ_MASK = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_CPU_READ_MASK); +pub const AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER); +pub const AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY); +pub const AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN); +pub const AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK); +pub const AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE); +pub const AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER); +pub const AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT); +pub const AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY); +pub const AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT); +pub const AHARDWAREBUFFER_USAGE_VIDEO_ENCODE = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VIDEO_ENCODE); +pub const AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA); +pub const AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER); +pub const AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP); +pub const AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE); +pub const AHARDWAREBUFFER_USAGE_VENDOR_0 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_0); +pub const AHARDWAREBUFFER_USAGE_VENDOR_1 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_1); +pub const AHARDWAREBUFFER_USAGE_VENDOR_2 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_2); +pub const AHARDWAREBUFFER_USAGE_VENDOR_3 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_3); +pub const AHARDWAREBUFFER_USAGE_VENDOR_4 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_4); +pub const AHARDWAREBUFFER_USAGE_VENDOR_5 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_5); +pub const AHARDWAREBUFFER_USAGE_VENDOR_6 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_6); +pub const AHARDWAREBUFFER_USAGE_VENDOR_7 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_7); +pub const AHARDWAREBUFFER_USAGE_VENDOR_8 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_8); +pub const AHARDWAREBUFFER_USAGE_VENDOR_9 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_9); +pub const AHARDWAREBUFFER_USAGE_VENDOR_10 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_10); +pub const AHARDWAREBUFFER_USAGE_VENDOR_11 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_11); +pub const AHARDWAREBUFFER_USAGE_VENDOR_12 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_12); +pub const AHARDWAREBUFFER_USAGE_VENDOR_13 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_13); +pub const AHARDWAREBUFFER_USAGE_VENDOR_14 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_14); +pub const AHARDWAREBUFFER_USAGE_VENDOR_15 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_15); +pub const AHARDWAREBUFFER_USAGE_VENDOR_16 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_16); +pub const AHARDWAREBUFFER_USAGE_VENDOR_17 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_17); +pub const AHARDWAREBUFFER_USAGE_VENDOR_18 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_18); +pub const AHARDWAREBUFFER_USAGE_VENDOR_19 = @intFromEnum(enum_AHardwareBuffer_UsageFlags.AHARDWAREBUFFER_USAGE_VENDOR_19); +pub const enum_AHardwareBuffer_UsageFlags = enum(c_ulong) { + AHARDWAREBUFFER_USAGE_CPU_READ_NEVER = 0, + AHARDWAREBUFFER_USAGE_CPU_READ_RARELY = 2, + AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN = 3, + AHARDWAREBUFFER_USAGE_CPU_READ_MASK = 15, + AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER = 0, + AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY = 32, + AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN = 48, + AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK = 240, + AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE = 256, + AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER = 512, + AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT = 512, + AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY = 2048, + AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT = 16384, + AHARDWAREBUFFER_USAGE_VIDEO_ENCODE = 65536, + AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA = 8388608, + AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER = 16777216, + AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP = 33554432, + AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE = 67108864, + AHARDWAREBUFFER_USAGE_VENDOR_0 = 268435456, + AHARDWAREBUFFER_USAGE_VENDOR_1 = 536870912, + AHARDWAREBUFFER_USAGE_VENDOR_2 = 1073741824, + AHARDWAREBUFFER_USAGE_VENDOR_3 = 2147483648, + AHARDWAREBUFFER_USAGE_VENDOR_4 = 281474976710656, + AHARDWAREBUFFER_USAGE_VENDOR_5 = 562949953421312, + AHARDWAREBUFFER_USAGE_VENDOR_6 = 1125899906842624, + AHARDWAREBUFFER_USAGE_VENDOR_7 = 2251799813685248, + AHARDWAREBUFFER_USAGE_VENDOR_8 = 4503599627370496, + AHARDWAREBUFFER_USAGE_VENDOR_9 = 9007199254740992, + AHARDWAREBUFFER_USAGE_VENDOR_10 = 18014398509481984, + AHARDWAREBUFFER_USAGE_VENDOR_11 = 36028797018963968, + AHARDWAREBUFFER_USAGE_VENDOR_12 = 72057594037927936, + AHARDWAREBUFFER_USAGE_VENDOR_13 = 144115188075855872, + AHARDWAREBUFFER_USAGE_VENDOR_14 = 288230376151711744, + AHARDWAREBUFFER_USAGE_VENDOR_15 = 576460752303423488, + AHARDWAREBUFFER_USAGE_VENDOR_16 = 1152921504606846976, + AHARDWAREBUFFER_USAGE_VENDOR_17 = 2305843009213693952, + AHARDWAREBUFFER_USAGE_VENDOR_18 = 4611686018427387904, + AHARDWAREBUFFER_USAGE_VENDOR_19 = 9223372036854775808, + _, +}; +pub const struct_AHardwareBuffer_Desc = extern struct { + width: u32, + height: u32, + layers: u32, + format: u32, + usage: u64, + stride: u32, + rfu0: u32, + rfu1: u64, +}; +pub const AHardwareBuffer_Desc = struct_AHardwareBuffer_Desc; +pub const struct_AHardwareBuffer_Plane = extern struct { + data: ?*anyopaque, + pixelStride: u32, + rowStride: u32, +}; +pub const AHardwareBuffer_Plane = struct_AHardwareBuffer_Plane; +pub const struct_AHardwareBuffer_Planes = extern struct { + planeCount: u32, + planes: [4]AHardwareBuffer_Plane, +}; +pub const AHardwareBuffer_Planes = struct_AHardwareBuffer_Planes; +pub const struct_AHardwareBuffer = opaque {}; +pub const AHardwareBuffer = struct_AHardwareBuffer; +pub extern fn AHardwareBuffer_allocate(desc: [*c]const AHardwareBuffer_Desc, outBuffer: [*c]?*AHardwareBuffer) c_int; +pub extern fn AHardwareBuffer_acquire(buffer: ?*AHardwareBuffer) void; +pub extern fn AHardwareBuffer_release(buffer: ?*AHardwareBuffer) void; +pub extern fn AHardwareBuffer_describe(buffer: ?*const AHardwareBuffer, outDesc: [*c]AHardwareBuffer_Desc) void; +pub extern fn AHardwareBuffer_lock(buffer: ?*AHardwareBuffer, usage: u64, fence: i32, rect: [*c]const ARect, outVirtualAddress: [*c]?*anyopaque) c_int; +pub extern fn AHardwareBuffer_lockPlanes(buffer: ?*AHardwareBuffer, usage: u64, fence: i32, rect: [*c]const ARect, outPlanes: [*c]AHardwareBuffer_Planes) c_int; +pub extern fn AHardwareBuffer_unlock(buffer: ?*AHardwareBuffer, fence: [*c]i32) c_int; +pub extern fn AHardwareBuffer_sendHandleToUnixSocket(buffer: ?*const AHardwareBuffer, socketFd: c_int) c_int; +pub extern fn AHardwareBuffer_recvHandleFromUnixSocket(socketFd: c_int, outBuffer: [*c]?*AHardwareBuffer) c_int; +pub extern fn AHardwareBuffer_isSupported(desc: [*c]const AHardwareBuffer_Desc) c_int; +pub extern fn AHardwareBuffer_lockAndGetInfo(buffer: ?*AHardwareBuffer, usage: u64, fence: i32, rect: [*c]const ARect, outVirtualAddress: [*c]?*anyopaque, outBytesPerPixel: [*c]i32, outBytesPerStride: [*c]i32) c_int; +pub const WINDOW_FORMAT_RGBA_8888 = @intFromEnum(enum_ANativeWindow_LegacyFormat.WINDOW_FORMAT_RGBA_8888); +pub const WINDOW_FORMAT_RGBX_8888 = @intFromEnum(enum_ANativeWindow_LegacyFormat.WINDOW_FORMAT_RGBX_8888); +pub const WINDOW_FORMAT_RGB_565 = @intFromEnum(enum_ANativeWindow_LegacyFormat.WINDOW_FORMAT_RGB_565); +pub const enum_ANativeWindow_LegacyFormat = enum(c_int) { + WINDOW_FORMAT_RGBA_8888 = 1, + WINDOW_FORMAT_RGBX_8888 = 2, + WINDOW_FORMAT_RGB_565 = 4, + _, +}; +pub const ANATIVEWINDOW_TRANSFORM_IDENTITY = @intFromEnum(enum_ANativeWindowTransform.ANATIVEWINDOW_TRANSFORM_IDENTITY); +pub const ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL = @intFromEnum(enum_ANativeWindowTransform.ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL); +pub const ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL = @intFromEnum(enum_ANativeWindowTransform.ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL); +pub const ANATIVEWINDOW_TRANSFORM_ROTATE_90 = @intFromEnum(enum_ANativeWindowTransform.ANATIVEWINDOW_TRANSFORM_ROTATE_90); +pub const ANATIVEWINDOW_TRANSFORM_ROTATE_180 = @intFromEnum(enum_ANativeWindowTransform.ANATIVEWINDOW_TRANSFORM_ROTATE_180); +pub const ANATIVEWINDOW_TRANSFORM_ROTATE_270 = @intFromEnum(enum_ANativeWindowTransform.ANATIVEWINDOW_TRANSFORM_ROTATE_270); +pub const enum_ANativeWindowTransform = enum(c_int) { + ANATIVEWINDOW_TRANSFORM_IDENTITY = 0, + ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL = 1, + ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL = 2, + ANATIVEWINDOW_TRANSFORM_ROTATE_90 = 4, + ANATIVEWINDOW_TRANSFORM_ROTATE_180 = 3, + ANATIVEWINDOW_TRANSFORM_ROTATE_270 = 7, + _, +}; +pub const struct_ANativeWindow = opaque {}; +pub const ANativeWindow = struct_ANativeWindow; +pub const struct_ANativeWindow_Buffer = extern struct { + width: i32, + height: i32, + stride: i32, + format: i32, + bits: ?*anyopaque, + reserved: [6]u32, +}; +pub const ANativeWindow_Buffer = struct_ANativeWindow_Buffer; +pub extern fn ANativeWindow_acquire(window: ?*ANativeWindow) void; +pub extern fn ANativeWindow_release(window: ?*ANativeWindow) void; +pub extern fn ANativeWindow_getWidth(window: ?*ANativeWindow) i32; +pub extern fn ANativeWindow_getHeight(window: ?*ANativeWindow) i32; +pub extern fn ANativeWindow_getFormat(window: ?*ANativeWindow) i32; +pub extern fn ANativeWindow_setBuffersGeometry(window: ?*ANativeWindow, width: i32, height: i32, format: i32) i32; +pub extern fn ANativeWindow_lock(window: ?*ANativeWindow, outBuffer: [*c]ANativeWindow_Buffer, inOutDirtyBounds: [*c]ARect) i32; +pub extern fn ANativeWindow_unlockAndPost(window: ?*ANativeWindow) i32; +pub extern fn ANativeWindow_setBuffersTransform(window: ?*ANativeWindow, transform: i32) i32; +pub extern fn ANativeWindow_setBuffersDataSpace(window: ?*ANativeWindow, dataSpace: i32) i32; +pub extern fn ANativeWindow_getBuffersDataSpace(window: ?*ANativeWindow) i32; +pub const ANativeActivityCallbacks = extern struct { + onStart: ?*const fn (*ANativeActivity) callconv(.c) void, + onResume: ?*const fn (*ANativeActivity) callconv(.c) void, + onSaveInstanceState: ?*const fn (*ANativeActivity, *usize) callconv(.c) ?[*]u8, + onPause: ?*const fn (*ANativeActivity) callconv(.c) void, + onStop: ?*const fn (*ANativeActivity) callconv(.c) void, + onDestroy: ?*const fn (*ANativeActivity) callconv(.c) void, + onWindowFocusChanged: ?*const fn (*ANativeActivity, c_int) callconv(.c) void, + onNativeWindowCreated: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.c) void, + onNativeWindowResized: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.c) void, + onNativeWindowRedrawNeeded: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.c) void, + onNativeWindowDestroyed: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.c) void, + onInputQueueCreated: ?*const fn (*ANativeActivity, *AInputQueue) callconv(.c) void, + onInputQueueDestroyed: ?*const fn (*ANativeActivity, *AInputQueue) callconv(.c) void, + onContentRectChanged: ?*const fn (*ANativeActivity, *const ARect) callconv(.c) void, + onConfigurationChanged: ?*const fn (*ANativeActivity) callconv(.c) void, + onLowMemory: ?*const fn (*ANativeActivity) callconv(.c) void, +}; +pub const ANativeActivity = extern struct { + callbacks: *ANativeActivityCallbacks, + vm: *JavaVM, + env: *JNIEnv, + clazz: jobject, + internalDataPath: [*:0]const u8, + externalDataPath: [*:0]const u8, + sdkVersion: i32, + instance: ?*anyopaque, + assetManager: ?*AAssetManager, + obbPath: [*:0]const u8, +}; +pub const ANativeActivity_createFunc = *const fn ([*c]ANativeActivity, ?*anyopaque, usize) callconv(.c) void; + +pub extern fn ANativeActivity_finish(activity: [*c]ANativeActivity) void; +pub extern fn ANativeActivity_setWindowFormat(activity: [*c]ANativeActivity, format: i32) void; +pub extern fn ANativeActivity_setWindowFlags(activity: [*c]ANativeActivity, addFlags: u32, removeFlags: u32) void; +pub const ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT = @intFromEnum(enum_unnamed_33.ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT); +pub const ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED = @intFromEnum(enum_unnamed_33.ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED); +const enum_unnamed_33 = enum(c_int) { + ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT = 1, + ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED = 2, + _, +}; +pub extern fn ANativeActivity_showSoftInput(activity: [*c]ANativeActivity, flags: u32) void; +pub const ANATIVEACTIVITY_HIDE_SOFT_INPUT_IMPLICIT_ONLY = @intFromEnum(enum_unnamed_34.ANATIVEACTIVITY_HIDE_SOFT_INPUT_IMPLICIT_ONLY); +pub const ANATIVEACTIVITY_HIDE_SOFT_INPUT_NOT_ALWAYS = @intFromEnum(enum_unnamed_34.ANATIVEACTIVITY_HIDE_SOFT_INPUT_NOT_ALWAYS); +const enum_unnamed_34 = enum(c_int) { + ANATIVEACTIVITY_HIDE_SOFT_INPUT_IMPLICIT_ONLY = 1, + ANATIVEACTIVITY_HIDE_SOFT_INPUT_NOT_ALWAYS = 2, + _, +}; +pub extern fn ANativeActivity_hideSoftInput(activity: [*c]ANativeActivity, flags: u32) void; + +pub const __llvm__ = 1; +pub const __clang__ = 1; +pub const __clang_major__ = 10; +pub const __clang_minor__ = 0; +pub const __clang_patchlevel__ = 0; +pub const __clang_version__ = "10.0.0 "; +pub const __GNUC__ = 4; +pub const __GNUC_MINOR__ = 2; +pub const __GNUC_PATCHLEVEL__ = 1; +pub const __GXX_ABI_VERSION = 1002; +pub const __ATOMIC_RELAXED = 0; +pub const __ATOMIC_CONSUME = 1; +pub const __ATOMIC_ACQUIRE = 2; +pub const __ATOMIC_RELEASE = 3; +pub const __ATOMIC_ACQ_REL = 4; +pub const __ATOMIC_SEQ_CST = 5; +pub const __OPENCL_MEMORY_SCOPE_WORK_ITEM = 0; +pub const __OPENCL_MEMORY_SCOPE_WORK_GROUP = 1; +pub const __OPENCL_MEMORY_SCOPE_DEVICE = 2; +pub const __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES = 3; +pub const __OPENCL_MEMORY_SCOPE_SUB_GROUP = 4; +pub const __PRAGMA_REDEFINE_EXTNAME = 1; +pub const __VERSION__ = "Clang 10.0.0 "; +pub const __OBJC_BOOL_IS_BOOL = 0; +pub const __CONSTANT_CFSTRINGS__ = 1; +pub const __OPTIMIZE__ = 1; +pub const __ORDER_LITTLE_ENDIAN__ = 1234; +pub const __ORDER_BIG_ENDIAN__ = 4321; +pub const __ORDER_PDP_ENDIAN__ = 3412; +pub const __BYTE_ORDER__ = __ORDER_LITTLE_ENDIAN__; +pub const __LITTLE_ENDIAN__ = 1; +pub const _LP64 = 1; +pub const __LP64__ = 1; +pub const __CHAR_BIT__ = 8; +pub const __SCHAR_MAX__ = 127; +pub const __SHRT_MAX__ = 32767; +pub const __INT_MAX__ = 2147483647; +pub const __LONG_MAX__ = @as(c_long, 9223372036854775807); +pub const __LONG_LONG_MAX__ = @as(c_longlong, 9223372036854775807); +pub const __WCHAR_MAX__ = @as(c_uint, 4294967295); +pub const __WINT_MAX__ = @as(c_uint, 4294967295); +pub const __INTMAX_MAX__ = @as(c_long, 9223372036854775807); +pub const __SIZE_MAX__ = @as(c_ulong, 18446744073709551615); +pub const __UINTMAX_MAX__ = @as(c_ulong, 18446744073709551615); +pub const __PTRDIFF_MAX__ = @as(c_long, 9223372036854775807); +pub const __INTPTR_MAX__ = @as(c_long, 9223372036854775807); +pub const __UINTPTR_MAX__ = @as(c_ulong, 18446744073709551615); +pub const __SIZEOF_DOUBLE__ = 8; +pub const __SIZEOF_FLOAT__ = 4; +pub const __SIZEOF_INT__ = 4; +pub const __SIZEOF_LONG__ = 8; +pub const __SIZEOF_LONG_DOUBLE__ = 16; +pub const __SIZEOF_LONG_LONG__ = 8; +pub const __SIZEOF_POINTER__ = 8; +pub const __SIZEOF_SHORT__ = 2; +pub const __SIZEOF_PTRDIFF_T__ = 8; +pub const __SIZEOF_SIZE_T__ = 8; +pub const __SIZEOF_WCHAR_T__ = 4; +pub const __SIZEOF_WINT_T__ = 4; +pub const __SIZEOF_INT128__ = 16; +pub const __INTMAX_FMTd__ = "ld"; +pub const __INTMAX_FMTi__ = "li"; +pub const __UINTMAX_FMTo__ = "lo"; +pub const __UINTMAX_FMTu__ = "lu"; +pub const __UINTMAX_FMTx__ = "lx"; +pub const __UINTMAX_FMTX__ = "lX"; +pub const __INTMAX_WIDTH__ = 64; +pub const __PTRDIFF_FMTd__ = "ld"; +pub const __PTRDIFF_FMTi__ = "li"; +pub const __PTRDIFF_WIDTH__ = 64; +pub const __INTPTR_FMTd__ = "ld"; +pub const __INTPTR_FMTi__ = "li"; +pub const __INTPTR_WIDTH__ = 64; +pub const __SIZE_FMTo__ = "lo"; +pub const __SIZE_FMTu__ = "lu"; +pub const __SIZE_FMTx__ = "lx"; +pub const __SIZE_FMTX__ = "lX"; +pub const __SIZE_WIDTH__ = 64; +pub const __WCHAR_WIDTH__ = 32; +pub const __WINT_WIDTH__ = 32; +pub const __SIG_ATOMIC_WIDTH__ = 32; +pub const __SIG_ATOMIC_MAX__ = 2147483647; +pub const __UINTMAX_WIDTH__ = 64; +pub const __UINTPTR_FMTo__ = "lo"; +pub const __UINTPTR_FMTu__ = "lu"; +pub const __UINTPTR_FMTx__ = "lx"; +pub const __UINTPTR_FMTX__ = "lX"; +pub const __UINTPTR_WIDTH__ = 64; +pub const __FLT16_HAS_DENORM__ = 1; +pub const __FLT16_DIG__ = 3; +pub const __FLT16_DECIMAL_DIG__ = 5; +pub const __FLT16_HAS_INFINITY__ = 1; +pub const __FLT16_HAS_QUIET_NAN__ = 1; +pub const __FLT16_MANT_DIG__ = 11; +pub const __FLT16_MAX_10_EXP__ = 4; +pub const __FLT16_MAX_EXP__ = 16; +pub const __FLT16_MIN_10_EXP__ = -4; +pub const __FLT16_MIN_EXP__ = -13; +pub const __FLT_DENORM_MIN__ = @as(f32, 1.40129846e-45); +pub const __FLT_HAS_DENORM__ = 1; +pub const __FLT_DIG__ = 6; +pub const __FLT_DECIMAL_DIG__ = 9; +pub const __FLT_EPSILON__ = @as(f32, 1.19209290e-7); +pub const __FLT_HAS_INFINITY__ = 1; +pub const __FLT_HAS_QUIET_NAN__ = 1; +pub const __FLT_MANT_DIG__ = 24; +pub const __FLT_MAX_10_EXP__ = 38; +pub const __FLT_MAX_EXP__ = 128; +pub const __FLT_MAX__ = @as(f32, 3.40282347e+38); +pub const __FLT_MIN_10_EXP__ = -37; +pub const __FLT_MIN_EXP__ = -125; +pub const __FLT_MIN__ = @as(f32, 1.17549435e-38); +pub const __DBL_DENORM_MIN__ = 4.9406564584124654e-324; +pub const __DBL_HAS_DENORM__ = 1; +pub const __DBL_DIG__ = 15; +pub const __DBL_DECIMAL_DIG__ = 17; +pub const __DBL_EPSILON__ = 2.2204460492503131e-16; +pub const __DBL_HAS_INFINITY__ = 1; +pub const __DBL_HAS_QUIET_NAN__ = 1; +pub const __DBL_MANT_DIG__ = 53; +pub const __DBL_MAX_10_EXP__ = 308; +pub const __DBL_MAX_EXP__ = 1024; +pub const __DBL_MAX__ = 1.7976931348623157e+308; +pub const __DBL_MIN_10_EXP__ = -307; +pub const __DBL_MIN_EXP__ = -1021; +pub const __DBL_MIN__ = 2.2250738585072014e-308; +pub const __LDBL_DENORM_MIN__ = @as(c_longdouble, 6.47517511943802511092443895822764655e-4966); +pub const __LDBL_HAS_DENORM__ = 1; +pub const __LDBL_DIG__ = 33; +pub const __LDBL_DECIMAL_DIG__ = 36; +pub const __LDBL_EPSILON__ = @as(c_longdouble, 1.92592994438723585305597794258492732e-34); +pub const __LDBL_HAS_INFINITY__ = 1; +pub const __LDBL_HAS_QUIET_NAN__ = 1; +pub const __LDBL_MANT_DIG__ = 113; +pub const __LDBL_MAX_10_EXP__ = 4932; +pub const __LDBL_MAX_EXP__ = 16384; +pub const __LDBL_MAX__ = @as(c_longdouble, 1.18973149535723176508575932662800702e+4932); +pub const __LDBL_MIN_10_EXP__ = -4931; +pub const __LDBL_MIN_EXP__ = -16381; +pub const __LDBL_MIN__ = @as(c_longdouble, 3.36210314311209350626267781732175260e-4932); +pub const __POINTER_WIDTH__ = 64; +pub const __BIGGEST_ALIGNMENT__ = 16; +pub const __CHAR_UNSIGNED__ = 1; +pub const __WCHAR_UNSIGNED__ = 1; +pub const __WINT_UNSIGNED__ = 1; +pub const __INT8_FMTd__ = "hhd"; +pub const __INT8_FMTi__ = "hhi"; +pub const __INT16_TYPE__ = c_short; +pub const __INT16_FMTd__ = "hd"; +pub const __INT16_FMTi__ = "hi"; +pub const __INT32_TYPE__ = c_int; +pub const __INT32_FMTd__ = "d"; +pub const __INT32_FMTi__ = "i"; +pub const __INT64_FMTd__ = "ld"; +pub const __INT64_FMTi__ = "li"; +pub const __UINT8_FMTo__ = "hho"; +pub const __UINT8_FMTu__ = "hhu"; +pub const __UINT8_FMTx__ = "hhx"; +pub const __UINT8_FMTX__ = "hhX"; +pub const __UINT8_MAX__ = 255; +pub const __INT8_MAX__ = 127; +pub const __UINT16_FMTo__ = "ho"; +pub const __UINT16_FMTu__ = "hu"; +pub const __UINT16_FMTx__ = "hx"; +pub const __UINT16_FMTX__ = "hX"; +pub const __UINT16_MAX__ = 65535; +pub const __INT16_MAX__ = 32767; +pub const __UINT32_FMTo__ = "o"; +pub const __UINT32_FMTu__ = "u"; +pub const __UINT32_FMTx__ = "x"; +pub const __UINT32_FMTX__ = "X"; +pub const __UINT32_MAX__ = @as(c_uint, 4294967295); +pub const __INT32_MAX__ = 2147483647; +pub const __UINT64_FMTo__ = "lo"; +pub const __UINT64_FMTu__ = "lu"; +pub const __UINT64_FMTx__ = "lx"; +pub const __UINT64_FMTX__ = "lX"; +pub const __UINT64_MAX__ = @as(c_ulong, 18446744073709551615); +pub const __INT64_MAX__ = @as(c_long, 9223372036854775807); +pub const __INT_LEAST8_MAX__ = 127; +pub const __INT_LEAST8_FMTd__ = "hhd"; +pub const __INT_LEAST8_FMTi__ = "hhi"; +pub const __UINT_LEAST8_MAX__ = 255; +pub const __UINT_LEAST8_FMTo__ = "hho"; +pub const __UINT_LEAST8_FMTu__ = "hhu"; +pub const __UINT_LEAST8_FMTx__ = "hhx"; +pub const __UINT_LEAST8_FMTX__ = "hhX"; +pub const __INT_LEAST16_TYPE__ = c_short; +pub const __INT_LEAST16_MAX__ = 32767; +pub const __INT_LEAST16_FMTd__ = "hd"; +pub const __INT_LEAST16_FMTi__ = "hi"; +pub const __UINT_LEAST16_MAX__ = 65535; +pub const __UINT_LEAST16_FMTo__ = "ho"; +pub const __UINT_LEAST16_FMTu__ = "hu"; +pub const __UINT_LEAST16_FMTx__ = "hx"; +pub const __UINT_LEAST16_FMTX__ = "hX"; +pub const __INT_LEAST32_TYPE__ = c_int; +pub const __INT_LEAST32_MAX__ = 2147483647; +pub const __INT_LEAST32_FMTd__ = "d"; +pub const __INT_LEAST32_FMTi__ = "i"; +pub const __UINT_LEAST32_MAX__ = @as(c_uint, 4294967295); +pub const __UINT_LEAST32_FMTo__ = "o"; +pub const __UINT_LEAST32_FMTu__ = "u"; +pub const __UINT_LEAST32_FMTx__ = "x"; +pub const __UINT_LEAST32_FMTX__ = "X"; +pub const __INT_LEAST64_MAX__ = @as(c_long, 9223372036854775807); +pub const __INT_LEAST64_FMTd__ = "ld"; +pub const __INT_LEAST64_FMTi__ = "li"; +pub const __UINT_LEAST64_MAX__ = @as(c_ulong, 18446744073709551615); +pub const __UINT_LEAST64_FMTo__ = "lo"; +pub const __UINT_LEAST64_FMTu__ = "lu"; +pub const __UINT_LEAST64_FMTx__ = "lx"; +pub const __UINT_LEAST64_FMTX__ = "lX"; +pub const __INT_FAST8_MAX__ = 127; +pub const __INT_FAST8_FMTd__ = "hhd"; +pub const __INT_FAST8_FMTi__ = "hhi"; +pub const __UINT_FAST8_MAX__ = 255; +pub const __UINT_FAST8_FMTo__ = "hho"; +pub const __UINT_FAST8_FMTu__ = "hhu"; +pub const __UINT_FAST8_FMTx__ = "hhx"; +pub const __UINT_FAST8_FMTX__ = "hhX"; +pub const __INT_FAST16_TYPE__ = c_short; +pub const __INT_FAST16_MAX__ = 32767; +pub const __INT_FAST16_FMTd__ = "hd"; +pub const __INT_FAST16_FMTi__ = "hi"; +pub const __UINT_FAST16_MAX__ = 65535; +pub const __UINT_FAST16_FMTo__ = "ho"; +pub const __UINT_FAST16_FMTu__ = "hu"; +pub const __UINT_FAST16_FMTx__ = "hx"; +pub const __UINT_FAST16_FMTX__ = "hX"; +pub const __INT_FAST32_TYPE__ = c_int; +pub const __INT_FAST32_MAX__ = 2147483647; +pub const __INT_FAST32_FMTd__ = "d"; +pub const __INT_FAST32_FMTi__ = "i"; +pub const __UINT_FAST32_MAX__ = @as(c_uint, 4294967295); +pub const __UINT_FAST32_FMTo__ = "o"; +pub const __UINT_FAST32_FMTu__ = "u"; +pub const __UINT_FAST32_FMTx__ = "x"; +pub const __UINT_FAST32_FMTX__ = "X"; +pub const __INT_FAST64_MAX__ = @as(c_long, 9223372036854775807); +pub const __INT_FAST64_FMTd__ = "ld"; +pub const __INT_FAST64_FMTi__ = "li"; +pub const __UINT_FAST64_MAX__ = @as(c_ulong, 18446744073709551615); +pub const __UINT_FAST64_FMTo__ = "lo"; +pub const __UINT_FAST64_FMTu__ = "lu"; +pub const __UINT_FAST64_FMTx__ = "lx"; +pub const __UINT_FAST64_FMTX__ = "lX"; +pub const __FINITE_MATH_ONLY__ = 0; +pub const __GNUC_STDC_INLINE__ = 1; +pub const __GCC_ATOMIC_TEST_AND_SET_TRUEVAL = 1; +pub const __CLANG_ATOMIC_BOOL_LOCK_FREE = 2; +pub const __CLANG_ATOMIC_CHAR_LOCK_FREE = 2; +pub const __CLANG_ATOMIC_CHAR16_T_LOCK_FREE = 2; +pub const __CLANG_ATOMIC_CHAR32_T_LOCK_FREE = 2; +pub const __CLANG_ATOMIC_WCHAR_T_LOCK_FREE = 2; +pub const __CLANG_ATOMIC_SHORT_LOCK_FREE = 2; +pub const __CLANG_ATOMIC_INT_LOCK_FREE = 2; +pub const __CLANG_ATOMIC_LONG_LOCK_FREE = 2; +pub const __CLANG_ATOMIC_LLONG_LOCK_FREE = 2; +pub const __CLANG_ATOMIC_POINTER_LOCK_FREE = 2; +pub const __GCC_ATOMIC_BOOL_LOCK_FREE = 2; +pub const __GCC_ATOMIC_CHAR_LOCK_FREE = 2; +pub const __GCC_ATOMIC_CHAR16_T_LOCK_FREE = 2; +pub const __GCC_ATOMIC_CHAR32_T_LOCK_FREE = 2; +pub const __GCC_ATOMIC_WCHAR_T_LOCK_FREE = 2; +pub const __GCC_ATOMIC_SHORT_LOCK_FREE = 2; +pub const __GCC_ATOMIC_INT_LOCK_FREE = 2; +pub const __GCC_ATOMIC_LONG_LOCK_FREE = 2; +pub const __GCC_ATOMIC_LLONG_LOCK_FREE = 2; +pub const __GCC_ATOMIC_POINTER_LOCK_FREE = 2; +pub const __PIC__ = 2; +pub const __pic__ = 2; +pub const __FLT_EVAL_METHOD__ = 0; +pub const __FLT_RADIX__ = 2; +pub const __DECIMAL_DIG__ = __LDBL_DECIMAL_DIG__; +pub const __SSP_STRONG__ = 2; +pub const __AARCH64EL__ = 1; +pub const __aarch64__ = 1; +pub const __ARM_ACLE = 200; +pub const __ARM_ARCH = 8; +pub const __ARM_ARCH_PROFILE = 'A'; +pub const __ARM_64BIT_STATE = 1; +pub const __ARM_PCS_AAPCS64 = 1; +pub const __ARM_ARCH_ISA_A64 = 1; +pub const __ARM_FEATURE_CLZ = 1; +pub const __ARM_FEATURE_FMA = 1; +pub const __ARM_FEATURE_LDREX = 0xF; +pub const __ARM_FEATURE_IDIV = 1; +pub const __ARM_FEATURE_DIV = 1; +pub const __ARM_FEATURE_NUMERIC_MAXMIN = 1; +pub const __ARM_FEATURE_DIRECTED_ROUNDING = 1; +pub const __ARM_ALIGN_MAX_STACK_PWR = 4; +pub const __ARM_FP = 0xE; +pub const __ARM_FP16_FORMAT_IEEE = 1; +pub const __ARM_FP16_ARGS = 1; +pub const __ARM_SIZEOF_WCHAR_T = 4; +pub const __ARM_SIZEOF_MINIMAL_ENUM = 4; +pub const __ARM_NEON = 1; +pub const __ARM_NEON_FP = 0xE; +pub const __ARM_FEATURE_UNALIGNED = 1; +pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 = 1; +pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 = 1; +pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 = 1; +pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 = 1; +pub const unix = 1; +pub const __unix = 1; +pub const __unix__ = 1; +pub const linux = 1; +pub const __linux = 1; +pub const __linux__ = 1; +pub const __ELF__ = 1; +pub const __gnu_linux__ = 1; +pub const __STDC__ = 1; +pub const __STDC_HOSTED__ = 1; +pub const __STDC_VERSION__ = @as(c_long, 201112); +pub const __STDC_UTF_16__ = 1; +pub const __STDC_UTF_32__ = 1; +pub const _DEBUG = 1; +pub const ANDROID = 1; +pub const APPNAME = "ziggy"; +pub const DANDROIDVERSION = 29; + +pub const __GNUC_VA_LIST = 1; +pub const __BIONIC__ = 1; +pub inline fn __BIONIC_CAST(_: anytype, _t: anytype, _v: anytype) @TypeOf((@import("std").meta.cast(_t, _v))) { + return (@import("std").meta.cast(_t, _v)); +} +pub inline fn __BIONIC_ALIGN(__value: anytype, __alignment: anytype) @TypeOf((__value + (__alignment - 1)) & ~__alignment - 1) { + return (__value + (__alignment - 1)) & ~__alignment - 1; +} +pub inline fn __P(protos: anytype) @TypeOf(protos) { + return protos; +} + +pub const __WORDSIZE = 64; +pub const __bos_level = 0; +pub const __ANDROID_API_FUTURE__ = 10000; +pub const __ANDROID_API__ = __ANDROID_API_FUTURE__; +pub const __ANDROID_API_G__ = 9; +pub const __ANDROID_API_I__ = 14; +pub const __ANDROID_API_J__ = 16; +pub const __ANDROID_API_J_MR1__ = 17; +pub const __ANDROID_API_J_MR2__ = 18; +pub const __ANDROID_API_K__ = 19; +pub const __ANDROID_API_L__ = 21; +pub const __ANDROID_API_L_MR1__ = 22; +pub const __ANDROID_API_M__ = 23; +pub const __ANDROID_API_N__ = 24; +pub const __ANDROID_API_N_MR1__ = 25; +pub const __ANDROID_API_O__ = 26; +pub const __ANDROID_API_O_MR1__ = 27; +pub const __ANDROID_API_P__ = 28; +pub const __ANDROID_API_Q__ = 29; +pub const __ANDROID_API_R__ = 30; +pub const __NDK_MAJOR__ = 21; +pub const __NDK_MINOR__ = 1; +pub const __NDK_BETA__ = 0; +pub const __NDK_BUILD__ = 6352462; +pub const __NDK_CANARY__ = 0; +pub const NULL = (@import("std").meta.cast(?*anyopaque, 0)); + +pub const WCHAR_MAX = __WCHAR_MAX__; +pub const WCHAR_MIN = '\x00'; + +pub const INT8_MIN = -128; +pub const INT8_MAX = 127; +pub const INT_LEAST8_MIN = INT8_MIN; +pub const INT_LEAST8_MAX = INT8_MAX; +pub const INT_FAST8_MIN = INT8_MIN; +pub const INT_FAST8_MAX = INT8_MAX; +pub const UINT8_MAX = 255; +pub const UINT_LEAST8_MAX = UINT8_MAX; +pub const UINT_FAST8_MAX = UINT8_MAX; +pub const INT16_MIN = -32768; +pub const INT16_MAX = 32767; +pub const INT_LEAST16_MIN = INT16_MIN; +pub const INT_LEAST16_MAX = INT16_MAX; +pub const INT_FAST16_MIN = INT32_MIN; +pub const INT_FAST16_MAX = INT32_MAX; +pub const UINT16_MAX = 65535; +pub const UINT_LEAST16_MAX = UINT16_MAX; +pub const UINT_FAST16_MAX = UINT32_MAX; +pub const INT32_MIN = -2147483647 - 1; +pub const INT32_MAX = 2147483647; +pub const INT_LEAST32_MIN = INT32_MIN; +pub const INT_LEAST32_MAX = INT32_MAX; +pub const INT_FAST32_MIN = INT32_MIN; +pub const INT_FAST32_MAX = INT32_MAX; +pub const UINT32_MAX = @as(c_uint, 4294967295); + +pub const __BITS_PER_LONG = 64; +pub const __FD_SETSIZE = 1024; +pub const JNI_FALSE = 0; +pub const JNI_TRUE = 1; +pub const JNI_VERSION_1_1 = 0x00010001; +pub const JNI_VERSION_1_2 = 0x00010002; +pub const JNI_VERSION_1_4 = 0x00010004; +pub const JNI_VERSION_1_6 = 0x00010006; +pub const JNI_OK = 0; +pub const JNI_ERR = -1; +pub const JNI_EDETACHED = -2; +pub const JNI_EVERSION = -3; +pub const JNI_ENOMEM = -4; +pub const JNI_EEXIST = -5; +pub const JNI_EINVAL = -6; +pub const JNI_COMMIT = 1; +pub const JNI_ABORT = 2; +pub const AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT = 8; +pub const __PRI_64_prefix = "l"; +pub const __PRI_PTR_prefix = "l"; +pub const __PRI_FAST_prefix = __PRI_PTR_prefix; +pub const PRId8 = "d"; +pub const PRId16 = "d"; +pub const PRId32 = "d"; +pub const PRId64 = __PRI_64_prefix ++ "d"; +pub const PRIdLEAST8 = "d"; +pub const PRIdLEAST16 = "d"; +pub const PRIdLEAST32 = "d"; +pub const PRIdLEAST64 = __PRI_64_prefix ++ "d"; +pub const PRIdFAST8 = "d"; +pub const PRIdFAST16 = __PRI_FAST_prefix ++ "d"; +pub const PRIdFAST32 = __PRI_FAST_prefix ++ "d"; +pub const PRIdFAST64 = __PRI_64_prefix ++ "d"; +pub const PRIdMAX = "jd"; +pub const PRIdPTR = __PRI_PTR_prefix ++ "d"; +pub const PRIi8 = "i"; +pub const PRIi16 = "i"; +pub const PRIi32 = "i"; +pub const PRIi64 = __PRI_64_prefix ++ "i"; +pub const PRIiLEAST8 = "i"; +pub const PRIiLEAST16 = "i"; +pub const PRIiLEAST32 = "i"; +pub const PRIiLEAST64 = __PRI_64_prefix ++ "i"; +pub const PRIiFAST8 = "i"; +pub const PRIiFAST16 = __PRI_FAST_prefix ++ "i"; +pub const PRIiFAST32 = __PRI_FAST_prefix ++ "i"; +pub const PRIiFAST64 = __PRI_64_prefix ++ "i"; +pub const PRIiMAX = "ji"; +pub const PRIiPTR = __PRI_PTR_prefix ++ "i"; +pub const PRIo8 = "o"; +pub const PRIo16 = "o"; +pub const PRIo32 = "o"; +pub const PRIo64 = __PRI_64_prefix ++ "o"; +pub const PRIoLEAST8 = "o"; +pub const PRIoLEAST16 = "o"; +pub const PRIoLEAST32 = "o"; +pub const PRIoLEAST64 = __PRI_64_prefix ++ "o"; +pub const PRIoFAST8 = "o"; +pub const PRIoFAST16 = __PRI_FAST_prefix ++ "o"; +pub const PRIoFAST32 = __PRI_FAST_prefix ++ "o"; +pub const PRIoFAST64 = __PRI_64_prefix ++ "o"; +pub const PRIoMAX = "jo"; +pub const PRIoPTR = __PRI_PTR_prefix ++ "o"; +pub const PRIu8 = "u"; +pub const PRIu16 = "u"; +pub const PRIu32 = "u"; +pub const PRIu64 = __PRI_64_prefix ++ "u"; +pub const PRIuLEAST8 = "u"; +pub const PRIuLEAST16 = "u"; +pub const PRIuLEAST32 = "u"; +pub const PRIuLEAST64 = __PRI_64_prefix ++ "u"; +pub const PRIuFAST8 = "u"; +pub const PRIuFAST16 = __PRI_FAST_prefix ++ "u"; +pub const PRIuFAST32 = __PRI_FAST_prefix ++ "u"; +pub const PRIuFAST64 = __PRI_64_prefix ++ "u"; +pub const PRIuMAX = "ju"; +pub const PRIuPTR = __PRI_PTR_prefix ++ "u"; +pub const PRIx8 = "x"; +pub const PRIx16 = "x"; +pub const PRIx32 = "x"; +pub const PRIx64 = __PRI_64_prefix ++ "x"; +pub const PRIxLEAST8 = "x"; +pub const PRIxLEAST16 = "x"; +pub const PRIxLEAST32 = "x"; +pub const PRIxLEAST64 = __PRI_64_prefix ++ "x"; +pub const PRIxFAST8 = "x"; +pub const PRIxFAST16 = __PRI_FAST_prefix ++ "x"; +pub const PRIxFAST32 = __PRI_FAST_prefix ++ "x"; +pub const PRIxFAST64 = __PRI_64_prefix ++ "x"; +pub const PRIxMAX = "jx"; +pub const PRIxPTR = __PRI_PTR_prefix ++ "x"; +pub const PRIX8 = "X"; +pub const PRIX16 = "X"; +pub const PRIX32 = "X"; +pub const PRIX64 = __PRI_64_prefix ++ "X"; +pub const PRIXLEAST8 = "X"; +pub const PRIXLEAST16 = "X"; +pub const PRIXLEAST32 = "X"; +pub const PRIXLEAST64 = __PRI_64_prefix ++ "X"; +pub const PRIXFAST8 = "X"; +pub const PRIXFAST16 = __PRI_FAST_prefix ++ "X"; +pub const PRIXFAST32 = __PRI_FAST_prefix ++ "X"; +pub const PRIXFAST64 = __PRI_64_prefix ++ "X"; +pub const PRIXMAX = "jX"; +pub const PRIXPTR = __PRI_PTR_prefix ++ "X"; +pub const SCNd8 = "hhd"; +pub const SCNd16 = "hd"; +pub const SCNd32 = "d"; +pub const SCNd64 = __PRI_64_prefix ++ "d"; +pub const SCNdLEAST8 = "hhd"; +pub const SCNdLEAST16 = "hd"; +pub const SCNdLEAST32 = "d"; +pub const SCNdLEAST64 = __PRI_64_prefix ++ "d"; +pub const SCNdFAST8 = "hhd"; +pub const SCNdFAST16 = __PRI_FAST_prefix ++ "d"; +pub const SCNdFAST32 = __PRI_FAST_prefix ++ "d"; +pub const SCNdFAST64 = __PRI_64_prefix ++ "d"; +pub const SCNdMAX = "jd"; +pub const SCNdPTR = __PRI_PTR_prefix ++ "d"; +pub const SCNi8 = "hhi"; +pub const SCNi16 = "hi"; +pub const SCNi32 = "i"; +pub const SCNi64 = __PRI_64_prefix ++ "i"; +pub const SCNiLEAST8 = "hhi"; +pub const SCNiLEAST16 = "hi"; +pub const SCNiLEAST32 = "i"; +pub const SCNiLEAST64 = __PRI_64_prefix ++ "i"; +pub const SCNiFAST8 = "hhi"; +pub const SCNiFAST16 = __PRI_FAST_prefix ++ "i"; +pub const SCNiFAST32 = __PRI_FAST_prefix ++ "i"; +pub const SCNiFAST64 = __PRI_64_prefix ++ "i"; +pub const SCNiMAX = "ji"; +pub const SCNiPTR = __PRI_PTR_prefix ++ "i"; +pub const SCNo8 = "hho"; +pub const SCNo16 = "ho"; +pub const SCNo32 = "o"; +pub const SCNo64 = __PRI_64_prefix ++ "o"; +pub const SCNoLEAST8 = "hho"; +pub const SCNoLEAST16 = "ho"; +pub const SCNoLEAST32 = "o"; +pub const SCNoLEAST64 = __PRI_64_prefix ++ "o"; +pub const SCNoFAST8 = "hho"; +pub const SCNoFAST16 = __PRI_FAST_prefix ++ "o"; +pub const SCNoFAST32 = __PRI_FAST_prefix ++ "o"; +pub const SCNoFAST64 = __PRI_64_prefix ++ "o"; +pub const SCNoMAX = "jo"; +pub const SCNoPTR = __PRI_PTR_prefix ++ "o"; +pub const SCNu8 = "hhu"; +pub const SCNu16 = "hu"; +pub const SCNu32 = "u"; +pub const SCNu64 = __PRI_64_prefix ++ "u"; +pub const SCNuLEAST8 = "hhu"; +pub const SCNuLEAST16 = "hu"; +pub const SCNuLEAST32 = "u"; +pub const SCNuLEAST64 = __PRI_64_prefix ++ "u"; +pub const SCNuFAST8 = "hhu"; +pub const SCNuFAST16 = __PRI_FAST_prefix ++ "u"; +pub const SCNuFAST32 = __PRI_FAST_prefix ++ "u"; +pub const SCNuFAST64 = __PRI_64_prefix ++ "u"; +pub const SCNuMAX = "ju"; +pub const SCNuPTR = __PRI_PTR_prefix ++ "u"; +pub const SCNx8 = "hhx"; +pub const SCNx16 = "hx"; +pub const SCNx32 = "x"; +pub const SCNx64 = __PRI_64_prefix ++ "x"; +pub const SCNxLEAST8 = "hhx"; +pub const SCNxLEAST16 = "hx"; +pub const SCNxLEAST32 = "x"; +pub const SCNxLEAST64 = __PRI_64_prefix ++ "x"; +pub const SCNxFAST8 = "hhx"; +pub const SCNxFAST16 = __PRI_FAST_prefix ++ "x"; +pub const SCNxFAST32 = __PRI_FAST_prefix ++ "x"; +pub const SCNxFAST64 = __PRI_64_prefix ++ "x"; +pub const SCNxMAX = "jx"; +pub const SCNxPTR = __PRI_PTR_prefix ++ "x"; +pub const log_id = enum_log_id; +pub const _jfieldID = struct__jfieldID; +pub const _jmethodID = struct__jmethodID; +pub const JNIInvokeInterface = struct_JNIInvokeInterface; +pub const _JNIEnv = struct__JNIEnv; +pub const _JavaVM = struct__JavaVM; +pub const ADataSpace = enum_ADataSpace; +pub const AHardwareBuffer_Format = enum_AHardwareBuffer_Format; +pub const AHardwareBuffer_UsageFlags = enum_AHardwareBuffer_UsageFlags; +pub const ANativeWindow_LegacyFormat = enum_ANativeWindow_LegacyFormat; +pub const ANativeWindowTransform = enum_ANativeWindowTransform; + +pub extern fn __system_property_get(name: [*:0]const u8, value: [*]u8) callconv(.c) c_int; diff --git a/test/build/src/build_test_main.zig b/test/build/src/build_test_main.zig new file mode 100644 index 0000000..1023159 --- /dev/null +++ b/test/build/src/build_test_main.zig @@ -0,0 +1,236 @@ +const std = @import("std"); +const log = std.log; +const builtin = @import("builtin"); + +const android = @import("android"); + +const androidbind = @import("android-bind.zig"); + +/// custom standard options for Android +pub const std_options: std.Options = if (builtin.abi.isAndroid()) + .{ + .logFn = android.logFn, + } +else + .{}; + +/// Custom panic handler for Android +pub const panic = if (builtin.abi.isAndroid()) + android.panic +else + std.debug.FullPanic(std.debug.defaultPanic); + +fn nativeActivityOnCreate(activity: *androidbind.ANativeActivity, savedState: []const u8) !void { + const sdk_version: c_int = blk: { + var sdk_ver_str: [92]u8 = undefined; + const len = androidbind.__system_property_get("ro.build.version.sdk", &sdk_ver_str); + if (len <= 0) { + break :blk 0; + } else { + const str = sdk_ver_str[0..@intCast(len)]; + break :blk std.fmt.parseInt(c_int, str, 10) catch 0; + } + }; + + log.debug( + \\Zig Android SDK: + \\ App: {s} + \\ API level: actual={d} + \\ App pid: {} + \\ Build mode: {s} + \\ ABI: {s}-{s}-{s} + \\ Compiler version: {}.{}.{} + \\ Compiler backend: {s} + , .{ + "Zig Build Test App", // build_options.app_name, + // build_options.android_sdk_version, + sdk_version, + std.os.linux.getpid(), + @tagName(builtin.mode), + @tagName(builtin.cpu.arch), + @tagName(builtin.os.tag), + @tagName(builtin.abi), + builtin.zig_version.major, + builtin.zig_version.minor, + builtin.zig_version.patch, + @tagName(builtin.zig_backend), + }); + + const allocator = std.heap.c_allocator; + + const app = try allocator.create(AndroidApp); + errdefer allocator.destroy(app); + + activity.callbacks.* = makeNativeActivityGlue(AndroidApp); + app.* = try AndroidApp.init( + allocator, + activity, + savedState, + ); + errdefer app.deinit(); + + try app.start(); + + activity.instance = app; + + log.debug("Successfully started the app.", .{}); +} + +comptime { + if (builtin.abi.isAndroid()) { + @export(&NativeActivity_onCreate, .{ .name = "ANativeActivity_onCreate" }); + } else { + @compileError("This example cannot run on targets other Android"); + } +} + +/// Android entry point +fn NativeActivity_onCreate(activity: *androidbind.ANativeActivity, rawSavedState: ?[*]u8, rawSavedStateSize: usize) callconv(.c) void { + const savedState: []const u8 = if (rawSavedState) |s| + s[0..rawSavedStateSize] + else + &[0]u8{}; + + nativeActivityOnCreate(activity, savedState) catch |err| { + log.err("ANativeActivity_onCreate: error within nativeActivityOnCreate: {s}", .{@errorName(err)}); + return; + }; +} + +/// Entry point for our application. +/// This struct provides the interface to the android support package. +pub const AndroidApp = struct { + const Self = @This(); + + allocator: std.mem.Allocator, + activity: *androidbind.ANativeActivity, + + /// This is the entry point which initializes a application + /// that has stored its previous state. + /// `stored_state` is that state, the memory is only valid for this function. + pub fn init(allocator: std.mem.Allocator, activity: *androidbind.ANativeActivity, savedState: []const u8) !Self { + _ = savedState; // autofix + + return Self{ + .allocator = allocator, + .activity = activity, + }; + } + + /// This function is called when the application is successfully initialized. + /// It should create a background thread that processes the events and runs until + /// the application gets destroyed. + pub fn start(self: *Self) !void { + _ = self; + } + + /// Uninitialize the application. + /// Don't forget to stop your background thread here! + pub fn deinit(self: *Self) void { + self.* = undefined; + } +}; + +/// Returns a wrapper implementation for the given App type which implements all +/// ANativeActivity callbacks. +fn makeNativeActivityGlue(comptime App: type) androidbind.ANativeActivityCallbacks { + const T = struct { + fn invoke(activity: *androidbind.ANativeActivity, comptime func: []const u8, args: anytype) void { + if (!@hasDecl(App, func)) { + log.debug("ANativeActivity callback {s} not available on {s}", .{ func, @typeName(App) }); + return; + } + const instance = activity.instance orelse return; + const result = @call(.auto, @field(App, func), .{@as(*App, @ptrCast(instance))} ++ args); + switch (@typeInfo(@TypeOf(result))) { + .ErrorUnion => result catch |err| log.err("{s} returned error {s}", .{ func, @errorName(err) }), + .Void => {}, + .ErrorSet => log.err("{s} returned error {s}", .{ func, @errorName(result) }), + else => @compileError("callback must return void!"), + } + } + + // return value must be created with malloc(), so we pass the c_allocator to App.onSaveInstanceState + fn onSaveInstanceState(activity: *androidbind.ANativeActivity, outSize: *usize) callconv(.c) ?[*]u8 { + outSize.* = 0; + if (!@hasDecl(App, "onSaveInstanceState")) { + log.debug("ANativeActivity callback onSaveInstanceState not available on {s}", .{@typeName(App)}); + return null; + } + const instance = activity.instance orelse return null; + const optional_slice = @as(*App, @ptrCast(instance)).onSaveInstanceState(std.heap.c_allocator); + if (optional_slice) |slice| { + outSize.* = slice.len; + return slice.ptr; + } + return null; + } + + fn onDestroy(activity: *androidbind.ANativeActivity) callconv(.c) void { + const instance = activity.instance orelse return; + const app: *App = @ptrCast(@alignCast(instance)); + app.deinit(); + std.heap.c_allocator.destroy(app); + } + fn onStart(activity: *androidbind.ANativeActivity) callconv(.c) void { + invoke(activity, "onStart", .{}); + } + fn onResume(activity: *androidbind.ANativeActivity) callconv(.c) void { + invoke(activity, "onResume", .{}); + } + fn onPause(activity: *androidbind.ANativeActivity) callconv(.c) void { + invoke(activity, "onPause", .{}); + } + fn onStop(activity: *androidbind.ANativeActivity) callconv(.c) void { + invoke(activity, "onStop", .{}); + } + fn onConfigurationChanged(activity: *androidbind.ANativeActivity) callconv(.c) void { + invoke(activity, "onConfigurationChanged", .{}); + } + fn onLowMemory(activity: *androidbind.ANativeActivity) callconv(.c) void { + invoke(activity, "onLowMemory", .{}); + } + fn onWindowFocusChanged(activity: *androidbind.ANativeActivity, hasFocus: c_int) callconv(.c) void { + invoke(activity, "onWindowFocusChanged", .{(hasFocus != 0)}); + } + fn onNativeWindowCreated(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.c) void { + invoke(activity, "onNativeWindowCreated", .{window}); + } + fn onNativeWindowResized(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.c) void { + invoke(activity, "onNativeWindowResized", .{window}); + } + fn onNativeWindowRedrawNeeded(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.c) void { + invoke(activity, "onNativeWindowRedrawNeeded", .{window}); + } + fn onNativeWindowDestroyed(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.c) void { + invoke(activity, "onNativeWindowDestroyed", .{window}); + } + fn onInputQueueCreated(activity: *androidbind.ANativeActivity, input_queue: *androidbind.AInputQueue) callconv(.c) void { + invoke(activity, "onInputQueueCreated", .{input_queue}); + } + fn onInputQueueDestroyed(activity: *androidbind.ANativeActivity, input_queue: *androidbind.AInputQueue) callconv(.c) void { + invoke(activity, "onInputQueueDestroyed", .{input_queue}); + } + fn onContentRectChanged(activity: *androidbind.ANativeActivity, rect: *const androidbind.ARect) callconv(.c) void { + invoke(activity, "onContentRectChanged", .{rect}); + } + }; + return androidbind.ANativeActivityCallbacks{ + .onStart = T.onStart, + .onResume = T.onResume, + .onSaveInstanceState = T.onSaveInstanceState, + .onPause = T.onPause, + .onStop = T.onStop, + .onDestroy = T.onDestroy, + .onWindowFocusChanged = T.onWindowFocusChanged, + .onNativeWindowCreated = T.onNativeWindowCreated, + .onNativeWindowResized = T.onNativeWindowResized, + .onNativeWindowRedrawNeeded = T.onNativeWindowRedrawNeeded, + .onNativeWindowDestroyed = T.onNativeWindowDestroyed, + .onInputQueueCreated = T.onInputQueueCreated, + .onInputQueueDestroyed = T.onInputQueueDestroyed, + .onContentRectChanged = T.onContentRectChanged, + .onConfigurationChanged = T.onConfigurationChanged, + .onLowMemory = T.onLowMemory, + }; +} From 447dd876b9f62eed41203ca1d2caae11d58b1403 Mon Sep 17 00:00:00 2001 From: Jae B Date: Sun, 12 Apr 2026 19:52:42 +1000 Subject: [PATCH 2/2] more work --- src/androidbuild/Apk.zig | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/androidbuild/Apk.zig b/src/androidbuild/Apk.zig index e761b7c..75b3bb4 100644 --- a/src/androidbuild/Apk.zig +++ b/src/androidbuild/Apk.zig @@ -467,8 +467,15 @@ fn doInstallApk(apk: *Apk) Allocator.Error!*Step.InstallFile { // ie. https://developer.android.com/ndk/guides/graphics/validation-layer for (apk.precompiled_library_files.items) |precompiled_library| { const so_dir = androidbuild.getTargetLibDir(b, precompiled_library.target); - const lib_file = precompiled_library.path.basename(b, null); - _ = apk_files.addCopyFile(precompiled_library.path, b.fmt("lib/{s}/{s}", .{ so_dir, lib_file })); + // NOTE(jae): 2026-04-12 + // Can likely just change to "precompiled_library.path.basename()" in the future if this breaks + const precompiled_lib_basename = std.fs.path.basename(switch (precompiled_library.path) { + .src_path => |sp| sp.sub_path, + .cwd_relative => |sub_path| sub_path, + .generated => @panic("invalid precompiled library, cannot be generated"), + .dependency => |dep| dep.sub_path, + }); + _ = apk_files.addCopyFile(precompiled_library.path, b.fmt("lib/{s}/{s}", .{ so_dir, precompiled_lib_basename })); } // These files belong in root and *must not* be compressed