sloway / UAALWorkout

0 stars 0 forks source link

UAAL with Import Module On Android #2

Open sloway opened 2 years ago

sloway commented 2 years ago

Unity app 을 Android project 에서 실행하도록 할 때 추천 하는 방식은 이렇다고 한다.

여기서는 우선 import module 로 시작한다

sloway commented 2 years ago

Import module

image image

UAALExportedUnityProjectOnAndroid 를 설정한다

image image app project 가 unity project 를 참조하도록 dependency를 설정한다

여기까지 하면 unityLibrary module 이 추가된다. 원래 module 위치를 참조하나 했더니 그게 아니고 통채로 복사한다.

sloway commented 2 years ago

Gradle build error 잡기

아직 UnityPlayerActivity 를 설정하지도 않았는데 참 다양한 build error 가 발생했다. 발생 할 때마다 기록을 했어야했는데 마음이 급해서 그러지는 못하고 기억나는대로 지금 기록한다.

Gradle 설정

이건 바꾼건 아니지만 기록 삼아서... image

exported 설정

이건 아마 gradle version 에 따라 다를텐데 어느 버전 이상으로 가면 activity 마다 exported 설정을 해야한다고 한다. unityLibrary 에는 그게 안되어 있어서 AndroidManifest.xml 에서 그 부분 추가해줬다

// 맨 마지막에 exported attribute 추가해줬다
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:resizeableActivity="false" android:hardwareAccelerated="false" android:exported="true">

ndk path

이걸 몰라서 한참 헤맸다. 아무리 SDK Manager를 통해서 ndk 를 설치해줘도 계속 없다고... 참고로 il2cpp 때문에 NDK 가 필요하다. java나 kt 만 있었으면 안필요했겠지... image 저 값이 비어있었다 그래서 설정을 하려고 하니 저 창에서는 설정 불가 image local.properties 에 ndk.dir 을 추가해줬다. android ndk 사용 할 줄 알았는데, Unity 의 NDK 를 사용했다. 생각해보면 이게 맞긴 맞는듯....

StreamingAsset 관련 설정

이런 Error 도 발생했다.

Error: Could not get unknown property ‘unityStreamingAssets’ for object of type com.android.build.gradle.internal.dsl.AaptOptions.

gradle.properties 에 한줄 추가해서 해결은 했다. 하지만 정확히 무슨 의미인지는 잘...

unityStreamingAssets=.unity3d, google-services-desktop.json, google-services.json, GoogleService-Info.plist

여기까지 해서 Gradle build error 는 없어졌던 것 같다

sloway commented 2 years ago

UnityPlayerActivity 적용

UnityActivity에 UnityPlayerActivity 적용

별거 없다 딱 이거만 있으면 됨

public class UnityActivity extends UnityPlayerActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("Unity", "This is unity activity");
    }
}

dependencies 추가

IUnityPlayerLifecycleEvents 를 찾을 수 없다는 에러가 나와서 (이 파일은 unity-classes.jar 에 있다) 아래 라인 추가

// build.gradle of app
dependencies {
    implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])   // 이거

여기까지 하면 project build 까지 되고 app 실행이 된다... 하지만....

sloway commented 2 years ago

실행하자마자 죽는 에러 수정

App 실행 후 UnityPlayerActivity 에 진입하면 죽는다.... 에러 메세지는 대략 이렇다.

android.content.res.Resources$NotFoundException: String resource ID #0x0 

이거만 보면 무슨 말인지 감도 안온다... 하지만 잘 찾아보니... 참 허접하게도 string resource 가 없어서란다. 이런건 Unity가...참... 좀... 그렇다... 이런거 예외처리도 안해놓다니.... 아무튼 string.xml 에 아래 내용 추가하면 된다

<string name="game_view_content_description">Game view</string>

여기까지 하고나니... 원하는대로 실행이 된다....

정리는 간단하게만 했지만 무한한 Trial and Error 의 반복... 아 힘들다...

그래도 aar 로 추가하는 것 까지는 해놔야 마움이 편할듯...