Hướng dẫn cài đặt XenseAR SDK cho Flutter Android
- Copy XenseAR SDK vào thư mục
<flutter root>/android/unityLibrary/.
- File SDK có thể lấy từ Trang tải xuống.
- 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- 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.
- Kiểm tra version SDK tối thiểu của XenseAR Library trong Unity
// 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:!*~"
}
}- 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")- 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"))
}
}
}- 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>- Chỉnh sửa class
MainActivity.
-
Lớp
MainActivitythườ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ớpFlutterActivitythì chỉ cần thay lớp kế thừa làFakeUnityPlayerActivity(lớpFakeUnityPlayerActivitykế thừa từ lớpFlutterActivity):
// 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