(cpu_target: CPU_Tag) -> string
#import "Android/Toolchain";
Module parameters#
- SDK_LEVEL := 34
- The Android API level to build against and target.
- ENABLE_ARM_LSE := true
- Targets arm64 CPUs with the LSE atomic instructions.
Procedures#
ABI names#
SHA#
(s: string) -> [SHA_DIGEST_LENGTH] u8
(s: string) -> [SHA256_DIGEST_LENGTH] u8
Project API#
(theme: Android_Default_Theme) -> string
(config: Android_Project_Config, recreate_existing_files := true) -> bool
Manifest API#
(manifest: *Android_Manifest_Binary)
(manifest: Android_Manifest_Binary, print_strings := false, print_resource_ids := false)
SDK API#
(log_errors := false) -> (bool, string)
(cpu: CPU_Tag) -> (triple: string, triple_with_sdk: string)
() -> NDK_Paths
(cpu: CPU_Tag) -> (libc_path: string, libc_platform_path: string)
() -> [] string
(cpu_target: CPU_Tag, output_dir: string) -> bool
Helper API#
() -> string
(app_name: string, package_name: string, output_path := "", activity := DEFAULT_ACTIVITY, debug := false) -> bool
(app_name: string, package_name: string, output_path := "", activity := DEFAULT_ACTIVITY, debug := false) -> bool
Device API#
(app_id: string) -> string
(file_path: string, app_id: string, external_storage_relative_path := "") -> bool
(directories: [] string, app_id: string, dest_relative_path := "", only_update_newer_files := false, force_create_directories := false) -> bool
(directories: [] string, app_id: string, dest_relative_path := "", only_update_newer_files := false, force_create_directories := false) -> bool
(required_reason := "by metaprogram", preferred_model_name := "")
(apk_path: string, reinstall_keeping_data := false, allow_test_apk := false, allow_version_code_downgrade := false, uninstall_and_retry_on_key_mismatch := true, log_errors := true) -> bool
Gradle API#
(project_path: string, release := false) -> (bool, string)
(project_path: string, release := false) -> bool
(project_path: string, task: string, print_output := true) -> bool
Direct key#
(out_path: string, key_name: string, algorithm := Android_Signing_Key_Signature_Algorithm.EC, key_size := 0, common_name := "Jai Android", organization_name := "Jai", country_code := "US") -> (bool, Android_Signing_Key)
JKS generation#
(java_bin_path: string, keystore_path: string, key_alias := DEFAULT_KEYSTORE_ALIAS, key_password := DEFAULT_KEYSTORE_PASSWORD, algorithm := Android_Signing_Key_Signature_Algorithm.EC, key_size := 0, common_name := "Jai Android", organization_name := "Jai", country_code := "US") -> (bool, Android_Signing_Key)
Format helpers#
ASN1 identity#
ASN1 tags#
(s: *string) -> ASN1_Tag
(s: *string) -> u64
ASN1 values#
(data: string) -> s64
(data: string) -> ASN1_Object_Identifier
(oid: ASN1_Object_Identifier) -> string
ASN1 records#
(s: *string) -> ASN1_Value
ASN1 diagnostics#
(name: string, value: ASN1_Value)
(name: string, data: string)
(data: string, depth := 0, hack_skip_depth := false)
Byte readers#
($Int_Type: Type, s: *string, $BIG_ENDIAN := false) -> Int_Type
(s: *string) -> string
($Int_Type: Type, s: *string, $BIG_ENDIAN := false) -> Int_Type
(s: *string, length: int) -> string
ASN1 hex#
(s: string) -> string
(a: [8] $T) -> string
ADB process#
(command_args: ..string, device_serial := "", log_adb_command_errors := false, print_captured_output := false, loc := #caller_location, try_and_escape_spaces_in_shell_arguments := true) -> (bool, output_string := "", error_string := "", exit_code := 0)
() -> (Adb_Version_Info, bool)
(return_only_ready_devices := false) -> (bool, [] Adb_Device)
ADB transfer#
(local_source: string, remote_destination: string, only_update_newer_files := false, dry_run := false, compression_algorithm := Adb_Compression_Algorithm.UNSPECIFIED, disable_compression := false) -> bool
(remote_source: string, local_destination := "", preserve_timestamps := true, disable_compression := false, compression_algorithm := Adb_Compression_Algorithm.UNSPECIFIED) -> bool
(path: string) -> bool
(package_name: string) -> (bool, s32)
(package_name: string) -> bool
ADB apps#
(package_name: string) -> bool
(package_name: string) -> bool
(package_name: string) -> (running: bool, success: bool)
Java discovery#
() -> (bool, bin_path: string, exe_path: string)
SDK discovery#
() -> (bool, string)
() -> (bool, string)
Config flags#
(s: string) -> Android_Config_Changes
X509 structure#
(certificate_data: string) -> ASN1_Value
Android ZIP wire#
(version_word: u16) -> Zip_Version
(version: Zip_Version) -> u16
(eocd: string) -> u32
(eocd: string, new_offset: u32)
(s: string) -> u32
(x: int) -> int
(x: int) -> int
Android ZIP writer#
(w: *Zip_Writer, do_crcs := true, max_alignment := 0)
(w: *Zip_Writer, filepath: string, zip_filename: string, compression := Zip_Compression_Method.NONE, alignment := 0) -> bool
(w: *Zip_Writer, file_data: string, zip_filename: string, compression := Zip_Compression_Method.NONE, alignment := 0) -> bool
(w: *Zip_Writer)
Android APK#
(filepath: string) -> Android_Apk
(apk: *Android_Apk)
(apk: Android_Apk, body: Code, flags: For_Flags)
(apk: Android_Apk)
Crypto provider#
(subject_public_key_info: string) -> *evp_pkey_st
(private_key_info: string) -> *evp_pkey_st
(result: s32, loc := #caller_location)
(str: *u8, len: u64, u: *void) -> s32
(private_key_info: string, message: string) -> (bool, string)
JKS reader#
(data: string, password: string) -> (bool, certificate: string, encrypted_private_key_info: string)
JKS decryption#
(encrypted_data: string, password: string) -> (bool, string)
(encrypted_private_key_info: string, password: string) -> (bool, private_key_info: string)
APK signing framing#
APK signing digest#
APK signing orchestration#
(unsigned_apk_filepath: string, keystore_filepath: string, keystore_password := "password") -> (bool, string)
(unsigned_apk_filepath: string, private_key_info: string, certificate: string) -> (bool, string)
(filepath: string, verbose := false) -> bool
(apk: Android_Apk, verbose := false) -> bool
Build API#
Loader API#
(project_config: Android_Project_Config, build_options: Build_Options, android_build_options: Android_Build_Options, force_rebuild_loader := false) -> bool
(project_config: Android_Project_Config, build_options: Build_Options, android_build_options: Android_Build_Options)
Types#
:: struct
- app_name: := "MyJaiApp"
- project_path: := "AndroidProject"
- app_id: := "jai.example"
- version_code: := 1
- version_name: := "0.1"
- min_sdk_level: := 29
- target_sdk_level: := SDK_LEVEL
- lib_name: := "main"
- theme: := Android_Default_Theme.Theme_Black_NoTitleBar
- screen_orientation: := Android_Screen_Orientation.UNSPECIFIED
- vr: := false
- quest_enable_passthrough_splash: := false
- android_manifest: string
- application_meta_data: [] Meta_Data_Item
- permissions: [] string
- features: [] Feature
- android_gradle_plugin_version: := "8.2.0"
- gradle_version: := "8.2"
:: enum
- UNSPECIFIED
- LANDSCAPE
- PORTRAIT
- USER
- BEHIND
- SENSOR
- NOSENSOR
- SENSOR_LANDSCAPE
- SENSOR_PORTRAIT
- REVERSE_LANDSCAPE
- REVERSE_PORTRAIT
- FULL_SENSOR
- USER_LANDSCAPE
- USER_PORTRAIT
- FULL_USER
- LOCKED
:: enum
- Theme
- Theme_NoTitleBar
- Theme_NoTitleBar_Fullscreen
- Theme_Black
- Theme_Black_NoTitleBar
- Theme_Black_NoTitleBar_Fullscreen
- Theme_Dialog
- Theme_Light
- Theme_Light_NoTitleBar
- Theme_Light_NoTitleBar_Fullscreen
- Theme_Translucent
- Theme_Translucent_NoTitleBar
- Theme_Translucent_NoTitleBar_Fullscreen
:: struct
Android wire ABI: official androidfw/ResourceTypes.h.
- index: u32
:: struct
- size: u16
- res0: u8
- dataType: u8
- data: u32
:: struct
- name: ResStringPool_ref
- rawValue: ResStringPool_ref
- typedValue: Res_value
:: enum
- AUTO
- INTERNAL_ONLY
- PREFER_EXTERNAL
:: enum
- UNSET
- UNSPECIFIED
- LANDSCAPE
- PORTRAIT
- USER
- BEHIND
- SENSOR
- NOSENSOR
- SENSOR_LANDSCAPE
- SENSOR_PORTRAIT
- REVERSE_LANDSCAPE
- REVERSE_PORTRAIT
- FULL_SENSOR
- USER_LANDSCAPE
- USER_PORTRAIT
- FULL_USER
- LOCKED
:: struct
- raw_data: string
- free_data_on_deinit: := false
- string_pool: [] string
- resource_ids: [] u32
- android_namespace: Xml_Namespace
- elements: [..] Xml_Element
:: struct
- root: string
- toolchain: string
- sysroot: string
:: enum
- JKS
- ASN1_CERTIFICATE_AND_PRIVATE_KEY
:: enum
- RSA
- EC
- DSA
:: struct
- kind: Android_Signing_Key_Kind
:: struct
- parts: [MAX_SUBIDENTIFIERS] u64
- parts_count: := 0
:: enum
- UNIVERSAL
- APPLICATION
- CONTEXT_SPECIFIC
- PRIVATE
:: enum
- PRIMITIVE
- CONSTRUCTED
:: enum
- RERSERVED_FOR_ENCODING_RULES
- SEQUENCE
- SET
- BOOLEAN
- INTEGER
- ENUMERATED
- REAL
- NULL
- BIT_STRING
- OCTET_STRING
- OBJECT_IDENTIFIER
- RELATIVE_OBJECT_IDENTIFER
- OBJECT_DESCRIPTOR
- EMBEDDED_PDV
- UTF8_STRING
- NUMERIC_STRING
- PRINTABLE_STRING
- TELETEX_STRING
- VIDEOTEX_STRING
- IA5_STRING
- GRAPHIC_STRING
- VISIBLE_STRING
- GENERAL_STRING
- UNIVERSAL_STRING
- BMP_STRING
- TIME
- UTC_TIME
- GENERALIZED_TIME
:: struct
- length_value: ASN1_Tag_Length_Value
- class: ASN1_Tag_Class
:: struct
- tag: ASN1_Tag
- content: string
- value_data: string
:: struct
- tool_version: string
- protocol_version: string
- exe_path: string
:: struct
- serial: string
- connection_state: Connection_State
- product_name: string
- model_name: string
- device_name: string
- transport_id: int
:: enum
- UNSPECIFIED
- ANY
- NONE
- BROTLI
- LZ4
- ZSTD
:: enum_flags
- orientation
- Display geometry, appearance and language.
- screenLayout
- screenSize
- smallestScreenSize
- density
- colorMode
- fontScale
- uiMode
- locale
- layoutDirection
- touchscreen
- Input peripherals and network configuration.
- keyboard
- keyboardHidden
- navigation
- mcc
- mnc
:: struct
- mapping: u8
- major: u8
- minor: u8
:: enum
- NONE
- SHRUNK
- REDUCED_1
- REDUCED_2
- REDUCED_3
- REDUCED_4
- IMPLODED
- RESERVED
- DEFLATE
- DEFLATE64
- BZIP2
- LZMA
- ZSTD
- MP3
- XZ
- JPEG
- WAV_PACK
- PPMD
:: struct
- signature: u32
- version_needed_to_extract: u16
- general_purpose_bit_flag: u16
- compression_method: Zip_Compression_Method
- last_mod_file_time: u16
- last_mod_file_date: u16
- crc_32: u32
- compressed_size: u32
- uncompressed_size: u32
- filename_length: u16
- extra_field_length: u16
:: struct
- signature: u32
- version_made_by: u16
- version_needed_to_extract: u16
- general_purpose_bit_flag: u16
- compression_method: Zip_Compression_Method
- last_mod_file_time: u16
- last_mod_file_date: u16
- crc_32: u32
- compressed_size: u32
- uncompressed_size: u32
- filename_length: u16
- extra_field_length: u16
- file_comment_length: u16
- disk_number_start: u16
- internal_file_attributes: u16
- external_file_attributes: u32
- relative_offset_of_local_header: u32
:: struct
- signature: u32
- disk_number_this: u16
- disk_number_start: u16
- total_entries_this_disk: u16
- total_entries: u16
- central_directory_size: u32
- central_directory_offset: u32
- file_comment_length: u16
:: struct
- zip_file_infos: [..] File_Info
- builder: String_Builder
- dumb_padding_memory: [] u8
- write_crcs: := true
:: struct
- filepath: string
- zip_dir: Apk_Zip.Zip_Directory
- entire_apk_is_loaded: := true
- data: string
- content: string
- signing_block: string
- central_directory: string
- end_of_central_directory: string
- is_signed: := false
:: struct
- filename: string
- compression_method: Zip_Compression_Method
- compressed_size: u32
- uncompressed_size: u32
- offset: u32
:: enum
- RSASSA_PSS_SHA256
- RSASSA_PSS_SHA512
- RSASSA_PKCS1_v1_5_SHA256
- RSASSA_PKCS1_v1_5_SHA512
- ECDSA_SHA256
- ECDSA_SHA512
- DSA_SHA256
:: enum
- SHA256
- SHA512
:: struct
- signature_algorithm_id: Algorithm_Id
- data: string
:: struct
- algorithm_id: Algorithm_Id
- data: string
:: struct
- data: string
:: struct
- digests: [..] Digest
- signatures: [..] Signature
- certificates: [..] Certificiate
- signed_data: string
- subject_public_key_info: string
:: struct
- mode: enum { GRADLE; COMMAND_LINE_TOOLS; ILL_WRITE_IT_AND_WELL_DO_IT_LIVE_FUCKING_THING_SUCKS; }
- sdk_path: string
- java_bin_path: string
- sdk_level: := SDK_LEVEL
- build_type: enum { DEBUG; RELEASE; }
- intermediate_path: := DEFAULT_INTERMEDIATE_PATH
- cpu_target: := CPU_Tag.ARM64
- output_path: string
- output_apk_name: := "what_is_in_a_name"
- assets_path_type: enum { CONTENTS_OF_PATH; SINGLE_DIRECTORY; }
- assets_path: string
- shared_library_path: string
- use_jks_keystore_in_handmade_mode: := false
- signing_key_source: enum { AUTO_GENERATE; CUSTOM; SDK_DEFAULT_DEBUG; }
- custom_signing_key: Android_Signing_Key
Constants#
:: SDK_LEVEL
:: 2
:: 0xffffffff
:: "http://schemas.android.com/apk/res/android"
:: false
:: 2
:: 3
:: "loader"
:: 0xfeedfeed
:: #run -> u32 { return 0xfeedfeed; }
:: ASN1_Object_Identifier.{ parts_count = 11, parts = .[1, 3, 6, 1, 4, 1, 42, 2, 17, 1, 1, 0] }
:: "JAVA_HOME"
:: 0x02014b50
:: 0x06054b50
:: 22
:: 16
:: size_of(Zip_Local_File_Header)
:: 0x0014
:: "APK Sig Block 42"
:: 0x7109871a
:: 0xf05368c0
:: 0x1b93ad61
:: 0x42726577