난 정말 최고야 멋있어
게임가디언 분석 1 본문
게임가디언에서는 어떻게 라이브러리를 불러올까
게임가디언의 네이티브 파일들은 assets/raw 경로에 chunkXXX 이런 식의 이름으로 존재한다
어떻게 불러 오는것인지 알아보았다
public static void initNative() {
char[] libs;
if (Build.VERSION.SDK_INT < 21) {
libs = new char[6];
libs[1] = LIB_X86_CLIENT;
libs[2] = LIB_ARM_V7A_CLIENT;
libs[3] = LIB_ARM_CLIENT;
libs[4] = LIB_X86_64_CLIENT;
libs[5] = 'r';
} else {
libs = new char[6];
libs[1] = LIB_X86_64_CLIENT;
libs[2] = LIB_X86_CLIENT;
libs[3] = 'r';
libs[4] = LIB_ARM_V7A_CLIENT;
libs[5] = LIB_ARM_CLIENT;
}
String dir2 = getDaemonDir();
int i = 0;
while (i < libs.length) {
if (i == 0) {
int j = 1;
while (true) {
if (j >= libs.length) {
break;
} else if (new File(dir2, libName(libs[j])).exists()) {
libs[0] = libs[j];
break;
} else {
j++;
}
}
if (libs[0] == 0) {
continue;
i++;
}
}
File lib = new File(dir2, libName(libs[i]));
if (!lib.isFile()) {
extractLib(libs[i]);
}
if (!lib.isFile()) {
Log.m4d("Not a file " + lib + ' ' + lib.getAbsolutePath());
i++;
} else {
try {
System.load(lib.getAbsolutePath());
try {
ProcessBuilder.loaded();
return;
} catch (Throwable e) {
Log.m7d("Failed check " + lib + ' ' + lib.getAbsolutePath(), e);
}
} catch (Throwable e2) {
Log.m7d("Failed load " + lib + ' ' + lib.getAbsolutePath(), e2);
}
}
}
}
File 클래스를 이용해 파일을 불러 온 다음에 System.load 를 이용하여 불러오는 것을 알 수있다
다시 생각해보면 lib 폴더에 없으니 당연히 System.loadlibrary 사용이 아니였을건데 ㅋㅋ
System.loadlibrary 만 알고 있던 나에게는 신기한 정보였다
자바 공부좀 하자 ㅋㅋ
참고로 System.load 는 lib 파일 이름만 입력해서 되는것이 아닌 절대 경로를 입력해주어야 한다고 한다