인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

Section 26 RtcEngine initialize 에러(해결은 했습니다!)

해결된 질문

작성

·

66

·

수정됨

0

채널 입장하고 권한 체크 후 앱이 꺼지고 Debug 콘솔에 아래 같은 로그가 뜨길래 한참 헤맸습니다.

코드 한 줄씩 지워가며 어디서 에러가 뜨는지 확인해보니 await engine!.initialize(RtcEngineContext(appId: appId,)); 코드가 들어가는 순간 앱이 꺼지더라구요

해당 부분을 집중해서 검색하다가 발견한 방법대로 RtcEngine 선언 부분에 late 를 넣어주니 앱이 꺼지지 않았습니다. 혹시 원인을 알 수 있을까요?

에러 로그

D/EGL_emulation( 2046): app_time_stats: avg=10745.24ms min=12.90ms max=31961.13ms count=3
D/nativeloader( 2046): Load /data/app/~~nTLNP9Bj_egzZU9DQGxSrQ==/com.example.video_call-LRfYUQJyccQppChea-IfMw==/lib/arm64/libAgoraRtcWrapper.so using ns clns-7 from class loader (caller=/data/app/~~nTLNP9Bj_egzZU9DQGxSrQ==/com.example.video_call-LRfYUQJyccQppChea-IfMw==/base.apk!classes2.dex): dlopen failed: empty/missing DT_HASH/DT_GNU_HASH in "/data/app/~~nTLNP9Bj_egzZU9DQGxSrQ==/com.example.video_call-LRfYUQJyccQppChea-IfMw==/lib/arm64/libAgoraRtcWrapper.so" (new hash type from the future?)
E/AndroidRuntime( 2046): FATAL EXCEPTION: main
E/AndroidRuntime( 2046): Process: com.example.video_call, PID: 2046
E/AndroidRuntime( 2046): java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH/DT_GNU_HASH in "/data/app/~~nTLNP9Bj_egzZU9DQGxSrQ==/com.example.video_call-LRfYUQJyccQppChea-IfMw==/lib/arm64/libAgoraRtcWrapper.so" (new hash type from the future?)
E/AndroidRuntime( 2046): 	at java.lang.Runtime.loadLibrary0(Runtime.java:1081)
E/AndroidRuntime( 2046): 	at java.lang.Runtime.loadLibrary0(Runtime.java:1003)
E/AndroidRuntime( 2046): 	at java.lang.System.loadLibrary(System.java:1765)
E/AndroidRuntime( 2046): 	at io.agora.agora_rtc_ng.AgoraRtcNgPlugin.onMethodCall(AgoraRtcNgPlugin.java:65)
E/AndroidRuntime( 2046): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:267)
E/AndroidRuntime( 2046): 	at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:292)
E/AndroidRuntime( 2046): 	at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319)
E/AndroidRuntime( 2046): 	at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/AndroidRuntime( 2046): 	at android.os.Handler.handleCallback(Handler.java:959)
E/AndroidRuntime( 2046): 	at android.os.Handler.dispatchMessage(Handler.java:100)
E/AndroidRuntime( 2046): 	at android.os.Looper.loopOnce(Looper.java:232)
E/AndroidRuntime( 2046): 	at android.os.Looper.loop(Looper.java:317)
E/AndroidRuntime( 2046): 	at android.app.ActivityThread.main(ActivityThread.java:8705)
E/AndroidRuntime( 2046): 	at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 2046): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
E/AndroidRuntime( 2046): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
I/Process ( 2046): Sending signal. PID: 2046 SIG: 9
Lost connection to device.
the Dart compiler exited unexpectedly.

해결했던 방법

late RtcEngine? engine; //선언할 때 late 추가

답변 3

0

감사해요!!

저도 RtcEngine 선언 부분에 late 를 넣어주니 해결되었어요.
덕분에 강의 듣기를 진행할 수 있게 되었습니다!!!

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

매우 이상하네요 저는 여전히 정상적으로 작동이 되고 있습니다.

혹시 안드로이드 실기기 사용하셨나요 아니면 에뮬레이터 사용하셨나요?

어떤 환경인지 조금 더 정보를 제공해주시면 다시 확인 해보겠습니다.

late 키워드는 await 키워드랑 현재 상황에 크게 관련이 없기 때문에 (특히나 nullable로 만든 상황에서는) 에러의 원인이 되면 안된다고 생각됩니다.

감사합니다!

MacOS에서 애뮬레이터(Pixel 7 Pro 기종)로 실행했습니다!

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

혹시 원격 필요하신 부분일까요?

화면에 그려보니 snapshot 에러 메세지에 engine initialze 가 안 됐다고 떠서 코트팩토리님 코드에 appId, token 만 제 agora 프로젝트에 맞춰 바꾸고 실행 시켰는데도 앱이 꺼지네요ㅠㅠ 제 설정이나 버전 문제이지 싶습니다.. 저는 영상통화가 크게 필요한 부분은 아닌지라 원격까지는 괜찮을 것 같습니다! 답변 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

OMC님의 질문에 대한 답변은 late 키워드가 추가되면서 발생한 변화와 관련이 있습니다. Dart에서 late 키워드는 초기화 지연(Lazy initialization)을 목적으로 사용됩니다. 이는 변수가 선언된 시점이 아니라 실제로 사용되는 시점에 초기화가 이루어지도록 하는 역할을 합니다. RtcEngine 객체의 경우, 앱 실행 과정에서 적절한 시점에 초기화가 되어야 올바르게 작동합니다.

에러 로그를 보니 java.lang.UnsatisfiedLinkError와 관련된 내용이 있는데, 이는 특정 네이티브 라이브러리를 로드하는 데 실패했음을 나타냅니다. await engine!.initialize(RtcEngineContext(appId: appId,)); 코드가 실행되는 시점에 RtcEngine 객체가 아직 초기화되지 않아 해당 네이티브 라이브러리 관련 작업이 제대로 이루어지지 않는 문제가 발생했을 수 있습니다.

late 키워드를 추가함으로써 RtcEngine 객체의 초기화를 사용 시점으로 미루어 주요 작업이 이루어지기 전에 필요한 모든 준비가 충분히 이루어질 시간을 확보할 수 있게 되었습니다. 따라서 앱이 예상대로 작동하지 않던 문제가 해결되었을 가능성이 높습니다.

질문에 대해 충분한 답변이 되었기를 바랍니다. 추가적인 질문이 있으시면 언제든지 문의해 주세요.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기