Skip to Content
SDKSDKsXenseAR Native SDKFlutterHướng dẫn cài đặt XenseAR SDK cho Flutter Android

Hướng dẫn cài đặt XenseAR SDK cho Flutter Android

  1. Copy XenseAR SDK vào thư mục <flutter root>/android/unityLibrary/.
  1. Thêm package vào <flutter root>/pubspec.yaml
  • Thêm các package cần thiết:
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
  • Sau khi đã thêm, thực hiện download qua terminal:
flutter pub get
  1. Chỉnh sửa file <flutter root>/android/app/build.gradle.
  • Thêm XenseAR SDK vào danh sách Dependencies.
  • Chọn version NDK phù hợp với NDK được sử dụng bởi XenseAR Library.
  • Chọn version SDK tối thiểu bằng hoặc lớn hơn version SDK tối thiểu của XenseAR Library.
    • Kiểm tra version SDK tối thiểu của XenseAR Library trong Unity Player Setting.
// 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:!*~" } }
  1. Chỉnh sửa 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")
  1. Chỉnh sửa 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")) } } }
  1. Chỉnh sửa file <flutter root>/android/gradle.properties.
  • Thêm đường dẫn đến Streaming Assets:
unityStreamingAssets=<the value shown in the Unity console log after export>
  1. Chỉnh sửa class MainActivity.
  • Lớp MainActivity thường được định nghĩa trong 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
  • Nếu lớp MainActivity được kế thừa từ lớp FlutterActivity thì chỉ cần thay lớp kế thừa là FakeUnityPlayerActivity (lớp FakeUnityPlayerActivity kế thừa từ lớp FlutterActivity):

// 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 MainActivity không được kế thừa từ lớp FlutterActivity:
    • Hãy cho lớp MainActivity triển khai interface IFakeUnityPlayerActivity.
    • Trong lớp MainActivity tạo thêm trường mUnityPlayer.
      • mUnityPlayer có kiểu Object trong Java.
      • mUnityPlayer có kiểu Any? trong Kotlin.
    • Giá trị trường mUnityPlayer được đặt qua hàm của interface.
// 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