cargo apk
Tool for creating Android packages.
Installation
From crates.io:
cargo install cargo-apk
From source:
cargo install --path .
Commands
build: Compiles the current packagerun: Run a binary or example of the local packagegdb: Start a gdb session attached to an adb device with symbols loaded
Manifest
cargo supports the metadata table for configurations for external tools like cargo apk.
Following configuration options are supported by cargo apk under [package.metadata.android]:
[]
# Specifies the array of targets to build for.
= [ "armv7-linux-androideabi", "aarch64-linux-android", "i686-linux-android", "x86_64-linux-android" ]
# Path to your application's resources folder.
# If not specified, resources will not be included in the APK.
= "path/to/resources_folder"
# Path to the folder containing your application's assets.
# If not specified, assets will not be included in the APK.
= "path/to/assets_folder"
# Name for final APK file.
# Defaults to package name.
= "myapp"
# Folder containing extra shared libraries intended to be dynamically loaded at runtime.
# Files matching `libs_folder/${android_abi}/*.so` are added to the apk
# according to the specified build_targets.
= "path/to/libs_folder"
# See https://developer.android.com/guide/topics/manifest/uses-sdk-element
#
# Defaults to a `min_sdk_version` of 23 and `target_sdk_version` is based on the ndk's default platform.
[]
= 16
= 29
= 29
# See https://developer.android.com/guide/topics/manifest/uses-feature-element
#
# Note: there can be multiple .uses_feature entries.
[[]]
= "android.hardware.vulkan.level"
= true
= 1
# See https://developer.android.com/guide/topics/manifest/uses-permission-element
#
# Note: there can be multiple .uses_permission entries.
[[]]
= "android.permission.WRITE_EXTERNAL_STORAGE"
= 18
# See https://developer.android.com/guide/topics/manifest/application-element
[]
# See https://developer.android.com/guide/topics/manifest/application-element#debug
#
# Defaults to false.
= false
# See https://developer.android.com/guide/topics/manifest/application-element#theme
#
# Example shows setting the theme of an application to fullscreen.
= "@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen"
# Virtual path your application's icon for any mipmap level.
# If not specified, an icon will not be included in the APK.
= "@mipmap/ic_launcher"
# See https://developer.android.com/guide/topics/manifest/application-element#label
#
# Defaults to the compiled artifact's name.
= "Application Name"
# See https://developer.android.com/guide/topics/manifest/meta-data-element
#
# Note: there can be several .meta_data entries.
# Note: the `resource` attribute is currently not supported.
[[]]
= "com.samsung.android.vr.application.mode"
= "vr_only"
# See https://developer.android.com/guide/topics/manifest/activity-element
[]
# See https://developer.android.com/guide/topics/manifest/activity-element#config
#
# Defaults to "orientation|keyboardHidden|screenSize".
= "orientation"
# See https://developer.android.com/guide/topics/manifest/activity-element#label
#
# Defaults to the application's label.
= "Activity Name"
# See https://developer.android.com/guide/topics/manifest/activity-element#lmode
#
# Defaults to "standard".
= "singleTop"
# See https://developer.android.com/guide/topics/manifest/activity-element#screen
#
# Defaults to "unspecified".
= "landscape"
# See https://developer.android.com/guide/topics/manifest/meta-data-element
#
# Note: there can be several .meta_data entries.
# Note: the `resource` attribute is currently not supported.
[[]]
= "com.oculus.vr.focusaware"
= "true"
# See https://developer.android.com/guide/topics/manifest/intent-filter-element
#
# Note: there can be several .intent_filter entries.
[[]]
# See https://developer.android.com/guide/topics/manifest/action-element
= ["android.intent.action.VIEW", "android.intent.action.WEB_SEARCH"]
# See https://developer.android.com/guide/topics/manifest/category-element
= ["android.intent.category.DEFAULT", "android.intent.category.BROWSABLE"]
# See https://developer.android.com/guide/topics/manifest/data-element
#
# Note: there can be several .data entries.
# Note: not specifying an attribute excludes it from the final data specification.
[[]]
= "https"
= "github.com"
= "8080"
= "/rust-windowing/android-ndk-rs/tree/master/cargo-apk"
= "/rust-windowing/"
= "image/jpeg"
If a manifest attribute is not supported by cargo apk feel free to create a PR that adds the missing attribute.