diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml
deleted file mode 100644
index c74d522a..00000000
--- a/.github/workflows/build-android.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-name: Build Android
-
-on:
-  workflow_dispatch:
-  push:
-    branches:
-    - '**'              # every branch
-    - '!no-build-**'    # unless marked as no-build
-
-jobs:
-  build:
-    name: Build Android
-    runs-on: ubuntu-latest
-    
-    steps:
-      - uses: actions/checkout@v3
-      
-      - uses: nttld/setup-ndk@v1
-        id: setup-ndk
-        with:
-          ndk-version: r26b
-          add-to-path: false
-
-      - name: Download CLI
-        uses: robinraju/release-downloader@v1.8
-        with:
-          repository: geode-sdk/cli
-          latest: true
-          fileName: '*-linux.zip'
-          tarBall: false
-          zipBall: false
-          out-file-path: "cli"
-  
-      - name: Setup CLI
-        run: |
-          7z x "${{ github.workspace }}/cli/*-linux.zip" -o"${{ github.workspace }}/cli"
-          chmod +x $GITHUB_WORKSPACE/cli/geode
-          echo "${{ github.workspace }}/cli" >> $GITHUB_PATH
-
-      - name: Configure
-        env:
-          NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
-          ANDROID_ABI: armeabi-v7a
-          MIN_SDK_VERSION: 24
-        run: |
-          sudo apt install ninja-build
-          cmake -DCMAKE_TOOLCHAIN_FILE=$NDK_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI=$ANDROID_ABI -DANDROID_PLATFORM=android-$MIN_SDK_VERSION -DCMAKE_BUILD_TYPE=Debug -DGEODE_DONT_BUILD_TEST_MODS=1 -G Ninja -B build
-
-      - name: Build
-        run: |
-          cmake --build build --config Debug
-
-      - name: Upload Artifacts
-        uses: actions/upload-artifact@v3
-        with:
-          name: geode-android
-          path: ./bin/nightly/*.so
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a0cdd586..fd54c88e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -20,6 +20,7 @@ jobs:
         - name: Windows
           os: windows-latest
           id: win
+          cli_id: win
           extra_flags: -T host=x64 -A win32 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DGEODE_DEBUG=On
           # uncomment to use vs clang-cl and ninja
           #extra_flags: >
@@ -34,6 +35,7 @@ jobs:
         - name: macOS
           os: macos-latest
           id: mac
+          cli_id: mac
           extra_flags: >
             -DCMAKE_C_COMPILER=clang
             -DCMAKE_CXX_COMPILER=clang++
@@ -43,6 +45,21 @@ jobs:
           cli_cmd: 'chmod +x $GITHUB_WORKSPACE/cli/geode'
           package_cmd: './installer/mac/package.sh ./bin/nightly ./installer/mac/geode-installer-mac.pkg'
           installer_path: './installer/mac/geode-installer-mac.pkg'
+        
+        - name: Android
+          os: ubuntu-latest
+          id: android
+          cli_id: linux
+          extra_flags: >
+            -DCMAKE_TOOLCHAIN_FILE=$NDK_HOME/build/cmake/android.toolchain.cmake
+            -DANDROID_ABI=$ANDROID_ABI
+            -DANDROID_PLATFORM=android-$MIN_SDK_VERSION
+            -DGEODE_DONT_BUILD_TEST_MODS=1
+            -G Ninja
+          cli_cmd: 'chmod +x $GITHUB_WORKSPACE/cli/geode'
+          package_cmd: ''
+          installer_path: ''
+
 
     name: Build ${{ matrix.config.name }}
     runs-on: ${{ matrix.config.os }}
@@ -57,7 +74,7 @@ jobs:
       uses: hendrikmuhs/ccache-action@v1
       with:
         key: ${{ matrix.config.os }}
-      if: matrix.config.id == 'mac'
+      if: matrix.config.id != 'win'
 
     - name: Setup MSVC
       uses: ilammy/msvc-dev-cmd@v1.12.1
@@ -65,22 +82,38 @@ jobs:
         arch: amd64_x86
       if: matrix.config.id == 'win'
 
+    - name: Setup NDK
+      uses: nttld/setup-ndk@v1
+      id: setup-ndk
+      with:
+        ndk-version: r26b
+        add-to-path: false
+      if: matrix.config.id == 'android'
+
     - name: Download CLI
       uses: robinraju/release-downloader@v1.8
       with:
         repository: geode-sdk/cli
         latest: true
-        fileName: '*-${{ matrix.config.id }}.zip'
+        fileName: '*-${{ matrix.config.cli_id }}.zip'
         tarBall: false
         zipBall: false
         out-file-path: "cli"
 
     - name: Setup CLI
       run: |
-        7z x "${{ github.workspace }}/cli/*-${{ matrix.config.id }}.zip" -o"${{ github.workspace }}/cli"
+        7z x "${{ github.workspace }}/cli/*-${{ matrix.config.cli_id }}.zip" -o"${{ github.workspace }}/cli"
         ${{ matrix.config.cli_cmd }}
         echo "${{ github.workspace }}/cli" >> $GITHUB_PATH
 
+    - name: Setup Android Env
+      run: |
+        echo "NDK_HOME=${{ steps.setup-ndk.outputs.ndk-path }}" >> "$GITHUB_ENV"
+        echo "ANDROID_ABI=armeabi-v7a" >> "$GITHUB_ENV"
+        echo "MIN_SDK_VERSION=24" >> "$GITHUB_ENV"
+        sudo apt install ninja-build
+      if: matrix.config.id == 'android'
+
     - name: Configure
       run: >
         cmake -B ${{ github.workspace }}/build
@@ -101,12 +134,14 @@ jobs:
 
     - name: Package Installer
       run: ${{ matrix.config.package_cmd }}
+      if: matrix.config.id != 'android'
 
     - name: Upload Installer
       uses: actions/upload-artifact@v3
       with:
         name: geode-installer-${{ matrix.config.id }}
         path: ${{ matrix.config.installer_path }}
+      if: matrix.config.id != 'android'
 
   publish:
     name: Publish
@@ -146,6 +181,12 @@ jobs:
           files: geode-win/XInput9_1_0.dll geode-win/Geode.dll geode-win/GeodeUpdater.exe geode-win/Geode.lib geode-win/Geode.pdb
           dest: geode-${{ steps.ref.outputs.hash }}-win.zip
 
+      - name: Zip Android Artifacts
+        uses: vimtor/action-zip@v1.1
+        with:
+          files: geode-android/Geode.so
+          dest: geode-${{ steps.ref.outputs.hash }}-android.zip
+
       - name: Zip Resources
         uses: vimtor/action-zip@v1.1
         with:
@@ -166,4 +207,5 @@ jobs:
             ./geode-installer-${{ steps.ref.outputs.hash }}-win.exe
             ./geode-${{ steps.ref.outputs.hash }}-mac.zip
             ./geode-${{ steps.ref.outputs.hash }}-win.zip
+            ./geode-${{ steps.ref.outputs.hash }}-android.zip
             ./resources.zip
diff --git a/.github/workflows/draft.yml b/.github/workflows/draft.yml
index d6051f79..f6bc7604 100644
--- a/.github/workflows/draft.yml
+++ b/.github/workflows/draft.yml
@@ -28,6 +28,7 @@ jobs:
           mv dev/geode-installer-*-win.exe geode-installer-v${{ steps.ref.outputs.version }}-win.exe
           mv dev/geode-*-mac.zip geode-v${{ steps.ref.outputs.version }}-mac.zip
           mv dev/geode-*-win.zip geode-v${{ steps.ref.outputs.version }}-win.zip
+          mv dev/geode-*-android.zip geode-v${{ steps.ref.outputs.version }}-android.zip
           mv dev/resources.zip resources.zip
 
       - name: Create Draft Release
@@ -48,4 +49,5 @@ jobs:
             ./geode-installer-v${{ steps.ref.outputs.version }}-win.exe
             ./geode-v${{ steps.ref.outputs.version }}-mac.zip
             ./geode-v${{ steps.ref.outputs.version }}-win.zip
+            ./geode-v${{ steps.ref.outputs.version }}-android.zip
             ./resources.zip