Skip to content

Commit 52b0b07

Browse files
korejanMarijnS95
andauthored
ndk-build: Add support for <queries> element (#259)
Add support for <queries> element added to API level 30: https://developer.android.com/guide/topics/manifest/queries-element Note: `<provider>` elements contained within `<queries>` only requires an `android:authorities` attribute, however `aapt` additionally demands `android:name` which is addressed in `aapt2`. Co-authored-by: Marijn Suijten <[email protected]>
1 parent f24606c commit 52b0b07

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

cargo-apk/README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,27 @@ version = 1
7373
name = "android.permission.WRITE_EXTERNAL_STORAGE"
7474
max_sdk_version = 18
7575

76+
# See https://developer.android.com/guide/topics/manifest/queries-element#provider
77+
[[package.metadata.android.queries.provider]]
78+
authorities = "org.khronos.openxr.runtime_broker;org.khronos.openxr.system_runtime_broker"
79+
# Note: The `name` attribute is normally not required for a queries provider, but is non-optional
80+
# as a workaround for aapt throwing errors about missing `android:name` attribute.
81+
# This will be made optional if/when cargo-apk migrates to aapt2.
82+
name = "org.khronos.openxr"
83+
84+
# See https://developer.android.com/guide/topics/manifest/queries-element#intent
85+
[[package.metadata.android.queries.intent]]
86+
actions = ["android.intent.action.SEND"]
87+
88+
# See https://developer.android.com/guide/topics/manifest/queries-element#intent
89+
# Note: there can be several .data entries.
90+
[[package.metadata.android.queries.intent.data]]
91+
mime_type = "image/jpeg"
92+
93+
# See https://developer.android.com/guide/topics/manifest/queries-element#package
94+
[[package.metadata.android.queries.package]]
95+
name = "org.freedesktop.monado.openxr_runtime.in_process"
96+
7697
# See https://developer.android.com/guide/topics/manifest/application-element
7798
[package.metadata.android.application]
7899

ndk-build/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
the default setup in `cargo-apk`. ([#241](https://github.com/rust-windowing/android-ndk-rs/pull/241))
88
- Add `android:exported` attribute to the manifest's `Activity` element. ([#242](https://github.com/rust-windowing/android-ndk-rs/pull/242))
99
- Add `android:sharedUserId` attribute to the manifest's top-level `manifest` element. ([#252](https://github.com/rust-windowing/android-ndk-rs/pull/252))
10+
- Add `queries` element to the manifest's top-level `manifest` element. ([#259](https://github.com/rust-windowing/android-ndk-rs/pull/259))
1011

1112
# 0.4.3 (2021-11-22)
1213

ndk-build/src/manifest.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ pub struct AndroidManifest {
2929
#[serde(default)]
3030
pub uses_permission: Vec<Permission>,
3131

32+
#[serde(default)]
33+
pub queries: Option<Queries>,
34+
3235
#[serde(default)]
3336
pub application: Application,
3437
}
@@ -44,6 +47,7 @@ impl Default for AndroidManifest {
4447
sdk: Default::default(),
4548
uses_feature: Default::default(),
4649
uses_permission: Default::default(),
50+
queries: Default::default(),
4751
application: Default::default(),
4852
}
4953
}
@@ -258,6 +262,36 @@ pub struct Permission {
258262
pub max_sdk_version: Option<u32>,
259263
}
260264

265+
/// Android [package element](https://developer.android.com/guide/topics/manifest/queries-element#package).
266+
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
267+
pub struct Package {
268+
#[serde(rename(serialize = "android:name"))]
269+
pub name: String,
270+
}
271+
272+
/// Android [provider element](https://developer.android.com/guide/topics/manifest/queries-element#provider).
273+
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
274+
pub struct QueryProvider {
275+
#[serde(rename(serialize = "android:authorities"))]
276+
pub authorities: String,
277+
278+
// The specs say only an `authorities` attribute is required for providers contained in a `queries` element
279+
// however this is required for aapt support and should be made optional if/when cargo-apk migrates to aapt2
280+
#[serde(rename(serialize = "android:name"))]
281+
pub name: String,
282+
}
283+
284+
/// Android [queries element](https://developer.android.com/guide/topics/manifest/queries-element).
285+
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
286+
pub struct Queries {
287+
#[serde(default)]
288+
pub package: Vec<Package>,
289+
#[serde(default)]
290+
pub intent: Vec<IntentFilter>,
291+
#[serde(default)]
292+
pub provider: Vec<QueryProvider>,
293+
}
294+
261295
/// Android [uses-sdk element](https://developer.android.com/guide/topics/manifest/uses-sdk-element).
262296
#[derive(Clone, Debug, Deserialize, Serialize)]
263297
pub struct Sdk {

0 commit comments

Comments
 (0)