Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM beigirad/tiny-android
RUN apt-get update -qq && apt-get install -y --no-install-recommends \
cmake ninja-build openjdk-11-jdk wget unzip python3 && apt-get clean && rm -rf /var/lib/apt/lists/*
# Install Gradle 7.5 (compatible with Android Gradle plugin 7.2.1)
RUN wget -q https://services.gradle.org/distributions/gradle-7.5-bin.zip -O /tmp/gradle.zip && \
unzip -q /tmp/gradle.zip -d /opt && \
rm /tmp/gradle.zip
ENV GRADLE_HOME=/opt/gradle-7.5
ENV PATH=$PATH:$GRADLE_HOME/bin
WORKDIR /workspace
8 changes: 6 additions & 2 deletions Source/Application/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
# Include source files.
file (GLOB_RECURSE SOURCE_FILES *.h *.cpp)

# Add dynamic or static library.
add_library (${APP_PLUGIN_NAME} ${SOURCE_FILES})
if (ANDROID)
add_library(${APP_PLUGIN_NAME} STATIC ${SOURCE_FILES})
target_compile_definitions(${APP_PLUGIN_NAME} PRIVATE URHO3D_STATIC=1)
else()
add_library(${APP_PLUGIN_NAME} ${SOURCE_FILES})
endif ()

# Link the engine and dependencies.
target_link_libraries (${APP_PLUGIN_NAME} PRIVATE
Expand Down
1 change: 1 addition & 0 deletions android/assets/Cache/common_cache.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
When editor import files it will place assets in the Cache folder.
3 changes: 3 additions & 0 deletions android/assets/ResourceRoot.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
CoreData=CoreData
Data=Data
Cache=Cache
16 changes: 10 additions & 6 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ apply plugin: 'com.android.application'

// Relative path to engine source code directory. Modify as required.
def projectSourceDir = '..'
// Relative path to project source code directory. Modify as required.
def rbfxSourceDir = '../3rdParty/rbfx'
// Relative path to engine source code directory. Modify as required.
def sdkPath = '../rebelfork-sdk-android-clang-arm64-dll-latest'
// Minimum required CMake version. This is same as in ../CMakeLists.txt.
def cmakeSdkPath = '"$projectDir/../../../rebelfork-sdk-android-clang-arm64-dll-latest"'
def cmakeVersion = '3.22.0.0+'

buildscript {
Expand All @@ -28,12 +29,15 @@ android {
minSdkVersion 17
targetSdkVersion 32
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'
abiFilters 'arm64-v8a'
}
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_static', '-DANDROID_PLATFORM=android-21', '-DANDROID=1',
'-DANDROID_ARM_MODE=arm', '-DBUILD_SHARED_LIBS=OFF'
arguments '-DANDROID_STL=c++_shared', '-DANDROID_PLATFORM=android-21', '-DANDROID=1',
'-DANDROID_ARM_MODE=arm', '-DBUILD_SHARED_LIBS=ON',
'-DCMAKE_PREFIX_PATH=' + new File(projectDir, '../rebelfork-sdk-android-clang-arm64-dll-latest/share').absolutePath,
'-DUrho3D_DIR=' + new File(projectDir, '../rebelfork-sdk-android-clang-arm64-dll-latest/share/Urho3D/CMake').absolutePath,
'-DPACKAGE_TOOL_EXECUTABLE=python3 ' + new File(projectDir, '../rebelfork-sdk-android-clang-arm64-dll-latest/bin/PackageTool.py').absolutePath
}
}
}
Expand All @@ -52,7 +56,7 @@ android {
}
sourceSets.main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src', "${rbfxSourceDir}/Source/ThirdParty/SDL/android-project/app/src/main/java"]
java.srcDirs = ['src', "${sdkPath}/share/Urho3D/Android/java"]
res.srcDirs = ['res', "${projectSourceDir}/StoreArt/Android/Icons"]
assets.srcDirs = ['assets', "${projectSourceDir}/Project"]
}
Expand Down
66 changes: 66 additions & 0 deletions build-android.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#!/bin/bash

set -e

echo "=== RebelFork Android Build ==="

if [ ! -f "CMakeLists.txt" ] || [ ! -d "android" ]; then
echo "Error: run from project root"
exit 1
fi

# Download SDK only if not already extracted
SDK_DIR="rebelfork-sdk-android-clang-arm64-dll-latest"
if [ ! -d "$SDK_DIR" ]; then
echo "Downloading SDK..."
rm -f rebelfork-sdk-android-clang-arm64-dll-latest.7z
if command -v wget >/dev/null 2>&1; then
wget -q https://github.com/rbfx/rbfx/releases/download/latest/rebelfork-sdk-android-clang-arm64-dll-latest.7z -O rebelfork-sdk-android.7z
elif command -v curl >/dev/null 2>&1; then
curl -sL https://github.com/rbfx/rbfx/releases/download/latest/rebelfork-sdk-android-clang-arm64-dll-latest.7z -o rebelfork-sdk-android.7z
else
echo "Error: wget or curl required"
exit 1
fi
echo "Extracting SDK..."
7z x rebelfork-sdk-android.7z -o. -y > /dev/null
rm -f rebelfork-sdk-android.7z
else
echo "SDK already present, skipping download"
fi

# Add coredata (should this be part of the SDK?)
cp -r ../rbfx/bin/CoreData Project/

# Docker
if ! command -v docker >/dev/null 2>&1; then
echo "Error: docker not found"
exit 1
fi

# Build Docker image
echo "Building Docker image..."
docker build -t rbfx-android-builder-slim .

# Submodules
if [ -f ".gitmodules" ]; then
git submodule sync
git submodule update --init --recursive
fi

# Build
echo "Building..."
docker run --rm \
-v "$PWD:/workspace" \
-w /workspace \
rbfx-android-builder-slim \
bash -c "
set -e
cd android
gradle assembleDebug
chown -R $(id -u):$(id -g) /workspace
"

# Report
echo "=== Result ==="
find android -name "*.apk" 2>/dev/null && echo "Build succeeded" || echo "No APK found"