본문 바로가기

관리 메뉴

[Unity] split application binary에서 Application.dataPath가져오기 본문

프로그래밍/ㄴ기타

[Unity] split application binary에서 Application.dataPath가져오기

최갓 2019. 7. 19. 18:50
반응형

Unity에선  split application binary 기능을 지원한다.

이 기능을 통해 기본 앱(APK)파일과 .obb확장 파일을 만들어 낼 수 있다.

 

하지만, Application.dataPath를 이용해 특정 경로에서 파일을 가져와 사용하는 

처리가 있다면 주의해야한다.

 

Unity Documentation에 다음과 같은 내용이 있다.

***

Android: Normally it would point directly to the APK. The exception is if you are running a split binary build in which case it points to the the OBB instead.

***

 

기본적으로 Android Platform에서 Application.dataPath를 통해 경로를 가져오면 앱의 소스경로(source dir)를 참조한다.

* source dir : jar:file:///data/app/com.pakage.name-numberindex/base.apk

 

하지만 OBB를 이용한 앱에서 Application.dataPath를 하면 해당 OBB파일이 Install되는 경로를 참조하게 된다.

* data dir : jar:file:///data/data/com.package.name

 

즉, OBB를 이용한 앱에서 Application.dataPath의 결과는 리소스경로(data dir)이 되는것이다.

 

이를 해결하기 위해 Unity내에서 지원하는 다양한 경로 참조 기능을 이용해보았지만, OBB형태의 앱에선

기본적으로 무조건 리소스경로를 참조하게 되는 것 같다. (정확하지 않습니다)

 

 

본론으로 들어가, Split application binary옵션을 사용한 Unity Android 앱에서 

해당 옵션을 사용하지 않았을 때와 같은 결과를 얻고싶다면 Android Native에서 다음의 경로를 얻어오도록 하면 된다.

 

 

//Java (Android)
//Unity OBB Build, Get the same result of Application.dataPath

PackageManager m = getPackageManager();
String s = getPackageName();
PackageInfo p = m.getPackageInfo(s, 0);
s = p.applicationInfo.sourceDir;

 

Unity에서 JavaStatic객체를 생성해, 위 코드의 s값을 참조해보자

그럼 Split Application Binary를 사용하지 않았을 때 Application.dataPath에서 리턴해주는 값과 같은 값을 정상적으로 가져올 수 있는 걸 확인할 수 있다. 

 

 

 

- 참고 : https://stackoverflow.com/questions/5527764/get-application-directory

반응형
Comments