Skip to content

refactor: modularize main.c into structured core helpers and restore … #213

refactor: modularize main.c into structured core helpers and restore …

refactor: modularize main.c into structured core helpers and restore … #213

Workflow file for this run

name: Android Build
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
on:
push:
branches: [ "main", "master" ]
pull_request:
branches: [ "main", "master" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Setup Android SDK
uses: android-actions/setup-android@v2
- name: Cache NDK
uses: actions/cache@v4
id: cache-ndk
with:
path: /usr/local/lib/android/sdk/ndk/25.1.8937393
key: ${{ runner.os }}-ndk-25.1.8937393
- name: Install NDK
if: steps.cache-ndk.outputs.cache-hit != 'true'
run: echo "y" | sudo /usr/local/lib/android/sdk/cmdline-tools/latest/bin/sdkmanager --install "ndk;25.1.8937393"
- name: Checkout Raylib
run: |
git clone https://github.com/raysan5/raylib.git raylib-src
cd raylib-src
git checkout 5.0
- name: Build Raylib Android (arm64-v8a)
run: |
cd raylib-src/src
make PLATFORM=PLATFORM_ANDROID ANDROID_NDK=/usr/local/lib/android/sdk/ndk/25.1.8937393 ANDROID_ARCH=arm64 ANDROID_API_VERSION=21
mkdir -p ../../platform/android/app/src/main/jniLibs/arm64-v8a
cp libraylib.a ../../platform/android/app/src/main/jniLibs/arm64-v8a/
- name: Build Raylib Android (armeabi-v7a)
run: |
cd raylib-src/src
make clean
make PLATFORM=PLATFORM_ANDROID ANDROID_NDK=/usr/local/lib/android/sdk/ndk/25.1.8937393 ANDROID_ARCH=arm ANDROID_API_VERSION=21
mkdir -p ../../platform/android/app/src/main/jniLibs/armeabi-v7a
cp libraylib.a ../../platform/android/app/src/main/jniLibs/armeabi-v7a/
- name: Build Raylib Android (x86_64)
run: |
cd raylib-src/src
make clean
make PLATFORM=PLATFORM_ANDROID ANDROID_NDK=/usr/local/lib/android/sdk/ndk/25.1.8937393 ANDROID_ARCH=x86_64 ANDROID_API_VERSION=21
mkdir -p ../../platform/android/app/src/main/jniLibs/x86_64
cp libraylib.a ../../platform/android/app/src/main/jniLibs/x86_64/
- name: Copy Android NDK Glue
run: |
mkdir -p platform/android/app/src/main/cpp
cp /usr/local/lib/android/sdk/ndk/25.1.8937393/sources/android/native_app_glue/android_native_app_glue.c platform/android/app/src/main/cpp/
cp /usr/local/lib/android/sdk/ndk/25.1.8937393/sources/android/native_app_glue/android_native_app_glue.h platform/android/app/src/main/cpp/
- name: Bundle Assets
run: |
gcc tools/bin2c.c -o tools/bin2c
gcc tools/gen_splash_bundle.c -o tools/gen_splash_bundle
rm -f src/ui/components/assets_bundle.h
echo "#ifndef ASSETS_BUNDLE_H" > src/ui/components/assets_bundle.h
echo "#define ASSETS_BUNDLE_H" >> src/ui/components/assets_bundle.h
./tools/bin2c "assets/fonts/otfs/Font Awesome 5 Free-Solid-900.otf" src/ui/components/assets_bundle.h font_awesome_solid append
./tools/bin2c "assets/fonts/otfs/Font Awesome 5 Free-Regular-400.otf" src/ui/components/assets_bundle.h font_awesome_regular append
./tools/bin2c "assets/fonts/otfs/Font Awesome 5 Brands-Regular-400.otf" src/ui/components/assets_bundle.h font_awesome_brand append
./tools/bin2c "assets/splash.png" src/ui/components/assets_bundle.h unx_logo append
./tools/bin2c "assets/icons/crown.png" src/ui/components/assets_bundle.h icon_crown append
./tools/bin2c "assets/icons/star.png" src/ui/components/assets_bundle.h icon_star append
./tools/gen_splash_bundle assets/splash src/ui/components/splash_bundle_tmp.h
cat src/ui/components/splash_bundle_tmp.h >> src/ui/components/assets_bundle.h
echo "#endif" >> src/ui/components/assets_bundle.h
- name: Prepare Android Assets
run: |
mkdir -p platform/android/app/src/main/assets/controllers
cp -r assets/* platform/android/app/src/main/assets/
cp -r controllers/* platform/android/app/src/main/assets/controllers/
rm -rf platform/android/app/src/main/assets/app_icons
- name: Create CMakeLists.txt for App
run: |
cat << 'EOF' > platform/android/app/CMakeLists.txt
cmake_minimum_required(VERSION 3.18.1)
project(xdjunx)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_C_STANDARD 11)
set(PROJECT_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../src")
set(PROJECT_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib")
include_directories(
${PROJECT_SRC_DIR}
${PROJECT_SRC_DIR}/core
${PROJECT_SRC_DIR}/engine
${PROJECT_LIB_DIR}
${PROJECT_LIB_DIR}/kaitai
${PROJECT_LIB_DIR}/rekordbox-metadata
${PROJECT_LIB_DIR}/soundtouch
${CMAKE_CURRENT_SOURCE_DIR}/../../../raylib-src/src
src/main/cpp
)
file(GLOB_RECURSE SRC_FILES
"${PROJECT_SRC_DIR}/*.c"
"${PROJECT_SRC_DIR}/*.cpp"
"${PROJECT_LIB_DIR}/kaitai/kaitai/kaitaistream.cpp"
"${PROJECT_LIB_DIR}/rekordbox-metadata/*.cpp"
"${PROJECT_LIB_DIR}/serato/*.cpp"
"${PROJECT_LIB_DIR}/soundtouch/*.cpp"
)
# Exclude platform specific
list(FILTER SRC_FILES EXCLUDE REGEX "midi_backend_win.c")
list(FILTER SRC_FILES EXCLUDE REGEX "system_windows.c")
list(FILTER SRC_FILES EXCLUDE REGEX "hid_backend_win.c")
add_definitions(-DKS_STR_ENCODING_NONE)
add_library(xdjunx SHARED ${SRC_FILES} src/main/cpp/android_native_app_glue.c)
find_library(log-lib log)
find_library(android-lib android)
find_library(egl-lib EGL)
find_library(gles-lib GLESv2)
target_link_libraries(xdjunx ${log-lib} ${android-lib} ${egl-lib} ${gles-lib} m ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libraylib.a)
EOF
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
gradle-version: 8.7
- name: Build APK with Gradle
run: |
cd platform/android
gradle assembleDebug
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: UNX-ENGINE-Android-Universal-API21-to-API35
path: platform/android/app/build/outputs/apk/debug/app-debug.apk