Skip to content

Commit

Permalink
Add Android project
Browse files Browse the repository at this point in the history
  • Loading branch information
madebr authored and icculus committed Oct 23, 2024
1 parent 0114ff1 commit ed43802
Show file tree
Hide file tree
Showing 37 changed files with 792 additions and 3 deletions.
19 changes: 16 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,12 @@ jobs:
desktop:
name: ${{ matrix.platform.name }}
runs-on: ${{ matrix.platform.os }}

strategy:
matrix:
platform:
- { name: Linux, os: ubuntu-latest }
- { name: Windows, os: windows-latest }
- { name: MacOS, os: macos-latest }

steps:
- name: Set up SDL
id: sdl
Expand All @@ -30,7 +28,6 @@ jobs:
emscripten:
name: Emscripten
runs-on: ubuntu-latest

steps:
- name: Get project sources
uses: actions/checkout@v4
Expand All @@ -39,3 +36,19 @@ jobs:
run: emcmake cmake -B build ${{ matrix.platform.flags }} -DDOWNLOAD_DEPENDENCIES=ON
- name: Build (CMake)
run: cmake --build build/

android:
name: Android
runs-on: ubuntu-latest
steps:
- name: Get project sources
uses: actions/checkout@v4
- name: Download SDL3 Android Archive
env:
GH_TOKEN: ${{ github.token }}
run:
gh -R libsdl-org/SDL release download preview-3.1.3 -D android-project/app/libs -p '*.aar'
- name: Build gradle project
run: |
cd android-project
./gradlew -i assembleRelease
3 changes: 3 additions & 0 deletions android-project/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.cxx
.gradle
local.properties
37 changes: 37 additions & 0 deletions android-project/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Gradle

This folder contains a minimal Android gradle project that builds the SDL_helloworld application.
Instead of building SDL3 itself, it uses a prebuilt SDL3.

## FAQ

## Where do I get a prebuilt SDL3 Android library?

Prebuilt Android archives are part of SDL 3 releases as `.aar` archives.
Download these and put them in the `app/libs` folder.

## I downloaded a prebuilt SDL3 library, but it cannot find `SDL3-x.y.z.aar`

In `app/build.gradle`, there is a line `implementation files('libs/SDL3-X.Y.Z.aar')`.
You must download exactly SDL3 X.Y.Z, or modify `app/build.gradle` to the version of the library you downloaded.

## How do I modify my Android project to use prebuilt SDL3 Android archives?

Only 2 changes are required:

1. Enable the prefab build feature:
```gradle
android {
/* ... */
buildFeatures {
prefab true
}
}
```
2. Add the downloaded Android archive to your dependencies:
```gradle
dependencies {
/* ... */
implementation files('libs/SDL3-3.1.3.aar')
}
```
48 changes: 48 additions & 0 deletions android-project/app/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
plugins {
id 'com.android.application'
}

android {
compileSdk 33

defaultConfig {
applicationId 'org.libsdl.SDL_Helloworld'
minSdk 21
targetSdk 33
versionCode 1
versionName '1.0'

externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared', '-DDOWNLOAD_DEPENDENCIES=OFF'
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
// abiFilters 'arm64-v8a'
}
}
}

externalNativeBuild {
cmake {
path '../../CMakeLists.txt'
}
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
prefab true
}
}

dependencies {
implementation files('libs/SDL3-3.1.3.aar')
implementation 'androidx.appcompat:appcompat:1.5.1'
}
1 change: 1 addition & 0 deletions android-project/app/libs/copy-sdl-aars-here.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Copy SDL3 Android Archives (.aar files) here.
21 changes: 21 additions & 0 deletions android-project/app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
61 changes: 61 additions & 0 deletions android-project/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.libsdl.helloworld">

<!-- OpenGL ES 2.0 -->
<uses-feature android:glEsVersion="0x00020000" />

<!-- Touchscreen support -->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />

<!-- Game controller support -->
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<uses-feature
android:name="android.hardware.gamepad"
android:required="false" />
<uses-feature
android:name="android.hardware.usb.host"
android:required="false" />

<!-- External mouse input events -->
<uses-feature
android:name="android.hardware.type.pc"
android:required="false" />

<!-- Allow access to the vibrator -->
<uses-permission android:name="android.permission.VIBRATE" />

<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:hardwareAccelerated="true"
tools:targetApi="31">
<activity
android:name="org.libsdl.helloworld.HelloWorldActivity"
android:exported="true"
android:label="@string/app_name"
android:configChanges="layoutDirection|locale|orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
android:preferMinimalPostProcessing="true"
android:screenOrientation="fullSensor">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
</activity>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.libsdl.helloworld;

import org.libsdl.app.SDLActivity;

public class HelloWorldActivity extends SDLActivity {
protected String[] getLibraries() {
return new String[] { "SDL3", "sdl-helloworld" };
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
Loading

0 comments on commit ed43802

Please sign in to comment.