인프런 커뮤니티 질문&답변
구글로그인 인증 에러 문제 살려주세요 ㅠㅠ
해결된 질문
작성
·
70
0
DllNotFoundException: Unable to load DLL 'native-googlesignin'. Tried the load the following dynamic libraries: Unable to load dynamic library 'native-googlesignin' because of 'Failed to open the requested dynamic library
처음에 강의를 따라하다가 에러가 떠서 Q&A내용들 확인하고 동일한 에러가 있는걸 발견하고 따라했습니다.
https://github.com/googlesamples/google-signin-unity/issues/106
이 깃허브 내용도 확인했습니다.
깃허브 및 Q&A 내용대로
1.srcarr -> arr로 변경하고
2. .arr파일에서 android 체크
edm4u resolve (깃허브에는 ./Plugins/Andoid/ 산하에 .jar파일들이 생성된다고했는데 전 안됬습니다.)
진행했습니다.
그러니까 이번에는 로그캣에 61페이지 분량 크래시 로그가뜨면서 종료되는데 혹시 어떻게 해봐야할까요?
2025-10-08 23:26:35.716 21847 21879 Fatal tSoft.MyProject java_vm_ext.cc:616] JNI DETECTED ERROR IN APPLICATION: mid == null
2025-10-08 23:26:35.716 21847 21879 Fatal tSoft.MyProject java_vm_ext.cc:616] in call to CallStaticVoidMethodV
2025-10-08 23:26:35.716 21847 21879 Fatal tSoft.MyProject java_vm_ext.cc:616] from boolean com.unity3d.player.UnityPlayer.nativeRender()
2025-10-08 23:26:35.776 21847 21879 Warn tSoft.MyProject sched_getscheduler(22014): No such process
2025-10-08 23:26:35.776 21847 21879 Warn tSoft.MyProject sched_getparam(22014, &sp): No such process
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] Runtime aborting...
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] Dumping all threads without mutator lock held
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] All threads:
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] DALVIK THREADS (41):
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] "main" prio=10 tid=1 Native
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] | group="" sCount=1 ucsCount=0 flags=1 obj=0x72cfd3a8 self=0xb4000079b91d37b0
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] | sysTid=21847 nice=-10 cgrp=top-app sched=0/0 handle=0x7c82484d28
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] | state=S schedstat=( 334617993 29619772 266 ) utm=22 stm=11 core=6 HZ=100
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] | stack=0x7fcbb05000-0x7fcbb07000 stackSize=8188KB
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] | held mutexes=
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] native: #00 pc 000bd788 /apex/com.android.runtime/lib64/bionic/libc.so (__epoll_pwait+8) (BuildId: 3549de9a967b5089252c4ca16436800c)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] native: #01 pc 00010fa0 /system/lib64/libutils.so (android::Looper::pollOnce+216) (BuildId: 880c071958aa3788bc08025b2e2bae17)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] native: #02 pc 0018e6b4 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce+44) (BuildId: 2e949cb5813b36a6c68d06191a1b108e)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] at android.os.MessageQueue.nativePollOnce(Native method)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] at android.os.MessageQueue.next(MessageQueue.java:346)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] at android.os.Looper.loopOnce(Looper.java:214)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] at android.os.Looper.loop(Looper.java:342)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] at android.app.ActivityThread.main(ActivityThread.java:9634)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] at java.lang.reflect.Method.invoke(Native method)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:619)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709]
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] "FinalizerDaemon" prio=5 tid=6 Waiting
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] | group="" sCount=1 ucsCount=0 flags=1 obj=0x2b40378 self=0xb4000079b91d5380
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] | sysTid=21854 nice=4 cgrp=top-app sched=0/0 handle=0x793cf585f0
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] | state=S schedstat=( 3540231 0 2 ) utm=0 stm=0 core=3 HZ=100
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] | stack=0x793cb55000-0x793cb57000 stackSize=4109KB
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] | held mutexes=
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] native: #00 pc 0008029c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28) (BuildId: 3549de9a967b5089252c4ca16436800c)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] native: #01 pc 00201230 /apex/com.android.art/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks+136) (BuildId: eb4ec0f1d1c7267591d83fa87cb36390)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] native: #02 pc 004af4ec /apex/com.android.art/lib64/libart.so (art::Monitor::Wait+1088) (BuildId: eb4ec0f1d1c7267591d83fa87cb36390)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] at java.lang.Object.wait(Native method)
2025-10-08 23:26:35.901 21847 21879 Fatal tSoft.MyProject runtime.cc:709] - waiting on <0x0654f29f> (a java.lang.Object)
답변 2
0
안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다.
크래시는 Firebase SDK 버전 문제로 추측됩니다. 현재 사용하시는 유니티 버전과 Firebase SDK 버전이 어떻게 되시는지 공유 부탁 드립니다.
혹시 정확히 어느 시점에서 크래시가 발생했는지 알 수 있을까요? Firebase를 초기화할 때 크래시가 났다든가, FirebaseManager 스크립트에서 정확히 어떤 함수를 호출할 때 크래시가 난다든가 등의 정보가 있으면 디버깅하기 수월할 것 같습니다. 일단 제가 찾은 해결 방법 두가지가 있기는 한데 확실한 해결방법이 될 진 모르겠습니다.
AndroidManifest.xml에서
android:exported="true"확인Android 12 이상에서는 이 속성이 누락되면 앱이 실행되지 않거나 Firebase 초기화에 실패할 수 있음.
Firebase 초기화 시점 변경
Start()또는Awake()에서 바로 초기화하지 말고, 1~2초 있다가 초기화.
초기화되고 RemoteConfig로 버전확인하고 인증을 요청하는 부분에서 바로 크래시가 납니다.
public void SignInWithGoogle(Action OnAfterSignAction)
{
try
{
Debug.Log($"Google Signing : CreateConfig");
GoogleSignIn.Configuration = m_GoogleSignInConfiguration;
Debug.Log($"Google Signing : {m_GoogleSignInConfiguration.AccountName}, {m_GoogleSignInConfiguration.WebClientId}");
// 1. Config파일 기반으로 로그인 요청
// - 로그인 결과로 계정 정보를 task형태 콜백으로 반환받음.
Debug.Log($"Google Signing : Send Request");
GoogleSignIn.DefaultInstance.SignIn().ContinueWithOnMainThread(task =>
{
Debug.Log($" Google Signing : Get Response ");
// 2. 로그인 실패 확인
if (task.IsCanceled || task.IsFaulted)
{
if (task.IsCanceled)
{
Logger.LogError($"SignInWithGoogle was canceled.");
}
else if (task.IsFaulted)
{
Logger.LogError($"SignInWithGoogle encountered an error: {task.Exception}");
}
return;
}
Debug.Log($" Google Signing : Login Success ");
// 3. 로그인 성공시 Firebase Auth 진행
// 3-1. 자격증명 토큰 GET
Debug.Log($" Google Signing : Create Tokken1");
GoogleSignInUser googleUser = task.Result;
Debug.Log($" Google Signing : Create Tokken2");
Credential credential = GoogleAuthProvider.GetCredential(googleUser.IdToken, null);
Debug.Log($" Google Signing : Create Tokken3");
// 3-2. 자격증명 토큰으로 Firebase Auth 진행
Debug.Log($"Google Signing :Start Firebase Auth");
m_Auth.SignInWithCredentialAsync(credential).ContinueWithOnMainThread(authTask =>
{
Debug.Log($"Google Signing : Auth Return");
// 3-3. Auth 인증 실패 확인
if (authTask.IsCanceled || authTask.IsFaulted)
{
if (authTask.IsCanceled)
{
Logger.LogError($"SignInWithCredentialAsync was canceled.");
}
else if (authTask.IsFaulted)
{
Logger.LogError($"SignInWithCredentialAsync encountered an error: {authTask.Exception}");
}
return;
}
Debug.Log($"Google Signing : Auth Success");
// 3-3. Auth인증 성공시 결과 저장
m_FirebaseUser = authTask.Result;
Logger.Log($"User signed in successfully: {m_FirebaseUser.DisplayName} ({m_FirebaseUser.UserId})");
Debug.Log($"Google Signing : Auth Success2");
// 3-4. 캐시값 및 데이터 저장.
HasSignedInWithGoogle = true;
HasSignedInWithApple = false;
//SaveData();
// 3-5. 모든 결과를 마쳤으므로 완료 콜백 호출
OnAfterSignAction?.Invoke();
});
});
}
catch (Exception e)
{
Logger.LogError($" Try-Catch : Exception in SignInWithGoogle: {e}");
}
}
Debug.Log($"Google Signing : Send Request");이 부분까지만 찍히고 그 후에 바로 크래시가 납니다.
에디터에서 테스트가안되는게 너무 힘드네요..ㅠㅠ
네 공유 감사합니다. 그럼 정확히 에러가 나는 부분은 GoogleSignIn.DefaultInstance.SignIn().ContinueWithOnMainThread 라고 볼 수 있겠네요.
뭔가 GoogleSignIn이 제대로 초기화가 안되서 그런게 아닌가 싶습니다. 아래 2가지 확인 좀 부탁 드립니다.
GoogleSignIn.Configuration 제대로 설정되었는지 확인
m_GoogleSignInConfiguration = new GoogleSignInConfiguration
{
WebClientId = GOOGLE_WEB_CLIENT_ID,
RequestIdToken = true
};제대로 설정되었다면 SignIn 전에 SignOut 먼저 호출 해보기(Signout 일단 호출하고 그 다음에 SignIn 호출)
원래 이런 SDK 연동 및 구현이 실제 개발에서 제일 끈기를 요하는 부분입니다. 매번 빌드해서 확인해야 하기 때문입니다. 하지만 이겨내셔야 합니다.😢
private void InitAuth()
{
m_Auth = FirebaseAuth.DefaultInstance;
if (m_Auth == null)
{
Logger.Log($"FirebaseApp initialization failed. FirebaseAuth is null");
return;
}
m_Auth.StateChanged += OnAuthStateChanged;
Debug.Log("Google Sing: Init Config");
m_GoogleSignInConfiguration = new GoogleSignInConfiguration
{
WebClientId = GOOGLE_WEB_CLIENT_ID,
RequestIdToken = true
};
Debug.Log($"Google Sing: Init Conifg Comptete/ WebClientID ::: {m_GoogleSignInConfiguration.WebClientId} / RequestIdToken ::: {m_GoogleSignInConfiguration.RequestIdToken}");
m_IsAuthInit = true;
}
public void SignOut()
{
Debug.Log($"Google Sing: FireBaseUser :::: {m_FirebaseUser == null} ");
if (m_FirebaseUser != null)
{
Debug.Log($"Google Sing: AuthSignOut Start ");
m_Auth.SignOut();
Logger.Log($"User signed out successfully.");
Debug.Log($"Google Sing: AuthSignOut End ");
}
}
public void SignInWithGoogle(Action OnAfterSignAction)
{
try
{
Debug.Log($"Google Signing : CreateConfig");
GoogleSignIn.Configuration = m_GoogleSignInConfiguration;
Debug.Log($"Google Sing: Init Conifg Comptete/ WebClientID ::: {GoogleSignIn.Configuration.WebClientId} / RequestIdToken ::: {GoogleSignIn.Configuration.RequestIdToken}");
Debug.Log($"Google Sing: Start Sign Out ");
SignOut();
Debug.Log($"Google Sing: End Sign Out ");
// 1. Config파일 기반으로 로그인 요청
// - 로그인 결과로 계정 정보를 task형태 콜백으로 반환받음.
Debug.Log($"Google Signing : Send Request");
GoogleSignIn.DefaultInstance.SignIn().ContinueWithOnMainThread(task =>
{
Debug.Log($" Google Signing : Get Response ");
// 2. 로그인 실패 확인
if (task.IsCanceled || task.IsFaulted)
{
if (task.IsCanceled)
{
Logger.LogError($"SignInWithGoogle was canceled.");
}
else if (task.IsFaulted)
{
Logger.LogError($"SignInWithGoogle encountered an error: {task.Exception}");
}
return;
}
Debug.Log($" Google Signing : Login Success ");
// 3. 로그인 성공시 Firebase Auth 진행
// 3-1. 자격증명 토큰 GET
Debug.Log($" Google Signing : Create Tokken1");
GoogleSignInUser googleUser = task.Result;
Debug.Log($" Google Signing : Create Tokken2");
Credential credential = GoogleAuthProvider.GetCredential(googleUser.IdToken, null);
Debug.Log($" Google Signing : Create Tokken3");
// 3-2. 자격증명 토큰으로 Firebase Auth 진행
Debug.Log($"Google Signing :Start Firebase Auth");
m_Auth.SignInWithCredentialAsync(credential).ContinueWithOnMainThread(authTask =>
{
Debug.Log($"Google Signing : Auth Return");
// 3-3. Auth 인증 실패 확인
if (authTask.IsCanceled || authTask.IsFaulted)
{
if (authTask.IsCanceled)
{
Logger.LogError($"SignInWithCredentialAsync was canceled.");
}
else if (authTask.IsFaulted)
{
Logger.LogError($"SignInWithCredentialAsync encountered an error: {authTask.Exception}");
}
return;
}
Debug.Log($"Google Signing : Auth Success");
// 3-3. Auth인증 성공시 결과 저장
m_FirebaseUser = authTask.Result;
Logger.Log($"User signed in successfully: {m_FirebaseUser.DisplayName} ({m_FirebaseUser.UserId})");
Debug.Log($"Google Signing : Auth Success2");
// 3-4. 캐시값 및 데이터 저장.
HasSignedInWithGoogle = true;
HasSignedInWithApple = false;
//SaveData();
// 3-5. 모든 결과를 마쳤으므로 완료 콜백 호출
OnAfterSignAction?.Invoke();
});
});
}
catch (Exception e)
{
Logger.LogError($" Try-Catch : Exception in SignInWithGoogle: {e}");
}
}
테스트한 코드 상태는 이렇고 GoogleSignIn.Configuration확인(1), SingOut(2) 먼저호출 이 순으로 해보고 해도 똑같은 부분에서 문제가 발생하네요.
어째 하면할수록 더 멘붕이네요
이게 로그를 좀 살펴보니 Firebase SDK나 google-sign-in 패키지 문제인지 아니면 다른 문제인지 잘 모르겠습니다….
현재 프로젝트는 용량 문제로 Addressable과 PAD로 .ABB파일을 빌드하고 있습니다.
그래서 강의에서 설치한 SDK외에도 이 두 패키지가 더 설치되어있습니다.
우선 제 생각에는 문제가 google-sign-in 문제거나 아니면 Addressable+PAD 조합의 문제로 sdk나 내부 경로를 못찾아 문제가 발생하는것같습니다
혹시 이런 경우에는 어떤 부분들을 확인해봐야할까요?


혹시 디스코드나 메일같은게 있으시면 로그캣을 한번 전체 보내봐드려도 괜찮을까요?
일단 이거 하나만 더 해보시겠어요?
AndroidManifest.xml 파일에서 tools:node="replace" 이 부분이 있으면 삭제하고 빌드해서 테스트 부탁 드립니다. 그래도 해결이 안되면 burningcarrotstudio@gmail.com으로 FirebaseManager.cs 파일 전체랑 로그캣 로그 전부 메일로 보내주세요.
일단 이 문제에 대해서 해결이 되었고, 동일한 문제를 겪으실 분들이 있을것같아 내용 공유드립니다.
제 케이스의 경우에는 유니티 빌드 옵션중에 Minify에서 Release를 체크했을 때 앱에서 GoogleSignIn패키지의 SignIn()함수를 호출하면 크래시가 났었습니다.
여러가지 테스트 후에 Release체크를 풀고 빌드하면 정상 작동 되는 것을 확인했고
Minify빌드옵션중에 Release로 빌드를 할 때 코드를 난독화하는 과정에서 매핑이 안됐었던것같습니다.
제 경우의 해결 방법으로는
여기 강의 질문글에 올라온 다른 비슷한 증상들의 해결법들 모두 적용.
패키지 및 외부 SDK들을 정상 설치한 상태에서 EDM4U의 Force Resolve로 종속성 정리
프로젝트 세팅에서 Custom Proguard 사용 설정하고 아래 코드 추가
-keep class com.google.googlesignin.** { *; }Aab 파일 빌드 후에 MappingContext.txt, 디버깅 심볼 수동으로 플레이 콘솔에 업로드.
이 과정으로 해결됬습니다. 도움을 주신 BurningCarrot님 감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. 토토톱님.
Google 로그인과 관련하여 발생한 DllNotFoundException과 그로 인한 크래시 문제에 대해 설명드리겠습니다. 이러한 문제는 종종 라이브러리의 경로나 빌드 설정과 관련이 있습니다. 아래는 이를 해결하기 위해 시도해볼 수 있는 단계입니다:
해결 방법:
EDM4U(External Dependency Manager for Unity) 설정 확인:
edm4u를 사용하여 모든 의존성이 올바르게 해결되었는지 확인해보세요. External Dependency Manager로Resolve를 다시 시도하여 관련 라이브러리가 설치되었는지 점검하세요.
플랫폼별 설정 확인:
- Unity Editor의
File > Build Settings에서 현재 플랫폼이 Android로 설정되어 있는지 확인해주세요. 그리고Player Settings>Publishing Settings>ARCore"를 “Required”로 설정해 보세요.
- Unity Editor의
Android NDK 및 SDK 확인:
- Android용 NDK 및 SDK가 제대로 설치되어 있는지 확인하세요. NDK가 없는 경우 Unity Hub를 통해 설치해주시기 바랍니다.
- Unity 버전에 맞는 NDK 버전을 사용해야 할 수 있습니다. Unity의 설명서를 참조하여 해당 정보에 대해 확인하세요.
- Android용 NDK 및 SDK가 제대로 설치되어 있는지 확인하세요. NDK가 없는 경우 Unity Hub를 통해 설치해주시기 바랍니다.
JNI Error (java_vm_ext.cc 관련):
- 이 문제는 Android 스튜디오에서 발생할 수도 있으며, 호출하려는 메서드가 존재하지 않을 때 발생합니다. 코드 상에서 JNI 호출을 올바르게 설정했는지 확인해주세요.
- Google Sign-In API 문서를 참고해 설정이 모두 올바르게 구성되어 있는지 확인하세요. 특히
AndroidJavaObject를 사용할 때 적절한 방향으로 객체가 초기화되고 있는지 점검합니다.
- 이 문제는 Android 스튜디오에서 발생할 수도 있으며, 호출하려는 메서드가 존재하지 않을 때 발생합니다. 코드 상에서 JNI 호출을 올바르게 설정했는지 확인해주세요.
기존 유사 질문 및 해결 사례 참고:
- 비슷한 문제를 해결한 사례를 참고하시면 좋습니다. 예를 들어, GitHub 이슈나 인프런 강의 Q&A 섹션에서 다른 사용자의 경험을 확인하실 수 있습니다.
- 비슷한 문제를 해결한 사례를 참고하시면 좋습니다. 예를 들어, GitHub 이슈나 인프런 강의 Q&A 섹션에서 다른 사용자의 경험을 확인하실 수 있습니다.
위의 사항을 하나씩 점검하면서 문제를 해결해 보시길 권장드립니다. 만약 이 방법들로도 문제가 해결되지 않는다면, 빌드 환경이나 Google Sign-In의 다른 설정을 재검토하셔야 할 수도 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





유니티는 현재 2022.3.62f2버전을 사용하고 있습니다.
Analytics/Auth/Firestore/RemoteConfig 모두 13.3.0 버전입니다.
Google-Sign-in은 1.0.4 버전입니다.