Skip to content

Commit 2ce068e

Browse files
committed
feat!: Android apk build support
1 parent 3ff95b5 commit 2ce068e

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

Cargo.lock

+2
Original file line numberDiff line numberDiff line change
@@ -1309,6 +1309,7 @@ dependencies = [
13091309
name = "egui_demo_app"
13101310
version = "0.30.0"
13111311
dependencies = [
1312+
"android_logger",
13121313
"bytemuck",
13131314
"chrono",
13141315
"eframe",
@@ -1329,6 +1330,7 @@ dependencies = [
13291330
"wasm-bindgen-futures",
13301331
"web-sys",
13311332
"wgpu",
1333+
"winit",
13321334
]
13331335

13341336
[[package]]

crates/egui_demo_app/Cargo.toml

+8
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ chrono = { version = "0.4", default-features = false, features = [
5252
] }
5353
eframe = { workspace = true, default-features = false, features = [
5454
"web_screen_reader",
55+
# Android support
56+
"android-native-activity",
5557
] }
5658
egui = { workspace = true, features = ["callstack", "default", "log"] }
5759
egui_demo_lib = { workspace = true, features = ["default", "chrono"] }
@@ -79,6 +81,9 @@ poll-promise = { version = "0.3", optional = true, default-features = false }
7981
# feature "persistence":
8082
serde = { workspace = true, optional = true }
8183

84+
[target.'cfg(target_os = "android")'.dependencies]
85+
winit = { workspace = true }
86+
android_logger = "0.14"
8287

8388
# native:
8489
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
@@ -93,3 +98,6 @@ rfd = { version = "0.15", optional = true }
9398
wasm-bindgen = "=0.2.95"
9499
wasm-bindgen-futures.workspace = true
95100
web-sys.workspace = true
101+
102+
[package.metadata.android]
103+
build_targets = ["armv7-linux-androideabi", "aarch64-linux-android"]

crates/egui_demo_app/src/lib.rs

+31
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ mod backend_panel;
66
mod frame_history;
77
mod wrap_app;
88

9+
#[cfg(target_os = "android")]
10+
use winit::platform::android::activity::AndroidApp;
11+
912
pub use wrap_app::WrapApp;
1013

1114
/// Time of day as seconds since midnight. Used for clock in demo app.
@@ -22,3 +25,31 @@ mod web;
2225

2326
#[cfg(target_arch = "wasm32")]
2427
pub use web::*;
28+
29+
// ----------------------------------------------------------------------------
30+
// Android entry point
31+
#[cfg(target_os = "android")]
32+
#[no_mangle]
33+
#[allow(unsafe_code)]
34+
pub fn android_main(app: AndroidApp) {
35+
android_logger::init_once(
36+
android_logger::Config::default()
37+
.with_max_level(log::LevelFilter::Info)
38+
.with_tag("egui_demo_app"),
39+
);
40+
41+
let options = eframe::NativeOptions {
42+
viewport: egui::ViewportBuilder::default()
43+
.with_inner_size([1280.0, 1024.0])
44+
.with_drag_and_drop(true),
45+
android_app: Some(app),
46+
..Default::default()
47+
};
48+
49+
eframe::run_native(
50+
"egui demo app",
51+
options,
52+
Box::new(|cc| Ok(Box::new(crate::WrapApp::new(cc)))),
53+
)
54+
.unwrap();
55+
}

0 commit comments

Comments
 (0)