This guide basically follows The godot-rust Book but since it says that the “steps are tested and confirmed to work on Linux only”, of course it worries many newbie coders who use Windows like me. Working with Rust is already hard (but safe! and cool!), choosing godot-rust as game engine is quite niche, and then the guide’s tested on Linux only 😱
I will only share what I have tried & don’t think this will apply to all needs, but surely it will help a bit if you want to try as the title says.
I installed Android SDK without Android Studio. Go to https://developer.android.com/studio#downloads, scrolls a bit and find “Command line tools only”. Choose the Windows one.
Extract the downloaded zip. Inside, we’ll find “
cmdline-tools” folder. Rename this folder as “
latest “. Then, create these folders/path: “
C:\Android\cmdline-tools“. Move the “
latest” folder into “
After moving, open “
C:\Android\cmdline-tools\latest\bin” in a command prompt or terminal. I use Powershell 7 (x64) in Windows 10. So, adjust the following commands if needed.
Try to run the
sdkmanager.bat file in
C:\Android\cmdline-tools\latest\bin. I got this error:
ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation
I haven’t installed “java”, and I guessed it meant JDK (Java SE Development Kit). Download JDK here https://www.oracle.com/java/technologies/downloads/#jdk17-windows. I chose x64 Installer (.exe file).
After install (I chose default options),
'java' path is still not set. We have to set it manually in the Windows environment variable settings. For fast access, search “env” in Windows start bar, if you got “Edit the system environment variables”, select that, go to “Environment Variables”, select “Path”, and click “Edit…” button.
If you chose default options when installing JDK, your Java files should be in something like
C:\Program Files\Java\jdk-17.0.2 (your jdk version can be different from mine). Put that folder path into the Path environment variable, also add
C:\Program Files\Java\jdk-17.0.2\bin while we’re here, it will help later. Here’s a screenshot of the end result:
After this, when we try to run the
sdkmanager.bat, there shouldn’t be any error. Try to run the
.bat file. Here’s what I got:
PS C:\Android\cmdline-tools\latest\bin> .\sdkmanager.bat [=======================================] 100% Computing updates... PS C:\Android\cmdline-tools\latest\bin>
If you get another error, maybe this one:
Error: Could not determine SDK root. Error: Either specify it explicitly with --sdk_root= or move this package into its expected location: <sdk>\cmdline-tools\latest\
Then, you haven’t move the folder to “its expected location”. Apparently the expected location of the Android SDK (per 2022-02-13) is “
C:\Android\“. That’s why this post stated to move the downloaded SDK folder to
C:\Android\cmdline-tools\latest\. I’ve found out about this because of this Stack Overflow answer.
Now go to
C:\Android\cmdline-tools\latest\bin\, we’ll want to install several extra tools via
sdkmanager. Follow these commands, adjust as needed.
.\sdkmanager.bat --install "ndk;21.3.6528147" --channel=3 .\sdkmanager.bat "platform-tools" "platforms;android-28" .\sdkmanager.bat "build-tools;32.0.0"
I don’t have any particular reason for the
ndk version and
build-tools version. The NDK line is copy pasted from sdkmanager | Android Developers. The
build-tools is the recent version at the time, found out from using this command:
UPDATE: Apparently, Godot has stated the minimum version of the tools. Check it here Exporting for Android — Godot Engine (stable) documentation. I was lucky that my NDK version somehow is compatible.
platform-tools version is the API level of Android 9, my phone’s Android version. Here’s the API level list corresponding to its Android OS version: SDK Platform release notes | Android Developers.
Okay, I didn’t realize it’s gotten this long. And we haven’t passed the first paragraph of the original guide 😂 Maybe, it’d be easier if we just install Android Studio. Anyway, let’s review the guide’s first paragraph:
First, we need to install the Android SDK with NDK enabled. This contains the necessary tools for each architecture. Once the Android SDK is installed, open Editor Settings in the Godot GUI (Editor > Editor Settings > Export > Android) and set the absolute paths to
jarsigner, and the debug keystore (
debug.keystore), all of which can be found in the Android SDK installation.
Now open Godot and go to the Editor Settings as told by the guide. For the “Android Sdk Path” we can fill “
C:/Android” (I don’t know why it’s not a backslash, just use the explorer dialog if in doubt).
debug.keystore can be generated using
keytool.exe that is fortunately included in JDK. It is located in
C:\Program Files\Java\jdk-17.0.2\bin. We’ve already included the path in Environment variable, so we can go to any folder we like & generate the
debug.keystore there. This APK is for debugging only & not for releasing in the Play store. Someday, we’ll try that one too.
debug.keystore, we can borrow the line from Godot’s guide on exporting for Android.
keytool -keyalg RSA -genkeypair -alias androiddebugkey -keypass android -keystore debug.keystore -storepass android -dname "CN=Android Debug,O=Android,C=US" -validity 9999 -deststoretype pkcs12
Back to Godot GUI, in Editor settings, set the “Debug Keystore” field with the location of
debug.keystore we’ve generated before.
Now, follow the original guide and run the rustup commands. I ran only the “aarch64-linux-android” because my phone uses ARM processor.
rustup target add aarch64-linux-android # for arm64 (64-bit) rustup target add x86_64-linux-android # for x86_64 (64-bit)
I skipped the “32-bit targets” section.
I also skipped the “32-bit/64-bit compatible MinGW instance”. I’ve just downloaded it & extracted it in my Downloads folder; that shouldn’t do anything. It’s just occurred to me now that this may be a significant step & maybe I’ve installed something on my machine before that has included this library but I can’t remember. For now, please keep this in mind if you get an error later.
Setting up Cargo
You can follow the steps on the original guide, but somehow I couldn’t find my
.cargo/config folder. The
.cargo folder was there, but it doesn’t contain
config. So, I’ve just added the environment variables. It’s the same as before, but now it’s not the Path. We edit the System variables. Click the “New…” button.
In the following dialog, we can put the Variable name & value accordingly:
For example, the guide tells us to export the following variable:
in the dialog before, we can fill the Variable name as:
CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER and the value as (adjusted to Windows path):
Just open the folder
C:\Android\ndk\21.3.6528147\toolchains\llvm\prebuilt\windows-x86_64\bin\ in File Explorer & find the version we needed. Since I was targeting aarch64-linux (ARM processor) and Android 9 (API level 28), I chose
aarch64-linux-android28-clang (why …
-clang? Because the guide uses it). I’ve tried to use the non-cmd file & it didn’t work. So, the full value is using
Setting up environment variables for
We do the same for this one, adding System variables in Environment variables setting.
Here’s the end result in my computer
Building the GDNative library
Since my target was
aarch64-linux-android and I want to specify that the Cargo build the
lib part of my Rust code (I’ve got a
main.rs in the
src folder) , I change the following command from the godot-rust guide:
cargo build --release --target x86_64-linux-android
cargo build --lib --release --target aarch64-linux-android
After that, we’ve got the
.so file. Mine was in
target\aarch64-linux-android\release. We can use that in our
.gdnlib file in Godot. If you’ve succeeded in incorporating a
.gdnlib, this is the same process but with
.so. Details on incorporating the Rust code into Godot is beyond this post, but if you need it, you can start from this post: Godot Rust · Hagsteel.
I didn’t realize the godot-rust guide use command line to export. I used Godot GUI. Since I only target
aarch64-linux-android, in the Architecture section in Export GUI, I can only check the
Arm 64 option.
On other options, I used the default because I haven’t explored what it does yet. For now, we can test our game on phone. Good luck!
Day 40 #100DaysOfCode— Coffee, Code, Chemistry (@coffeecodechem) February 13, 2022
On Android! I’m quite nervous for this step because the @GodotRust guide on Android export says it’s not tested yet for Windows. https://t.co/vdkVHndX6J
Sure it needs more configurations but it’s possible. Also, I forgot to configure for portrait mode pic.twitter.com/0XOdfByRZk