Преобразование проекта Unity Android Studio в динамическую функцию без необходимости копировать его активы в базовый проект с самого начала
Обычно нужно превратить его в библиотеку, чтобы встроить в другое приложение. Однако теперь я хочу вместо этого преобразовать его в динамическую функцию.
Я поместил это в манифест проекта Unity:
<dist:module
dist:onDemand="true"
dist:title="@string/title_gamejam_as_dynamic_feature">
<dist:fusing dist:include="true" />
</dist:module>
Кроме того, я закомментировал bundle{}
часть его файла Gradle. Если я не прокомментировал это, я получаю следующую ошибку:
Could not find method bundle() for arguments [build_9piysgasfu4pgl4v1ppx46cyn$_run_closure3$_closure12@44175a08] on object of type com.android.build.gradle.AppExtension.
Я также убедился, что UnityPlayerActivity
расширяется мой обычай AppCompatActivity
который использует SplitCompat.install(this)
[хотя это расширяется Activity
].
Сейчас моя проблема в том, что по какой-то причине Assets
в этом проекте Unity не зарегистрированы в базе APK, поэтому UnityPlayerActivity
заканчивается сбой при запуске.
Что я делаю неправильно?
РЕДАКТИРОВАТЬ: ошибка трассировки стека ниже:
01-15 03:48:18.343 15446-15522/? E/mono: The assembly mscorlib.dll was not found or could not be loaded.
01-15 03:48:18.343 15446-15522/? E/mono: It should have been installed in the `/data/app/test.com.ondemandtest-1/base.apk/assets/bin/Data/Managed/mono/4.5/mscorlib.dll' directory.
01-15 03:48:18.343 15446-15446/? E/CRASH: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
01-15 03:48:18.343 15446-15446/? E/CRASH: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-15 03:48:18.343 15446-15446/? E/CRASH: Build type 'Release', Scripting Backend 'mono', CPU 'armeabi-v7a'
01-15 03:48:18.343 15446-15446/? E/CRASH: Build fingerprint: 'Huawei/ALE-L21/hwALE-H:5.0.1/HuaweiALE-L21/C636B150:user/release-keys'
01-15 03:48:18.343 15446-15446/? E/CRASH: Revision: '0'
01-15 03:48:18.343 15446-15446/? E/CRASH: pid: 15446, tid: 15446, name: om.ondemandtest >>> test.com.ondemandtest <<<
01-15 03:48:18.343 15446-15446/? E/CRASH: r0 00000000 r1 ffc2fb10 r2 6f5aec60 r3 00000000
01-15 03:48:18.343 15446-15446/? E/CRASH: r4 ffc2fb10 r5 e22c0250 r6 00000000 r7 6f5aec60
01-15 03:48:18.343 15446-15446/? E/CRASH: r8 ffc2fad4 r9 ab3f7930 sl ffc2fa9f fp ffc2fa50
01-15 03:48:18.343 15446-15446/? E/CRASH: ip e1fafee8 sp ffc2fa40 lr e1fb0040 pc e1fafca8 cpsr 00003c56
01-15 03:48:18.343 15446-15446/? E/CRASH: backtrace:
РЕДАКТИРОВАТЬ 2:
При дальнейшей проверке я узнал, что mscorlib.dll
не в mono
.so файл, но папка Assets. копирование assets/bin/Data/...
проекта Unity в базовый проект (в тот же путь) работает... но это просто побеждает точку модульности.
Есть ли какой-нибудь способ, которым проект Unity может использовать активы, которые он приносит, без необходимости копировать его в Base APK перед развертыванием?
1 ответ
Unity ищет ваши
.dll
в base.apk, а это не то, что вам нужно, так как вы используете динамические функции
Я решил это, переопределив
getPackageCodePath()
моей UnityPlayerActivity примерно так:
override fun getPackageCodePath(): String {
return super.getPackageCodePath().replace("base.apk", "split_unity_module.apk")
}
PS : мой модуль называется
unity_module
так что имя .apk что-то вроде
split_{{your_module_name}}.apk