Skip to content

Commit 6511aad

Browse files
committed
Bump android manifest version and replace Cargo.toml metadata
1 parent cb58e24 commit 6511aad

File tree

8 files changed

+45
-93
lines changed

8 files changed

+45
-93
lines changed

crossbundle/cli/README.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -77,25 +77,25 @@ build_targets = ["aarch64-linux-android"]
7777

7878
# Adds a uses-permission element to the AndroidManifest.xml.
7979
# Note that android_version 23 and higher, Android requires the application to request permissions at runtime.
80-
[[package.metadata.android.permissions]]
80+
[[package.metadata.android.manifest.permission]]
8181
name = "android.permission.INTERNET"
8282

83-
# Specifies that an app wants a particular permission, but only if the app is installed on a device running
83+
# Specifies that an app wants a particular permission, but only if the app is installed on a device running
8484
# Android 6.0 (API level 23) or higher. If the device is running API level 22 or lower, the app does not have the specified permission.
8585
#
8686
# See https://developer.android.com/guide/topics/manifest/uses-permission-sdk-23-element
87-
[[package.metadata.android.permissions_sdk_23]]
87+
[[package.metadata.android.manifest.uses_permission_sdk_23]]
8888
name = "android.permission.WRITE_EXTERNAL_STORAGE"
8989
max_sdk_version = 30
9090

9191
# See https://developer.android.com/guide/topics/manifest/service-element
92-
[[package.metadata.android.service]]
92+
[[package.metadata.android.manifest.service]]
9393
name = "UpdateService"
9494
intent_filter = []
9595
meta_data = []
9696

9797
# See https://developer.android.com/guide/topics/manifest/queries-element#provider
98-
[[package.metadata.android.queries.provider]]
98+
[[package.metadata.android.manifest.queries.provider]]
9999
authorities = "org.khronos.openxr.runtime_broker;org.khronos.openxr.system_runtime_broker"
100100
# Note: The `name` attribute is normally not required for a queries provider, but is non-optional
101101
# as a workaround for aapt throwing errors about missing `android:name` attribute.
@@ -105,13 +105,13 @@ name = "org.khronos.openxr"
105105
# See https://developer.android.com/guide/topics/manifest/uses-feature-element
106106
#
107107
# Note: there can be multiple .uses_feature entries.
108-
[[package.metadata.android.features]]
108+
[[package.metadata.android.manifest.features]]
109109
name = "android.hardware.vulkan.level"
110110
required = true
111111
version = 1
112112

113113
# See https://developer.android.com/guide/topics/manifest/meta-data-element
114-
[[package.metadata.android.meta_data]]
114+
[[package.metadata.android.manifest.application.meta_data]]
115115
name = "com.oculus.vr.focusaware"
116116
value = "true"
117117

crossbundle/cli/src/commands/build/build_context.rs

+23-35
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,10 @@ impl BuildContext {
9999
debuggable: bool,
100100
gradle: bool,
101101
) -> Result<AndroidManifest> {
102-
let android_manifest = AndroidConfig {
102+
if let Some(manifest_path) = &self.android_config.manifest_path {
103+
return Ok(android::read_android_manifest(manifest_path)?);
104+
}
105+
let android_config = AndroidConfig {
103106
app_name: self.android_config.app_name.clone(),
104107
version_name: Some(
105108
self.android_config
@@ -120,42 +123,27 @@ impl BuildContext {
120123
),
121124
max_sdk_version: self.android_config.max_sdk_version,
122125
icon: self.android_config.icon.clone(),
123-
permissions_sdk_23: self.android_config.permissions_sdk_23.clone(),
124-
permissions: self.android_config.permissions.clone(),
125-
features: self.android_config.features.clone(),
126-
service: self.android_config.service.clone(),
127-
meta_data: self.android_config.meta_data.clone(),
128-
queries: self.android_config.queries.clone(),
129126
..Default::default()
130127
};
131-
if let Some(manifest_path) = &self.android_config.manifest_path {
132-
Ok(android::read_android_manifest(manifest_path)?)
133-
} else {
134-
let manifest = gen_manifest::gen_android_manifest(
135-
Some(format!("com.rust.{}", package_name).replace('-', "_")),
136-
package_name.to_string(),
137-
android_manifest.app_name,
138-
android_manifest
139-
.version_name
140-
.unwrap_or_else(|| self.package_version()),
141-
android_manifest.version_code.unwrap_or(1),
142-
Some(android_manifest.min_sdk_version.unwrap_or(MIN_SDK_VERSION)),
143-
android_manifest
144-
.target_sdk_version
145-
.unwrap_or_else(|| sdk.default_platform()),
146-
android_manifest.max_sdk_version,
147-
android_manifest.icon,
148-
debuggable,
149-
android_manifest.permissions_sdk_23,
150-
android_manifest.permissions,
151-
android_manifest.features,
152-
android_manifest.service,
153-
android_manifest.meta_data,
154-
android_manifest.queries,
155-
gradle,
156-
);
157-
Ok(manifest)
158-
}
128+
let manifest = gen_manifest::gen_android_manifest(
129+
Some(format!("com.rust.{}", package_name).replace('-', "_")),
130+
package_name.to_string(),
131+
android_config.app_name,
132+
android_config
133+
.version_name
134+
.unwrap_or_else(|| self.package_version()),
135+
android_config.version_code.unwrap_or(1),
136+
Some(android_config.min_sdk_version.unwrap_or(MIN_SDK_VERSION)),
137+
android_config
138+
.target_sdk_version
139+
.unwrap_or_else(|| sdk.default_platform()),
140+
android_config.max_sdk_version,
141+
android_config.icon,
142+
debuggable,
143+
gradle,
144+
);
145+
// TODO: Merge AndroidManifest
146+
Ok(manifest)
159147
}
160148

161149
/// Get info plist from the path in cargo manifest or generate it with the given configuration

crossbundle/cli/src/types/android_config.rs

+6-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crossbundle_tools::{
22
commands::android::AndroidGradlePlugins,
3-
types::{android_manifest::*, AndroidTarget},
3+
types::{android_manifest::AndroidManifest, AndroidTarget},
44
};
55
use serde::{Deserialize, Serialize};
66
use std::path::PathBuf;
@@ -11,6 +11,8 @@ pub const MIN_SDK_VERSION: u32 = 19;
1111
pub struct AndroidConfig {
1212
/// Application name.
1313
pub app_name: Option<String>,
14+
/// Android package name to place in AndroidManifest.xml.
15+
pub package: Option<String>,
1416
/// Application version name.
1517
pub version_name: Option<String>,
1618
/// Application version code.
@@ -27,22 +29,9 @@ pub struct AndroidConfig {
2729
/// Path to AndroidManifest.xml file.
2830
pub manifest_path: Option<PathBuf>,
2931

30-
/// Android permissions for target sdk version = 22 and lower.
31-
pub permissions: Option<Vec<UsesPermission>>,
32-
/// To declare a permission only on devices that support runtime permissions—that is,
33-
/// devices that run Android 6.0 (API level 23) or higher—include the uses-permission-sdk-23
34-
/// element instead of the uses-permission element.
35-
pub permissions_sdk_23: Option<Vec<UsesPermissionSdk23>>,
36-
/// Declares a single hardware or software android feature that is used by the application
37-
pub features: Option<Vec<UsesFeature>>,
38-
/// Android service to place in AndroidManifest.xml.
39-
pub service: Option<Vec<Service>>,
40-
/// Android application meta_data to place in AndroidManifest.xml.
41-
pub meta_data: Option<Vec<MetaData>>,
42-
/// Android queries to place in AndroidManifest.xml.
43-
pub queries: Option<Queries>,
44-
/// Android package name to place in AndroidManifest.xml.
45-
pub package: Option<String>,
32+
/// AndroidManifest.xml configuration.
33+
pub manifest: Option<AndroidManifest>,
34+
4635
/// Android resources directory path relatively to project path.
4736
pub res: Option<PathBuf>,
4837
/// Android assets directory path relatively to project path.

crossbundle/tools/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ dunce = "1.0"
1717
fs_extra = "1.2"
1818
dirs = "4.0.0"
1919
simctl = { version = "0.1.1", package = "creator-simctl" }
20-
android-manifest = "0.1.8"
21-
apple-bundle = "0.1.1"
20+
android-manifest = "0.1.9"
21+
apple-bundle = "0.1.2"
2222
android-tools = "0.2.9"
2323
thiserror = "1.0"
2424
anyhow = "1.0"

crossbundle/tools/src/commands/android/generate/gen_manifest.rs

-12
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,6 @@ pub fn gen_android_manifest(
1313
max_sdk_version: Option<u32>,
1414
icon: Option<String>,
1515
debuggable: bool,
16-
permissions_sdk_23: Option<Vec<UsesPermissionSdk23>>,
17-
permissions: Option<Vec<UsesPermission>>,
18-
features: Option<Vec<UsesFeature>>,
19-
service: Option<Vec<Service>>,
20-
meta_data: Option<Vec<MetaData>>,
21-
queries: Option<Queries>,
2216
gradle: bool,
2317
) -> AndroidManifest {
2418
AndroidManifest {
@@ -32,10 +26,6 @@ pub fn gen_android_manifest(
3226
target_sdk_version: Some(target_sdk_version),
3327
max_sdk_version,
3428
}),
35-
uses_permission_sdk_23: permissions_sdk_23.unwrap_or_default(),
36-
uses_permission: permissions.unwrap_or_default(),
37-
uses_feature: features.unwrap_or_default(),
38-
queries,
3929
application: Application {
4030
has_code: Some(gradle),
4131
label: Some(StringResourceOrString::string(
@@ -47,8 +37,6 @@ pub fn gen_android_manifest(
4737
"Theme.DeviceDefault.NoActionBar.Fullscreen",
4838
Some("android".to_string()),
4939
)),
50-
service: service.unwrap_or_default(),
51-
meta_data: meta_data.unwrap_or_default(),
5240
activity: vec![Activity {
5341
name: match gradle {
5442
true => "com.crossbow.game.CrossbowApp".to_string(),

crossbundle/tools/src/commands/common/gen_minimal_project/consts.rs

+3-16
Original file line numberDiff line numberDiff line change
@@ -56,32 +56,19 @@ version_code = 1
5656
5757
build_targets = ["aarch64-linux-android"]
5858
59-
[[package.metadata.android.features]]
59+
[[package.metadata.android.manifest.uses_feature]]
6060
name = "android.hardware.vulkan.level"
6161
required = true
6262
version = 1
6363
64-
[[package.metadata.android.permissions]]
64+
[[package.metadata.android.manifest.permission]]
6565
name = "android.permission.WRITE_EXTERNAL_STORAGE"
6666
max_sdk_version = 30
6767
68-
[[package.metadata.android.permissions_sdk_23]]
68+
[[package.metadata.android.manifest.uses_permission_sdk_23]]
6969
name = "android.permission.INTERNET"
7070
max_sdk_version = 30
7171
72-
[[package.metadata.android.queries.provider]]
73-
authorities = "org.khronos.openxr.runtime_broker;org.khronos.openxr.system_runtime_broker"
74-
name = "org.khronos.openxr"
75-
76-
[[package.metadata.android.meta_data]]
77-
name = "com.oculus.vr.focusaware"
78-
value = "true"
79-
80-
[[package.metadata.android.service]]
81-
name = "UpdateService"
82-
intent_filter = []
83-
meta_data = []
84-
8572
[package.metadata.apple]
8673
app_name = "Macroquad_3D"
8774
build_targets = ["aarch64-apple-ios", "x86_64-apple-ios"]

examples/macroquad-permissions/Cargo.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ include = ":crossbow:lib"
3737
include = ":admob"
3838
project_dir = "../../plugins/admob/android"
3939

40-
[[package.metadata.android.permissions]]
40+
[[package.metadata.android.manifest.permission]]
4141
name = "android.permission.READ_EXTERNAL_STORAGE"
4242

43-
[[package.metadata.android.permissions]]
43+
[[package.metadata.android.manifest.permission]]
4444
name = "android.permission.CAMERA"
4545

46-
[[package.metadata.android.permissions]]
46+
[[package.metadata.android.manifest.permission]]
4747
name = "android.permission.RECORD_AUDIO"
4848

4949
[package.metadata.apple]

plugins/admob/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ plugins_remote = ["com.crossbow.admob:admob:0.1.7"]
3838
If you want to configure custom APPLICATION_ID add this to your Cargo.toml file:
3939

4040
```toml
41-
[[package.metadata.android.meta_data]]
41+
[[package.metadata.android.manifest.application.meta_data]]
4242
name = "com.google.android.gms.ads.APPLICATION_ID"
4343
value = "<YOUR ID HERE>"
4444
# By default: ca-app-pub-3940256099942544~3347511713

0 commit comments

Comments
 (0)