From 751c634d48414f54e4e9cf7e91c82df513a74570 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Thu, 25 Sep 2025 19:12:48 +0200 Subject: [PATCH 1/5] Add documentation about the manifest.yaml Reason/Description: So it is clear how to change properties of the packages Files: README.md --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index b6df0f7e..bd00fe0a 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,21 @@ xbuild is a build tool for rust projects with support for cross compiling and publishing to all major stores. The goal of xbuild is making native app development as easy as web development. +To configure the build of the packages for the platforms a `manifest.yaml` file must be created in the working directory. To configure for an android apk check all options of `AndroidManifest` struct (https://github.com/rust-mobile/xbuild/blob/master/apk/src/manifest.rs#L8). + +To set internet permissions for android for example: +```yaml +android: + manifest: + sdk: + min_sdk_version: 23 + target_sdk_version: 36 + # See https://developer.android.com/guide/topics/manifest/uses-permission-element + uses_permission: + - name: "android.permission.INTERNET" + - name: "android.permission.ACCESS_NETWORK_STATE" +``` + ## Getting started Install `xbuild`: ```sh From 4caa18f03ef32653082bc79334e0752ff97234a7 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sat, 27 Sep 2025 15:34:02 +0200 Subject: [PATCH 2/5] If no assets are available do not include Reason/Description: Otherwise gradle complains Files: README.md, mod.rs, and settings.gradle --- README.md | 14 ++++++++++++++ xbuild/src/gradle/mod.rs | 5 +++++ xbuild/src/gradle/settings.gradle | 1 - 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bd00fe0a..5a46a607 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,20 @@ info: component 'rust-std' for target 'aarch64-linux-android' is up to date ![x](https://user-images.githubusercontent.com/741807/162616805-30b48faa-84f0-4fec-851a-4c94fd35c6bd.png) +### Version compatibility (Android gradle) + +When using gradle with android make sure you have the correct versions installed (https://kotlinlang.org/docs/gradle-configure-project.html#kotlin-gradle-plugin-data-in-a-project) + +Tested: + +| Software | Version | +| ------------- | ---------- | +| java | 17 | +| Gradle | 8.1.1 | +| AGP Plugin | 7.3.0 | +| Kotlin Plugin | 1.7.20 | + + ## Troubleshooting ### Command not found diff --git a/xbuild/src/gradle/mod.rs b/xbuild/src/gradle/mod.rs index 35955337..bcbf8174 100644 --- a/xbuild/src/gradle/mod.rs +++ b/xbuild/src/gradle/mod.rs @@ -1,6 +1,7 @@ use crate::{task, BuildEnv, Format, Opt}; use anyhow::{Context, Result}; use apk::Target; +use std::io::Write; use std::path::{Path, PathBuf}; use std::process::Command; @@ -49,6 +50,10 @@ pub fn build(env: &BuildEnv, libraries: Vec<(Target, PathBuf)>, out: &Path) -> R let config = env.config().android(); let mut manifest = config.manifest.clone(); + if !config.assets.is_empty() { + std::fs::OpenOptions::new().write(true).append(true).open(gradle.join("settings.gradle"))?.write(r#"include ':baseAssets'"#.as_bytes())?; + } + let package = manifest.package.take().unwrap_or_default(); let target_sdk = manifest.sdk.target_sdk_version.take().unwrap(); let min_sdk = manifest.sdk.min_sdk_version.take().unwrap(); diff --git a/xbuild/src/gradle/settings.gradle b/xbuild/src/gradle/settings.gradle index 9f5af3eb..f60920c6 100644 --- a/xbuild/src/gradle/settings.gradle +++ b/xbuild/src/gradle/settings.gradle @@ -14,4 +14,3 @@ dependencyResolutionManagement { } include ':app' -include ':baseAssets' From 142e69e16a07b18ffbea6ee1ce31855c4fb98c3b Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Fri, 7 Nov 2025 18:26:27 +0100 Subject: [PATCH 3/5] Show path name in error message --- xbuild/src/cargo/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xbuild/src/cargo/mod.rs b/xbuild/src/cargo/mod.rs index 7b916bda..5f9f343d 100644 --- a/xbuild/src/cargo/mod.rs +++ b/xbuild/src/cargo/mod.rs @@ -38,7 +38,7 @@ impl Cargo { .map(|path| { if path.file_name() != Some(OsStr::new("Cargo.toml")) || !path.is_file() { Err(anyhow::anyhow!( - "The manifest-path must be a path to a Cargo.toml file" + "The manifest-path '{:?}' must be a path to a Cargo.toml file", path )) } else { Ok(path) From 7d0e51badae3157cef296a09bcb050e9da81d6bf Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Fri, 7 Nov 2025 18:35:54 +0100 Subject: [PATCH 4/5] add better error message Reason: to make clear that Cargo.toml is required at the end --- xbuild/src/cargo/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xbuild/src/cargo/mod.rs b/xbuild/src/cargo/mod.rs index 5f9f343d..14069728 100644 --- a/xbuild/src/cargo/mod.rs +++ b/xbuild/src/cargo/mod.rs @@ -38,7 +38,7 @@ impl Cargo { .map(|path| { if path.file_name() != Some(OsStr::new("Cargo.toml")) || !path.is_file() { Err(anyhow::anyhow!( - "The manifest-path '{:?}' must be a path to a Cargo.toml file", path + "The manifest-path {:?} must be a path to a Cargo.toml file including 'Cargo.toml'", path )) } else { Ok(path) From c9bd0b68ad2ba85bea01db24044f2daf84d2349d Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Tue, 11 Nov 2025 21:34:05 +0100 Subject: [PATCH 5/5] cleanup --- xbuild/src/gradle/mod.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/xbuild/src/gradle/mod.rs b/xbuild/src/gradle/mod.rs index bcbf8174..dbd2f010 100644 --- a/xbuild/src/gradle/mod.rs +++ b/xbuild/src/gradle/mod.rs @@ -50,10 +50,6 @@ pub fn build(env: &BuildEnv, libraries: Vec<(Target, PathBuf)>, out: &Path) -> R let config = env.config().android(); let mut manifest = config.manifest.clone(); - if !config.assets.is_empty() { - std::fs::OpenOptions::new().write(true).append(true).open(gradle.join("settings.gradle"))?.write(r#"include ':baseAssets'"#.as_bytes())?; - } - let package = manifest.package.take().unwrap_or_default(); let target_sdk = manifest.sdk.target_sdk_version.take().unwrap(); let min_sdk = manifest.sdk.min_sdk_version.take().unwrap(); @@ -107,6 +103,8 @@ pub fn build(env: &BuildEnv, libraries: Vec<(Target, PathBuf)>, out: &Path) -> R let _ = std::fs::remove_dir_all(&base_assets); if !config.assets.is_empty() { + std::fs::OpenOptions::new().write(true).append(true).open(gradle.join("settings.gradle"))?.write(r#"include ':baseAssets'"#.as_bytes())?; + std::fs::create_dir_all(&base_assets)?; let assets = format!( r#"