fix build

This commit is contained in:
2026-01-17 11:03:34 +01:00
parent bced7d7666
commit a57e094cc3
3 changed files with 97 additions and 34 deletions

View File

@@ -16,38 +16,61 @@ public class BuildScript
return scenes;
}
[MenuItem("Build/Build Android APK")]
[MenuItem("Build/Build Android APK (Direct)")]
public static void BuildAndroid()
{
string outputPath = GetOutputPath();
BuildAndroidTo(outputPath);
BuildAndroidTo(outputPath, exportProject: false);
}
[MenuItem("Build/Export Android Project")]
public static void ExportAndroid()
{
string outputPath = Path.Combine(Directory.GetCurrentDirectory(), "Builds", "Android", "MosisVR");
BuildAndroidTo(outputPath, exportProject: true);
}
public static void BuildAndroidCI()
{
// Called from command line
// Called from command line - check for export flag
bool exportOnly = GetCommandLineArg("-export") == "true";
string outputPath = GetCommandLineArg("-outputPath");
if (string.IsNullOrEmpty(outputPath))
{
outputPath = exportOnly
? Path.Combine(Directory.GetCurrentDirectory(), "Builds", "Android", "MosisVR")
: Path.Combine(Directory.GetCurrentDirectory(), "Builds", "Android", "MosisVR.apk");
}
BuildAndroidTo(outputPath, exportOnly);
}
public static void BuildAndroidDirectCI()
{
// Called from command line - direct APK build (no export)
string outputPath = GetCommandLineArg("-outputPath");
if (string.IsNullOrEmpty(outputPath))
{
outputPath = Path.Combine(Directory.GetCurrentDirectory(), "Builds", "Android", "MosisVR.apk");
}
BuildAndroidTo(outputPath);
BuildAndroidTo(outputPath, exportProject: false);
}
private static void BuildAndroidTo(string outputPath)
private static void BuildAndroidTo(string outputPath, bool exportProject = true)
{
// Ensure output directory exists
string outputDir = Path.GetDirectoryName(outputPath);
string outputDir = exportProject ? outputPath : Path.GetDirectoryName(outputPath);
if (!Directory.Exists(outputDir))
{
Directory.CreateDirectory(outputDir);
}
Debug.Log($"Building Android APK to: {outputPath}");
Debug.Log($"Building Android {(exportProject ? "project" : "APK")} to: {outputPath}");
// Configure Android settings - export as Gradle project for manual build
EditorUserBuildSettings.exportAsGoogleAndroidProject = true;
// Configure Android settings
EditorUserBuildSettings.exportAsGoogleAndroidProject = exportProject;
EditorUserBuildSettings.buildAppBundle = false;
PlayerSettings.SetScriptingBackend(BuildTargetGroup.Android, ScriptingImplementation.IL2CPP);
PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARM64;

View File

@@ -40,7 +40,7 @@ android {
defaultConfig.externalNativeBuild{
cmake {
arguments += '-DUNITY_PROJECT_DIR="**DIR_UNITYPROJECT**"'
arguments += '-DANDROID_SDK="' + getSdkDir() + '"'
arguments += '-DANDROID_SDK="' + System.getenv("ANDROID_HOME") + '"'
}
}

View File

@@ -48,24 +48,39 @@ Packages/com.omarator.mosissdk/
## Build Commands
### Unity Build (Export to Android Studio)
### Option 1: Direct APK Build (Recommended)
Unity exports a Gradle project which is then built in Android Studio:
Build directly to APK without exporting:
1. File > Build Settings
2. Switch Platform to Android
3. Player Settings > Other Settings:
- Scripting Backend: IL2CPP
- Target Architectures: ARM64
- Graphics APIs: Vulkan, OpenGLES3 (in order of preference)
- Minimum API Level: 29
4. Check "Export Project"
5. Click Export and select output folder (e.g., `D:\Dev\Mosis\Builds\Unity\Android\MosisVR`)
```batch
"C:\Program Files\Unity\Hub\Editor\6000.3.2f1\Editor\Unity.exe" ^
-batchmode -quit -nographics ^
-projectPath "D:\Dev\Mosis\MosisVR" ^
-executeMethod BuildScript.BuildAndroidDirectCI ^
-outputPath "D:\Dev\Mosis\Builds\Unity\Android\MosisVR.apk" ^
-logFile "D:\Dev\Mosis\Builds\Unity\build.log"
```
### Build Gradle Project
Or from Unity Editor: **Build > Build Android APK (Direct)**
After exporting from Unity:
### Option 2: Export + Gradle Build
Export a Gradle project for more control over the build process:
**Step 1: Export from Unity**
```batch
"C:\Program Files\Unity\Hub\Editor\6000.3.2f1\Editor\Unity.exe" ^
-batchmode -quit -nographics ^
-projectPath "D:\Dev\Mosis\MosisVR" ^
-executeMethod BuildScript.BuildAndroidCI ^
-export true ^
-outputPath "D:\Dev\Mosis\Builds\Unity\Android\MosisVR" ^
-logFile "D:\Dev\Mosis\Builds\Unity\build.log"
```
Or from Unity Editor: **Build > Export Android Project**
**Step 2: Build with Gradle**
```batch
cd D:\Dev\Mosis\Builds\Unity\Android\MosisVR
gradle assembleRelease
@@ -76,20 +91,21 @@ gradle assembleRelease
Or open in Android Studio and build from there.
### Command Line Export (Optional)
### Unity Editor Manual Build
```batch
"C:\Program Files\Unity\Hub\Editor\6000.3.2f1\Editor\Unity.exe" ^
-batchmode -quit -nographics ^
-projectPath "D:\Dev\Mosis\MosisVR" ^
-executeMethod BuildScript.BuildAndroidCI ^
-outputPath "D:\Dev\Mosis\Builds\Unity\Android\MosisVR" ^
-logFile "D:\Dev\Mosis\Builds\Unity\build.log"
```
1. File > Build Settings
2. Switch Platform to Android
3. Player Settings > Other Settings:
- Scripting Backend: IL2CPP
- Target Architectures: ARM64
- Graphics APIs: Vulkan, OpenGLES3 (in order of preference)
- Minimum API Level: 29
4. For direct APK: Uncheck "Export Project", click Build
5. For export: Check "Export Project", click Export
### Native Plugin Build (Manual)
To rebuild the native library manually:
The native plugin is built automatically during Unity's build process via CMake. To rebuild manually:
```batch
cd Packages/com.omarator.mosissdk/Plugins/Android/cpp
@@ -166,10 +182,11 @@ The native plugin automatically selects the appropriate backend:
|--------------|---------|--------|
| Vulkan | VulkanTextureBackend | Preferred |
| OpenGL ES 3.0 | OpenGLTextureBackend | Fallback |
| OpenGL ES 2.0 | OpenGLTextureBackend | Fallback |
Backend selection happens in `UnityPluginLoad()` based on the active renderer.
Note: Unity 6 requires OpenGL ES 3.0 minimum. OpenGL ES 2.0 is not supported.
### Vulkan Import
When using Vulkan, the plugin imports AHardwareBuffer directly as a VkImage:
@@ -226,6 +243,28 @@ adb logcat -s Unity MosisSDK Vulkan
- Check XR input device selection matches controller
- Test with mouse click fallback in editor
### Build Fails with "glad/gles2.h not found"
This error occurs when IL2CPP tries to compile native plugin C++ files. The `.meta` files for the cpp/h files must have `PluginImporter` settings with `enabled: 0` for all platforms to exclude them from IL2CPP.
**Solution**: Ensure all `.meta` files in `Plugins/Android/cpp/` have proper PluginImporter exclusion settings:
```yaml
PluginImporter:
platformData:
Android:
enabled: 0
Any:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 1
# ... exclude all platforms
```
### Build Fails with "getSdkDir() not found"
The `mainTemplate.gradle` must use `System.getenv("ANDROID_HOME")` instead of `getSdkDir()` for the ANDROID_SDK cmake argument. Ensure `ANDROID_HOME` environment variable is set.
## Implementation Notes
### Files Modified in Vulkan Implementation
@@ -249,3 +288,4 @@ adb logcat -s Unity MosisSDK Vulkan
- **1.0.0** - Initial release with OpenGL support
- **1.1.0** - Added Vulkan backend, touch down/up events, dynamic resolution
- **1.2.0** - Fixed IL2CPP build compatibility, added direct APK build support, fixed mainTemplate.gradle for direct builds