Build Unity Library
Unity 2022.3.17f1 xảy ra lỗi AndroidJavaException: java.lang.NoSuchFieldError: no "Ljava/lang/Object;" field "mUnityPlayer" in class khi tích hợp vào ReactNative và Flutter, lỗi này đã được fix tại phiên bản Unity 2022.3.19f1
1. Chuẩn bị lib Android (bên Unity Project)
B1: Export Android Project từ Unity (chọn Exports từ Build Settings)
B2: Tìm tới file AndroidManifest.xml tại đường dẫn <build-folder>/unityLibrary/src/main, xoá phần <intent-filter> tới launcher của Unity
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN" />
</intent-filter>B3: Build Anddroid App Library bằng gradle
cd <build-folder>
export JAVA_HOME=<unity-folder>/PlaybackEngines/AndroidPlayer/OpenJDK
# build AAR file
gradle wrapper && ./gradlew assembleReleaseB4: Tạo thư mục <build-folder>/unityLibrary/build/unityLibrary. Copy/move các thành phần dưới đây vào thư mục vừa tạo
-
<build-folder>/unityLibrary/build/outputs/aar/unityLibrary-release.aar -
<build-folder>/unityLibrary/libs
B5: Tạo file <build-folder>/unityLibrary/build/unityLibrary/build.gradle với nội dung như sau:
configurations.maybeCreate("default")
artifacts.add("default", file("unityLibrary-release.aar"))File gửi đi bao gồm thư mục <build-folder>/unityLibrary/build/unityLibrary và nội dung trong thư mục này
2. Chuẩn bị lib iOS (bên Unity Project)
B1: Exports iOS Project từ Unity (chọn Exports từ Build Settings)
B2: Thực hiện đủ các cấu hình sau:
- Chuyển Target Membership của thư mục Data từ UnityProject sang UnityFramework
- Chuyển mức truy cập của file NativeCallProxy.h từ Project sang Public
- Trong Frameworks/Silver Tau/NSR/Runtime/Plugins/iOS xoá hết Target Membership ngoại trừ UnityFramework (thông thường xoá Unity-iphone)
- Remove bitcode StcCorder: bitcode_strip -r StcCorder.framework/StcCorder -o StcCorder.framework/StcCorder (ref: https://warchimede.com/posts/2024-10-08-how-to-remove-bitcode-from-framework/)
B3: Build framework và export XCFramework
xcodebuild archive -project "Unity-iPhone.xcodeproj" -scheme "UnityFramework" -configuration Release -destination generic/platform=iOS -archivePath "build/app.xcarchive" CODE_SIGNING_ALLOWED=NO SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild -create-xcframework -archive build/app.xcarchive -framework UnityFramework.framework -output build/UnityFramework.xcframeworkFile gửi đi bao gồm thư mục UnityFramework.framework và nội dung của thư mục này