[CI]: build MobileGL android renderer plugin

This commit is contained in:
2026-05-23 20:58:03 +08:00
parent 8c00ae1d38
commit cb8cb48a60
9 changed files with 201 additions and 1 deletions
+56
View File
@@ -0,0 +1,56 @@
name: MobileGL Plugin APK
on:
push:
branches:
- dev
- Feat/Backend-Direct-GLES
- Feat/Backend-Direct-Vulkan
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set artifact metadata
run: |
echo "date_today=$(date +'%Y-%m-%d')" >> "$GITHUB_ENV"
echo "short_sha=${GITHUB_SHA::7}" >> "$GITHUB_ENV"
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: '17'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
gradle-version: 8.10.2
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install Android NDK
run: |
sdkmanager "ndk;27.3.13750724"
echo "ndk.dir=$ANDROID_HOME/ndk/27.3.13750724" >> android-plugin/local.properties
- name: Update glslang external sources
working-directory: 3rdparty/glslang
run: python update_glslang_sources.py
- name: Build plugin APK
run: gradle --no-daemon -p android-plugin :app:assembleRelease
- name: Upload plugin APK
uses: actions/upload-artifact@v4
with:
name: MobileGL-plugin-${{ env.date_today }}-${{ env.short_sha }}
path: android-plugin/app/build/outputs/apk/release/*.apk
+4 -1
View File
@@ -18,4 +18,7 @@ MobileGL/MG_Test/build
/cmake-build*
.idea
MobileGL/MG*/build*
MobileGL/MG*/cmake-build*
MobileGL/MG*/cmake-build*
/android-plugin/.gradle
/android-plugin/build
/android-plugin/app/build
+53
View File
@@ -0,0 +1,53 @@
plugins {
id 'com.android.application'
}
def mobileGlEnv = [
LIBGL_ES : '3',
POJAV_RENDERER : 'opengles3',
MOBILEGL_BACKEND_TYPE: 'DirectGLES',
]
def mobileGlEnvString = mobileGlEnv.collect { key, value -> "${key}=${value}" }.join(':')
android {
namespace 'top.mobilegl.plugin'
compileSdk 34
ndkVersion '27.3.13750724'
defaultConfig {
applicationId 'top.mobilegl.plugin'
minSdk 26
targetSdk 34
versionCode 1
versionName 'dev'
ndk {
abiFilters 'arm64-v8a'
}
manifestPlaceholders = [
des : 'MobileGL',
renderer: 'MobileGL:libMobileGL.so:/libMobileGL.so',
boatEnv : mobileGlEnvString,
pojavEnv: mobileGlEnvString,
]
}
buildTypes {
release {
minifyEnabled false
}
}
packaging {
jniLibs {
useLegacyPackaging true
excludes += ['**/libSPIRV-Tools-shared.so']
}
}
}
dependencies {
implementation project(':MobileGL')
}
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:hasCode="true"
android:label="@string/app_name"
android:theme="@style/Theme.MobileGLPlugin">
<activity
android:name=".PluginActivity"
android:exported="true"
android:theme="@style/Theme.MobileGLPlugin.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="fclPlugin"
android:value="true" />
<meta-data
android:name="des"
android:value="${des}" />
<meta-data
android:name="renderer"
android:value="${renderer}" />
<meta-data
android:name="boatEnv"
android:value="${boatEnv}" />
<meta-data
android:name="pojavEnv"
android:value="${pojavEnv}" />
</application>
</manifest>
@@ -0,0 +1,12 @@
package top.mobilegl.plugin;
import android.app.Activity;
import android.os.Bundle;
public final class PluginActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
}
}
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MobileGL</string>
</resources>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.MobileGLPlugin" parent="@android:style/Theme.Material.NoActionBar" />
<style name="Theme.MobileGLPlugin.NoDisplay" parent="@android:style/Theme.NoDisplay" />
</resources>
+11
View File
@@ -0,0 +1,11 @@
plugins {
id 'com.android.application' version '8.6.0' apply false
id 'com.android.library' version '8.6.0' apply false
}
subprojects { subproject ->
subproject.plugins.withId('com.android.library') {
subproject.android.defaultConfig.ndk.abiFilters.clear()
subproject.android.defaultConfig.ndk.abiFilters.add('arm64-v8a')
}
}
+20
View File
@@ -0,0 +1,20 @@
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = 'MobileGLPlugin'
include ':app'
include ':MobileGL'
project(':MobileGL').projectDir = file('..')