source

장치에서 디버깅할 때 '소스 코드가 바이트 코드와 일치하지 않음'

factcode 2022. 12. 5. 21:13
반응형

장치에서 디버깅할 때 '소스 코드가 바이트 코드와 일치하지 않음'

API 레벨 21을 기준으로 컴파일하고 있는 앱이 있습니다.

API 레벨 23을 사용하여 실제 디바이스에서 디버깅합니다.

여기에 이미지 설명 입력

문제는 Android OS의 자체 클래스에서 디버깅을 시도하면 "Source code is match the bytecode"라는 메시지가 뜬다는 것입니다.왜 이런 일이 생기는 건가요?앱이 실행되고 있는 테스트 디바이스는 API 레벨 23이며, 디버깅되고 있는 소스 파일도 레벨 23입니다.*이미지 설명을 여기에 입력*

나는 정말 혼란스럽다.이 메시지가 표시되는 이유와 수정 방법에 대해 설명해 주실 수 있습니까?

Google의 IssueTracker에는 이에 대한 미해결 이슈가 있습니다.

이 문제(이 투고일 현재)에 제시된 잠재적인 해결책은 다음과 같습니다.

  • [ Build ]-> [ Clean ]을 클릭합니다.
  • [설정(Settings)]-> [빌드(Build), 실행(Execution), 전개(Deployment)]의 인스턴트 실행을 무효로 합니다.

저의 솔루션은 다음과 같습니다.

여러 라이브러리 버전이 있는 경우 도움이 될 수 있습니다.

  1. lib 소스 코드에 중단점 설정
  2. 코드를 중단점까지 실행시키다
  3. 이 팁들을 알게 될 것이다.

여기에 이미지 설명 입력

  1. 화살표 아이콘을 클릭합니다.

  2. 당신은 이것을 얻을 것이다.

    여기에 이미지 설명 입력

  3. 올바른 lib를 더블 클릭하여 선택합니다(lib의 가장 높은 버전이 올바른지 확인).

실수로 "비활성화" 버튼을 클릭했으므로 디버거 설정에서 활성화할 수 있습니다.

여기에 이미지 설명 입력

3단계에 대한 힌트가 없는 경우 설정 옵션을 체크했는지 여부를 확인할 수 있습니다.

compileSdkVersion과 동일한 API 수준의 Android 에뮬레이터를 사용해야 합니다.당신의 경우 api level 21의 Android 에뮬레이터를 사용해야 합니다.

Gradle을 사용하는 경우 Gradle 캐시에 문제가 있을 수 있습니다(참조).아아, 도망쳐도

gradle --refresh-dependencies

모든 의존관계가 새로워지는 것은 아닙니다.쓰레기가 남아있어요. (참고 자료)

따라서 가장 확실한(단, 긴) 변형은 [user]/.gradle/caches에서 내부 모든 것을 지우는 것입니다.또는 문제가 있는 프로젝트를 찾아서 캐시만 클리어할 수도 있습니다.

29에 있는 LEVEL 28에 .source code does not match the bytecodeAndroid Studio ★★★★★★★★★★★★★★★」하다

  1. [설정]으로 이동합니다.Instant Run: Instant Run 선택을 취소합니다.

  2. 빌드 > 클린 빌드로 이동합니다.

  3. 앱 재실행

이것으로 디버깅은 정상적으로 실행됩니다.

다음은 나에게 도움이 되는 단계입니다(Mac과 Windows의 경우).

  1. "파일"을 클릭합니다.
  2. [ Invalidate Caches / Restart ... ]을 클릭합니다."
  3. [ Invalidate and Restart ]를 선택합니다.

주의: 소규모 프로젝트에서는 1분도 걸리지 않지만, 제 프로젝트는 큰 프로젝트(약 100만 줄의 코드)였기 때문에 20분이 걸렸습니다.

여기에 있는 모든 솔루션을 시도해 보았지만, 어느 솔루션도 효과가 없었습니다. 전 2019 2019.1을 실행합니다.3에서는 아티팩트를 청소하고 재구축하면 동작합니다.처음에는Build -> Build Artifacts... -> <select your artifact> -> Clean 을 클릭합니다.Build ★★★★★★★★★★★★★★★★★」Rebuild같은 장소에서.

[ Project Settings ]> [ Artacts ]으로 이동합니다.문제가 있는 아티팩트를 선택합니다."프로젝트 빌드에 포함" 옵션이 있습니다.이것은 체크할 필요가 있습니다(이네이블).이전 버전의 IntelliJ의 경우 이 옵션은 "Make on Build"입니다.

이 에러 메세지는, 복수의 원인이 있을 가능성이 있습니다.내 경우는 OP의 경우와 달랐습니다.이것은 서드파티제 라이브러리에서 추가 라이브러리가 필요했기 때문입니다.

예를 들어, 수동으로 X.jar를 LIB에 추가하지만 이 X.jar를 사용하려면 Z.jar가 필요합니다.

메시지가 전혀 도움이 되지 않는다는 것을 깨닫는 데 시간이 걸렸습니다.크래시 클래스에 도달할 때까지 앱을 디버깅해야 했고, 그 클래스에서 모든 Import가 충족되었는지 확인합니다.

(특정: Commons-httpclient.jar가 필요한 MercadoLibre-0.3.4.jar를 추가했습니다.)

이게 도움이 됐으면 좋겠네요!

이 문제는 ProGuard를 활성화한 경우에도 발생할 수 있습니다.인빌드set minifyEnabled false, shrinkResources false, useProguard false 유형

Bluetooth Low Energy(BLE)를 사용한 어플리케이션으로 작업하면서 여기에 제시된 솔루션을 사용해 보았습니다.나는 노력했다.

  1. 클린 빌드
  2. 인스턴트 실행 비활성화
  3. 캐시 비활성화/재시작

모두 실패했습니다.

경고 메시지가 뜨는 줄 알았던 지점을 디버깅한 결과 경고 메시지가 떴지만 응용 프로그램은 정상적으로 작동하고 있었습니다.경고는 무시해도 됩니다.

AVD를 생성하여 API Level과 tagetApi를 동일하게 선택하여 컴파일Api를 사용할 수 있습니다.

그래서 저는 많은 사람들을 괴롭히고 위의 수정이 작동하지 않는 이 문제를 해결하기 위해 계정을 만들었습니다.

이 에러가 발생해도 아무것도 도움이 되지 않는 경우.프로그램이 오류를 초과할 때까지 [Resume program play]버튼을 클릭해 보겠습니다.그런 다음 디버깅 옆의 콘솔 탭을 클릭하고 빨간색 텍스트를 읽습니다.

Null Array에 값을 삽입하려고 했는데도 소스 코드 오류가 발생했습니다.스텝 1 [재개]버튼을 클릭합니다.

2단계 콘솔 탭을 클릭하여 빨간색 텍스트를 읽습니다.

"소스 코드가 바이트 코드와 일치하지 않습니다"라는 오류가 발생한 이유는 다음과 같습니다.나의 원인은 API, 컴파일러 버전과는 무관합니다.다른 곳에서 실수로 인플레이터(안드로이드 앱 코드의 onCreate 기능 위에 "결과 핸들러" 코드의 척)를 시작한 상태에서 레이아웃 뷰를 루트 뷰로 부풀렸을 때 발생합니다.브레이크 포인트를 설정하고 여기서 정지했을 때 디버거는 이에 대한 올바른 힌트를 주지 않습니다(인플레이터가 초기화되지 않았거나 인스턴스가 있습니다).

제가 실수로 같은 라이브러리를 여러 번 추가했을 때 이런 일이 있었습니다.

implementation 'androidx.appcompat:appcompat:1.1.0'

위의 라이브러리는 여러 번 추가되었습니다.

클리닝, 리빌드, 캐시 비활성화 및 재시작 등의 수법이 작동하지 않으면 이전 APK를 삭제하고 새로운 APK를 재설치해 보십시오.

Android Studio는 응용 프로그램에서 대상 버전과 동일한 소스 버전을 사용합니다.위의 컴파일 버전과 동일한 소스 버전을 사용하여 컴파일을 수행합니다.따라서 프로젝트에서는 Compile Version == Target Version(모듈의 build.gradle 파일 조정)을 참조하십시오.

저도 같은 문제를 안고 해결책을 찾았습니다.행에 빨간색 플래그가 붙어 있으면 이 에러가 발생하지만, 모든 행에 플래그를 해제하면 정상적으로 동작합니다.

flagged 즉, 회선번호가 있는 왼쪽을 클릭하면 회선이 강조 표시됩니다.만약 그것이 명확하지 않다면 여기 사진들이 있다.
이동처: 플래그 부착 회선부터: 플래그 부착되지 않은 회선

언급URL : https://stackoverflow.com/questions/39990752/source-code-does-not-match-the-bytecode-when-debugging-on-a-device

반응형