cargo apk
Tool for creating Android packages.
Installation
From crates.io:
console
$ cargo install cargo-apk
From source:
console
$ cargo install --path .
Commands
build
: Compiles the current package
run
: Run a binary or example of the local package
gdb
: 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]
:
```toml
[package.metadata.android]
Specifies the package property of the manifest.
package = "com.foo.bar"
Specifies the array of targets to build for.
buildtargets = [ "armv7-linux-androideabi", "aarch64-linux-android", "i686-linux-android", "x8664-linux-android" ]
Path to your application's resources folder.
If not specified, resources will not be included in the APK.
resources = "path/to/resources_folder"
Path to the folder containing your application's assets.
If not specified, assets will not be included in the APK.
assets = "path/to/assets_folder"
Name for final APK file.
Defaults to package name.
apk_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.
runtimelibs = "path/to/libsfolder"
Defaults to $HOME/.android/debug.keystore
for the dev
profile. Will ONLY generate a new
debug.keystore if this file does NOT exist.
A keystore path is always required on the release
profile.
[package.metadata.android.signing.]
path = "$HOME/.android/debug.keystore"
keystore_password = "android"
See https://developer.android.com/guide/topics/manifest/uses-sdk-element
#
Defaults to a min_sdk_version
of 23 and target_sdk_version
of 30 (or lower if the detected NDK doesn't support this).
[package.metadata.android.sdk]
minsdkversion = 23
targetsdkversion = 30
maxsdkversion = 29
See https://developer.android.com/guide/topics/manifest/uses-feature-element
#
Note: there can be multiple .uses_feature entries.
[[package.metadata.android.uses_feature]]
name = "android.hardware.vulkan.level"
required = true
version = 1
See https://developer.android.com/guide/topics/manifest/uses-permission-element
#
Note: there can be multiple .uses_permission entries.
[[package.metadata.android.usespermission]]
name = "android.permission.WRITEEXTERNALSTORAGE"
maxsdk_version = 18
See https://developer.android.com/guide/topics/manifest/queries-element#provider
[[package.metadata.android.queries.provider]]
authorities = "org.khronos.openxr.runtimebroker;org.khronos.openxr.systemruntime_broker"
Note: The name
attribute is normally not required for a queries provider, but is non-optional
as a workaround for aapt throwing errors about missing android:name
attribute.
This will be made optional if/when cargo-apk migrates to aapt2.
name = "org.khronos.openxr"
See https://developer.android.com/guide/topics/manifest/queries-element#intent
[[package.metadata.android.queries.intent]]
actions = ["android.intent.action.SEND"]
See https://developer.android.com/guide/topics/manifest/queries-element#intent
Note: there can be several .data entries.
[[package.metadata.android.queries.intent.data]]
mime_type = "image/jpeg"
See https://developer.android.com/guide/topics/manifest/queries-element#package
[[package.metadata.android.queries.package]]
name = "org.freedesktop.monado.openxrruntime.inprocess"
See https://developer.android.com/guide/topics/manifest/application-element
[package.metadata.android.application]
See https://developer.android.com/guide/topics/manifest/application-element#debug
#
Defaults to false.
debuggable = false
See https://developer.android.com/guide/topics/manifest/application-element#theme
#
Example shows setting the theme of an application to fullscreen.
theme = "@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.
icon = "@mipmap/ic_launcher"
See https://developer.android.com/guide/topics/manifest/application-element#label
#
Defaults to the compiled artifact's name.
label = "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.
[[package.metadata.android.application.metadata]]
name = "com.samsung.android.vr.application.mode"
value = "vronly"
See https://developer.android.com/guide/topics/manifest/activity-element
[package.metadata.android.application.activity]
See https://developer.android.com/guide/topics/manifest/activity-element#config
#
Defaults to "orientation|keyboardHidden|screenSize".
config_changes = "orientation"
See https://developer.android.com/guide/topics/manifest/activity-element#label
#
Defaults to the application's label.
label = "Activity Name"
See https://developer.android.com/guide/topics/manifest/activity-element#lmode
#
Defaults to "standard".
launch_mode = "singleTop"
See https://developer.android.com/guide/topics/manifest/activity-element#screen
#
Defaults to "unspecified".
orientation = "landscape"
See https://developer.android.com/guide/topics/manifest/activity-element#exported
#
Unset by default, or "true" when targeting Android >= 31 (S and up).
exported = "true"
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.
[[package.metadata.android.application.activity.meta_data]]
name = "com.oculus.vr.focusaware"
value = "true"
See https://developer.android.com/guide/topics/manifest/intent-filter-element
#
Note: there can be several .intent_filter entries.
[[package.metadata.android.application.activity.intent_filter]]
See https://developer.android.com/guide/topics/manifest/action-element
actions = ["android.intent.action.VIEW", "android.intent.action.WEB_SEARCH"]
See https://developer.android.com/guide/topics/manifest/category-element
categories = ["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.
[[package.metadata.android.application.activity.intentfilter.data]]
scheme = "https"
host = "github.com"
port = "8080"
path = "/rust-windowing/android-ndk-rs/tree/master/cargo-apk"
pathprefix = "/rust-windowing/"
mime_type = "image/jpeg"
```
If a manifest attribute is not supported by cargo apk
feel free to create a PR that adds the missing attribute.