Skip to content

Commit

Permalink
Bump android manifest version and replace Cargo.toml metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
enfipy committed Jul 31, 2022
1 parent cb58e24 commit 6511aad
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 93 deletions.
14 changes: 7 additions & 7 deletions crossbundle/cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,25 +77,25 @@ build_targets = ["aarch64-linux-android"]

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

# Specifies that an app wants a particular permission, but only if the app is installed on a device running
# Specifies that an app wants a particular permission, but only if the app is installed on a device running
# 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.
#
# See https://developer.android.com/guide/topics/manifest/uses-permission-sdk-23-element
[[package.metadata.android.permissions_sdk_23]]
[[package.metadata.android.manifest.uses_permission_sdk_23]]
name = "android.permission.WRITE_EXTERNAL_STORAGE"
max_sdk_version = 30

# See https://developer.android.com/guide/topics/manifest/service-element
[[package.metadata.android.service]]
[[package.metadata.android.manifest.service]]
name = "UpdateService"
intent_filter = []
meta_data = []

# See https://developer.android.com/guide/topics/manifest/queries-element#provider
[[package.metadata.android.queries.provider]]
[[package.metadata.android.manifest.queries.provider]]
authorities = "org.khronos.openxr.runtime_broker;org.khronos.openxr.system_runtime_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.
Expand All @@ -105,13 +105,13 @@ name = "org.khronos.openxr"
# See https://developer.android.com/guide/topics/manifest/uses-feature-element
#
# Note: there can be multiple .uses_feature entries.
[[package.metadata.android.features]]
[[package.metadata.android.manifest.features]]
name = "android.hardware.vulkan.level"
required = true
version = 1

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

Expand Down
58 changes: 23 additions & 35 deletions crossbundle/cli/src/commands/build/build_context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,10 @@ impl BuildContext {
debuggable: bool,
gradle: bool,
) -> Result<AndroidManifest> {
let android_manifest = AndroidConfig {
if let Some(manifest_path) = &self.android_config.manifest_path {
return Ok(android::read_android_manifest(manifest_path)?);
}
let android_config = AndroidConfig {
app_name: self.android_config.app_name.clone(),
version_name: Some(
self.android_config
Expand All @@ -120,42 +123,27 @@ impl BuildContext {
),
max_sdk_version: self.android_config.max_sdk_version,
icon: self.android_config.icon.clone(),
permissions_sdk_23: self.android_config.permissions_sdk_23.clone(),
permissions: self.android_config.permissions.clone(),
features: self.android_config.features.clone(),
service: self.android_config.service.clone(),
meta_data: self.android_config.meta_data.clone(),
queries: self.android_config.queries.clone(),
..Default::default()
};
if let Some(manifest_path) = &self.android_config.manifest_path {
Ok(android::read_android_manifest(manifest_path)?)
} else {
let manifest = gen_manifest::gen_android_manifest(
Some(format!("com.rust.{}", package_name).replace('-', "_")),
package_name.to_string(),
android_manifest.app_name,
android_manifest
.version_name
.unwrap_or_else(|| self.package_version()),
android_manifest.version_code.unwrap_or(1),
Some(android_manifest.min_sdk_version.unwrap_or(MIN_SDK_VERSION)),
android_manifest
.target_sdk_version
.unwrap_or_else(|| sdk.default_platform()),
android_manifest.max_sdk_version,
android_manifest.icon,
debuggable,
android_manifest.permissions_sdk_23,
android_manifest.permissions,
android_manifest.features,
android_manifest.service,
android_manifest.meta_data,
android_manifest.queries,
gradle,
);
Ok(manifest)
}
let manifest = gen_manifest::gen_android_manifest(
Some(format!("com.rust.{}", package_name).replace('-', "_")),
package_name.to_string(),
android_config.app_name,
android_config
.version_name
.unwrap_or_else(|| self.package_version()),
android_config.version_code.unwrap_or(1),
Some(android_config.min_sdk_version.unwrap_or(MIN_SDK_VERSION)),
android_config
.target_sdk_version
.unwrap_or_else(|| sdk.default_platform()),
android_config.max_sdk_version,
android_config.icon,
debuggable,
gradle,
);
// TODO: Merge AndroidManifest
Ok(manifest)
}

/// Get info plist from the path in cargo manifest or generate it with the given configuration
Expand Down
23 changes: 6 additions & 17 deletions crossbundle/cli/src/types/android_config.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crossbundle_tools::{
commands::android::AndroidGradlePlugins,
types::{android_manifest::*, AndroidTarget},
types::{android_manifest::AndroidManifest, AndroidTarget},
};
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
Expand All @@ -11,6 +11,8 @@ pub const MIN_SDK_VERSION: u32 = 19;
pub struct AndroidConfig {
/// Application name.
pub app_name: Option<String>,
/// Android package name to place in AndroidManifest.xml.
pub package: Option<String>,
/// Application version name.
pub version_name: Option<String>,
/// Application version code.
Expand All @@ -27,22 +29,9 @@ pub struct AndroidConfig {
/// Path to AndroidManifest.xml file.
pub manifest_path: Option<PathBuf>,

/// Android permissions for target sdk version = 22 and lower.
pub permissions: Option<Vec<UsesPermission>>,
/// To declare a permission only on devices that support runtime permissions鈥攖hat is,
/// devices that run Android 6.0 (API level 23) or higher鈥攊nclude the uses-permission-sdk-23
/// element instead of the uses-permission element.
pub permissions_sdk_23: Option<Vec<UsesPermissionSdk23>>,
/// Declares a single hardware or software android feature that is used by the application
pub features: Option<Vec<UsesFeature>>,
/// Android service to place in AndroidManifest.xml.
pub service: Option<Vec<Service>>,
/// Android application meta_data to place in AndroidManifest.xml.
pub meta_data: Option<Vec<MetaData>>,
/// Android queries to place in AndroidManifest.xml.
pub queries: Option<Queries>,
/// Android package name to place in AndroidManifest.xml.
pub package: Option<String>,
/// AndroidManifest.xml configuration.
pub manifest: Option<AndroidManifest>,

/// Android resources directory path relatively to project path.
pub res: Option<PathBuf>,
/// Android assets directory path relatively to project path.
Expand Down
4 changes: 2 additions & 2 deletions crossbundle/tools/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ dunce = "1.0"
fs_extra = "1.2"
dirs = "4.0.0"
simctl = { version = "0.1.1", package = "creator-simctl" }
android-manifest = "0.1.8"
apple-bundle = "0.1.1"
android-manifest = "0.1.9"
apple-bundle = "0.1.2"
android-tools = "0.2.9"
thiserror = "1.0"
anyhow = "1.0"
Expand Down
12 changes: 0 additions & 12 deletions crossbundle/tools/src/commands/android/generate/gen_manifest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,6 @@ pub fn gen_android_manifest(
max_sdk_version: Option<u32>,
icon: Option<String>,
debuggable: bool,
permissions_sdk_23: Option<Vec<UsesPermissionSdk23>>,
permissions: Option<Vec<UsesPermission>>,
features: Option<Vec<UsesFeature>>,
service: Option<Vec<Service>>,
meta_data: Option<Vec<MetaData>>,
queries: Option<Queries>,
gradle: bool,
) -> AndroidManifest {
AndroidManifest {
Expand All @@ -32,10 +26,6 @@ pub fn gen_android_manifest(
target_sdk_version: Some(target_sdk_version),
max_sdk_version,
}),
uses_permission_sdk_23: permissions_sdk_23.unwrap_or_default(),
uses_permission: permissions.unwrap_or_default(),
uses_feature: features.unwrap_or_default(),
queries,
application: Application {
has_code: Some(gradle),
label: Some(StringResourceOrString::string(
Expand All @@ -47,8 +37,6 @@ pub fn gen_android_manifest(
"Theme.DeviceDefault.NoActionBar.Fullscreen",
Some("android".to_string()),
)),
service: service.unwrap_or_default(),
meta_data: meta_data.unwrap_or_default(),
activity: vec![Activity {
name: match gradle {
true => "com.crossbow.game.CrossbowApp".to_string(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,32 +56,19 @@ version_code = 1
build_targets = ["aarch64-linux-android"]
[[package.metadata.android.features]]
[[package.metadata.android.manifest.uses_feature]]
name = "android.hardware.vulkan.level"
required = true
version = 1
[[package.metadata.android.permissions]]
[[package.metadata.android.manifest.permission]]
name = "android.permission.WRITE_EXTERNAL_STORAGE"
max_sdk_version = 30
[[package.metadata.android.permissions_sdk_23]]
[[package.metadata.android.manifest.uses_permission_sdk_23]]
name = "android.permission.INTERNET"
max_sdk_version = 30
[[package.metadata.android.queries.provider]]
authorities = "org.khronos.openxr.runtime_broker;org.khronos.openxr.system_runtime_broker"
name = "org.khronos.openxr"
[[package.metadata.android.meta_data]]
name = "com.oculus.vr.focusaware"
value = "true"
[[package.metadata.android.service]]
name = "UpdateService"
intent_filter = []
meta_data = []
[package.metadata.apple]
app_name = "Macroquad_3D"
build_targets = ["aarch64-apple-ios", "x86_64-apple-ios"]
Expand Down
6 changes: 3 additions & 3 deletions examples/macroquad-permissions/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ include = ":crossbow:lib"
include = ":admob"
project_dir = "../../plugins/admob/android"

[[package.metadata.android.permissions]]
[[package.metadata.android.manifest.permission]]
name = "android.permission.READ_EXTERNAL_STORAGE"

[[package.metadata.android.permissions]]
[[package.metadata.android.manifest.permission]]
name = "android.permission.CAMERA"

[[package.metadata.android.permissions]]
[[package.metadata.android.manifest.permission]]
name = "android.permission.RECORD_AUDIO"

[package.metadata.apple]
Expand Down
2 changes: 1 addition & 1 deletion plugins/admob/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ plugins_remote = ["com.crossbow.admob:admob:0.1.7"]
If you want to configure custom APPLICATION_ID add this to your Cargo.toml file:

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

0 comments on commit 6511aad

Please sign in to comment.