XenseAR SDK Installation Guide for Flutter Android
1. Copy XenseAR SDK
Copy the XenseAR SDK into the following directory:
<flutter root>/android/unityLibrary/
- The SDK package can be downloaded from the Download Page.
2. Add Dependencies
Add the required packages to:
<flutter root>/pubspec.yaml
- Add the necessary dependencies:
dependencies:
# Thêm hai package này vào danh sách
flutter_embed_unity: ^1.4.0
flutter_embed_unity_6000_0_android: ^1.2.3- After adding the dependencies, run the following command in the terminal to download the packages:
flutter pub get3. Update Android Build Configuration
Edit the following file:
<flutter root>/android/app/build.gradle
- Add the XenseAR SDK to the
dependenciessection. - Set the appropriate NDK version compatible with the XenseAR Library.
- Ensure the
minSdkVersionis equal to or higher than the minimum SDK version required by the XenseAR Library.- Check the minimum SDK version of the XenseAR Library in Unity under
Player Settings.
- Check the minimum SDK version of the XenseAR Library in Unity under
// Syntax for android/app/build.gradle
android {
...
// Change ndkVersion to minimum supported by Unity:
ndkVersion "27.2.12479018" // For Unity 6000.0
...
defaultConfig {
...
// Make sure minSdkVersion is equal to or higher than the minimum supported by your Unity project
minSdkVersion 26
targetSdkVersion 35
}
...
buildTypes {
release {
...
// Prevent R8 from stripping Unity classes
minifyEnabled false
shrinkResources false
}
}
...
dependencies {
...
implementation project(':unityLibrary')
}
...
androidResources {
ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~"
noCompress = ['.unity3d', '.ress', '.resource', '.obb', '.bundle', '.unityexp'] + unityStreamingAssets.tokenize(', ')
}
}// Alternative syntax for android/app/build.gradle.kts
android {
...
// Change ndkVersion to minimum supported by XenseAR Library:
ndkVersion = "27.2.12479018"
...
defaultConfig {
...
// Make sure minSdk is equal to or higher than the minimum supported by XenseAR Library
minSdk = 26
targetSdk = 35
}
...
buildTypes {
release {
...
// Prevent R8 from stripping Unity classes
isMinifyEnabled = false
isShrinkResources = false
}
}
...
dependencies {
...
implementation(project(":unityLibrary"))
}
...
androidResources {
// Read unityStreamingAssets from gradle.properties
val unityStreamingAssetsList = (project.findProperty("unityStreamingAssets") as? String)
?.split(",")
?.map { it.trim() }
?: emptyList()
noCompress += listOf(
".unity3d", ".ress", ".resource", ".obb", ".bundle", ".unityexp"
) + unityStreamingAssetsList
ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~"
}
}4. Edit file <flutter root>/android/settings.gradle.
// Syntax for android/settings.gradle
include ':unityLibrary'
include ':unityLibrary:xrmanifest.androidlib'// Alternative syntax for android/settings.gradle.kts
include(":unityLibrary")
include(":unityLibrary:xrmanifest.androidlib")5. Edit file <flutter root>/android/build.gradle.
// Syntax for android/build.gradle
allprojects {
repositories {
google()
mavenCentral()
// Add this:
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
}
}// Alternative syntax for build.gradle.kts
allprojects {
repositories {
google()
mavenCentral()
// Add this:
flatDir {
dirs(file("${project(":unityLibrary").projectDir}/libs"))
}
}
}6. Edit file <flutter root>/android/gradle.properties.
- Add path to
Streaming Assets:
unityStreamingAssets=<the value shown in the Unity console log after export>7. Edit class MainActivity.
-
Class
MainActivityis define in file:<flutter project>\android\app\src\main\kotlin\com\<your org>\MainActivity.kt<flutter project>\android\app\src\main\java\com\<your org>\MainActivity.java
-
If
MainActivityextendFlutterActivity, change extended class toFakeUnityPlayerActivity(FakeUnityPlayerActivityextendFlutterActivity):
// Syntex for MainActivity.kt
import com.learntoflutter.flutter_embed_unity_android.unity.FakeUnityPlayerActivity
class MainActivity : FakeUnityPlayerActivity() {
...
}// Syntex for MainActivity.java
import com.learntoflutter.flutter_embed_unity_android.unity.FakeUnityPlayerActivity
public class MainActivity extends FakeUnityPlayerActivity {
...
}- Nếu lớp
MainActivitykhôngđược kế thừa từ lớpFlutterActivity:- Hãy cho lớp
MainActivitytriển khai interfaceIFakeUnityPlayerActivity. - Trong lớp
MainActivitytạo thêm trườngmUnityPlayer.mUnityPlayercó kiểuObjecttrongJava.mUnityPlayercó kiểuAny?trongKotlin.
- Giá trị trường
mUnityPlayerđược đặt qua hàm của interface.
- Hãy cho lớp
// Syntex for MainActivity.kt
import com.learntoflutter.flutter_embed_unity_android.unity.IFakeUnityPlayerActivity;
class MainActivity: IFakeUnityPlayerActivity {
// Don't change the name of this variable; referenced from native code
var mUnityPlayer: Any? = null
override fun setmUnityPlayer(mUnityPlayer: Any?) {
this.mUnityPlayer = mUnityPlayer
}
}// Syntex for MainActivity.java
import com.learntoflutter.flutter_embed_unity_android.unity.IFakeUnityPlayerActivity;
public class MainActivity implements IFakeUnityPlayerActivity {
// Don't change the name of this variable; referenced from native code
public Object mUnityPlayer;
@Override
public void setmUnityPlayer(Object mUnityPlayer) {
this.mUnityPlayer = mUnityPlayer;
}
}Last updated on