UE5 Android Build에서 rebuild없이 UECommandLine.txt override 하기
Android Build를 뽑았을 때 UECommandLine.txt는 apk안 assets 폴더 안에 있다.
만일 apk안에서 UECommandLine.txt을 수정한다면 apk에 signing을 다시 해야할 것이고, 에디터에서 수정한다면 다시 빌드 및 설치해야하므로 번거롭다.
에픽에서는 안드로이드 외부 저장소의 개별 앱 공간 특정 경로안에서 UECommandLine.txt를 먼저 찾고, 없으면 apk안 UECommandLine.txt를 찾도록 만들어두었다.
안드로이드 저장소에 관해서는 링크 를 참조하면 좋다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// /Engine/Build/Android/Java/src/com/epicgames/unreal/GameActivity.java.template
// 에서 UECommandLine.txt 를 찾아서 읽는 부분
// ...
public void ParseCommandline(String ProjectName, boolean bUseExternalFilesDir)
{
// ...
// bUseExternalFilesDir는 AndroidManifest.xml에 meta-data tag중 com.epicgames.unreal.GameActivity.bUseExternalFilesDir의 값으로 세팅된다. 기본값은 true인듯?
BufferedReader reader = null;
// determine the proper place to look for UECommandLine.txt as override outside APK
// sdcard 경로 다만 android 10부터 이용할 수 없다.
String BaseDirectory = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
if (bUseExternalFilesDir)
{
// 개별 앱 공간 {sdcardpath}/Android/data/{app package name}
BaseDirectory = getExternalFilesDir(null).getAbsolutePath();
if (nativeIsShippingBuild())
{
BaseDirectory = getFilesDir().getAbsolutePath();
}
}
// first look for an override in the project directory
String filename = BaseDirectory + "/UnrealGame/" + ProjectName + "/UECommandLine.txt";
reader = TryOpenFileReader(filename);
if (reader == null)
{
filename = BaseDirectory + "/UnrealGame/" + ProjectName + "/uecommandline.txt";
reader = TryOpenFileReader(filename);
}
// then look in assets in APK
if (reader == null)
{
try
{
InputStream stream = AssetManagerReference.open("UECommandLine.txt");
reader = new BufferedReader(new InputStreamReader(stream));
Log.debug("Using APK commandline");
}
catch (FileNotFoundException fe)
{
}
catch (IOException ie)
{
}
} else {
Log.debug("Using commandline from: " + filename);
}
// ...
}
// ...
코드를 보면 {BaseDirectory}/UnrealGame/{ProjectName}/UECommandLine.txt를 먼저 찾는 것을 알 수 있다.
BaseDirectory는 안드로이드 버전이나 기기에 따라 다를 수 있지만 대체로 /storage/emulated/0/Android/data/{apk package name}/files 이 될 것 이다.
해당 경로에 UECommandLine.txt 파일을 복사해준다.
로그에서 commandline이 변경된 걸 확인할 수 있다.
This post is licensed under CC BY 4.0 by the author.