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


79

API 레벨 21에 대해 컴파일중인 앱이 있습니다. 여기에 이미지 설명 입력

그런 다음 API 레벨 23을 사용하여 실제 기기에서 디버그합니다.

여기에 이미지 설명 입력

문제는 Android OS의 자체 클래스를 통해 디버깅을 시도 할 때 '소스 코드가 바이트 코드와 일치하지 않습니다'라는 메시지가 표시된다는 것입니다. 왜 이런 일이 발생합니까? 앱이 실행되는 테스트 장치는 API 레벨 23이고 디버깅중인 소스 파일도 레벨 23입니다. * 여기에 이미지 설명 입력 *

정말 혼란 스럽습니다. 누구든지이 메시지가 표시되는 이유와 해결 방법을 설명 할 수 있습니까?


기기의 apk가 오래되었거나 현재 코드와 다른 것 같습니다. 당연한 건 알지만 앱을 한 번 제거하고 다시 설치해 보셨나요?
Akash Raghav

2
IDE의 Intellij IDEA 플러그인과 관련된 오류 인 것 같습니다. 여기서보고 된 버그를 찾을 수 있습니다 . confluence.jetbrains.com/display/IDEADEV/… . 그것을 통과 해 주시겠습니까?
Febi M Felix

@ Akash 나는 그것을 시도했습니다. 하지만 디버깅중인 파일은 내 앱이 아닌 Android OS (ContentResolver)의 일부입니다.
Crocodile

1
@FebiMathew 감사합니다. IDEA-159697과 동일 할 수 있습니다. 이것은 바닐라 IntelliJ IDE의 수정 사항입니다. 이 수정 사항이 어떤 Android Studio IDE 빌드에 표시되는지 어떻게 알 수 있나요?
Crocodile

답변:


40

Google의 IssueTracker에 미해결 문제 가 있습니다 .

이 문제에 제공된 잠재적 솔루션 (이 게시물 날짜 기준)은 다음과 같습니다.

  • 빌드-> 정리를 클릭하십시오.
  • 설정-> 빌드, 실행, 배포에서 Instant Run 비활성화

12
Instant Run을 비활성화하거나이 링크의 다른 솔루션 중 어느 것도 저에게 효과적이지 않았습니다.
mister270

@ mister270 다른 해결책을 찾았습니까? 이 문제가 다시 발생하지 않았으므로 여기서 디버깅하고 내 대답을 확장하기가 어렵습니다.
Michael Hoffmann

2
나는 최소 sdk를 올렸고 문제를 "제거"하는 깨끗한 재 구축을했다. 그러나 이전 min sdk를 원했기 때문에이 솔루션에 만족하지 않습니다.
mister270

3
위의 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 인스턴트 실행 옵션도 찾지 못했습니다. INteelij를 사용하여 디버깅하는 것은 매우 짜증납니다. 코드를 변경할 때마다 새로 설치해야합니다.
Dish

17

내 해결책은 다음과 같습니다.

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

  1. lib 소스 코드에 중단 점 설정
  2. 중단 점까지 코드 실행
  3. 이 팁을 얻을 수 있습니다

여기에 이미지 설명 입력

  1. 화살표 아이콘을 클릭

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

    여기에 이미지 설명 입력

  3. 두 번 클릭하여 올바른 lib를 선택합니다 (일반적으로 lib의 가장 높은 버전이 정확함).

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

여기에 이미지 설명 입력

3 단계의 팁이없는 경우 설정 옵션을 확인했는지 여부를 확인할 수 있습니다.


4
대체 소스가 활성화되었지만 표시되지 않습니다. 드롭 다운 없음 (예, 4 가지 API 레벨이 설치되어 있습니다).
Stephen M -on strike-

gradle 프로젝트에서 이것은 도움이되지 않았습니다. 저는 그냥 계속해서 프로젝트 모듈에서 잘못된 라이브러리를 일시적으로 제거했으며 프레임으로 드롭을 사용하는 올바른 클래스의 중단 점 외에도 도움이되었습니다!
kisna

11

compileSdkVersion과 동일한 API 수준의 Android 에뮬레이터를 사용해야합니다. 귀하의 경우에는 API 레벨 21로 Android 에뮬레이터를 사용해야합니다.


1
이것은 나를 위해 일했습니다. 내 장치는 API 22이므로 compileSdkVersion을 22로 설정하면 문제가 해결되었습니다.
라이브 러브

또한 나를 위해 일했습니다. 저는 Android 8.1.0 (API 27)을 사용하는 물리적 장치를 사용하고 있었고 컴퓨터에는 API 30 용 소스 만 설치되어있었습니다. API 30을 사용하는 에뮬레이터로 전환하면 문제가 해결되었습니다. (compileSDKVersion 이제 장치 버전과 일치)
제이슨 로버트슨

5

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

gradle --refresh-dependencies

, 실제로 모든 종속성을 새로 고치는 것은 아닙니다. 일부 쓰레기가 남아 있습니다. ( 참조 ).

따라서 가장 확실한 (하지만 과감하고 긴) 변형은 [user] /. gradle / caches에서 내부를 모두 지우는 것입니다. 또는 문제 프로젝트를 찾아서 캐시 만 지우십시오.


1

나는 여기에 주어진 모든 해결책을 시도했지만 그들 중 누구도 나를 위해 일하지 않았습니다. 버전 2019.1.3에서는 아티팩트를 정리하고 다시 빌드하면 작동했습니다. 먼저 Build -> Build Artifacts... -> <select your artifact> -> Clean클릭 Build하거나 Rebuild같은 위치에서.


1

이것은 나를 위해 일한 단계입니다 (Mac 및 Windows 모두) :

  1. "파일"을 클릭하십시오
  2. "캐시 무효화 / 재시작 ..."을 클릭하십시오.
  3. 선택 : "무효화 및 다시 시작"
  4. 20 분간 기다립니다

0

프로젝트 설정> 아티팩트로 이동하십시오. 문제가있는 이슈를 선택하십시오. "프로젝트 빌드에 포함"옵션이 있습니다. 이것은 체크 (활성화)되어야합니다. IntelliJ 이전 버전의 경우이 옵션은 "Make on build"입니다.


0

아마도이 오류 메시지에는 하나 이상의 원인이있을 수 있습니다. 제 경우는 OP의 경우와 같지 않았습니다. 제 경우에는 추가 라이브러리가 필요한 타사 라이브러리 때문이었습니다.

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

메시지가 전혀 도움이되지 않았 음을 알아내는 데 시간이 걸렸습니다. 충돌하는 클래스에 도달 할 때까지 앱을 디버깅해야했고 해당 클래스에서 모든 가져 오기가 만족되었는지 확인해야했습니다.

(Particualry : commons-httpclient.jar이 필요한 MercadoLibre-0.3.4.jar을 추가했습니다.)

도움이 되었기를 바랍니다!


0

ProGuard를 활성화 한 경우에도 발생할 수 있습니다. buildTypes에서 minifyEnabled false, shrinkResources false, useProguard false를 설정합니다.


0

Bluetooth Low Energy (BLE)를 사용하는 응용 프로그램에서 작업하는 동안 여기에 제공된 솔루션을 시도했습니다. 나는 시도했다.

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

이 모든 것이 실패했습니다.

내가 한 일은 내가 경고를 받고 있다고 생각한 지점을 디버그하는 것이었고 여전히 경고는 받았지만 응용 프로그램은 제대로 작동했습니다. 경고를 무시할 수 있습니다.


0

내 앱은 API LEVEL 29에서 컴파일되었지만 API LEVEL 28에서 실제 장치에서 디버깅 source code does not match the bytecodeAndroidStudio에 경고가 표시 되었습니다.

  1. Preferences> Instant Run으로 이동 : 인스턴트 실행을 선택 취소합니다.

  2. 빌드> 클린 빌드로 이동

  3. 앱 다시 실행

이제 디버그가 정상적으로 실행됩니다.


0

AVD를 생성하고 tagetApi와 동일한 API 레벨을 선택하고 compileApi를 선택할 수 있습니다.


0

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

이 오류가 발생하고 여기에 도움이되지 않는 경우. 프로그램이 오류를지나 끝날 때까지 "프로그램 재생 다시 시작 버튼"을 클릭 해보십시오. 그런 다음 디버그 옆의 콘솔 탭을 클릭하고 빨간색 텍스트를 읽으십시오.

내 문제가 null 배열에 값을 삽입하려고했지만 소스 코드 오류가 발생했습니다. 1 단계 재개 버튼 클릭

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


이것은 훌륭한 답변이 될 것 같습니다! 이 게시물의 다른 사용자는 수행해야하는 GUI 작업을 명확히하는 데 도움이되는 화면 캡처를 추가했습니다. Resume program play button여기에 빨간색 상자 / 화살표가있는 화면 캡처 가 유용 할 수 있습니다.
Lenna 2011

1
도움이되도록 이미지를 추가했습니다. 표시하는 방법을 모르지만 링크에 아직 이미지를 게시 할 담당자가 충분하지 않으므로 링크가 수행해야합니다.
CK

-1

Android Studio는 애플리케이션에서 대상 버전과 동일한 소스 버전을 사용합니다. 위에서 언급 한 컴파일 버전과 동일한 소스 버전으로 수행 된 컴파일. 따라서 프로젝트에서 Compile Version == Target Version (모듈의 build.gradle 파일 조정)에주의하십시오.


-2

나는 같은 문제가 있었고 해결책을 찾았습니다. 빨간색으로 표시된 라인이 있으면이 오류가 발생하지만 모든 라인의 플래그를 해제하면 정상적으로 작동합니다.

플래그가있는 것은 줄 번호가있는 왼쪽을 클릭하면 해당 줄이 강조 표시됨을 의미합니다. 그것이 명확하지 않다면 여기에 그림이 있습니다.
go from : flagged line to : not flagged 라인

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.