릴리스 용으로 서명 된 APK를 디버깅하는 방법은 무엇입니까?


114

Android 마켓에 서명하고 업로드하고 휴대 전화에 설치 한 APK가 있습니다. 내 전화에서 실행되는 동안이 릴리스 apk (Eclipse를 통해)를 디버깅하고 싶습니다. 이전에이 작업을 수행했지만 (Android 개발 도구 중 하나 인 Dalvik Debug Monitor) 불행히도이를 수행하는 방법을 기억할 수 없으며 온라인에서 기사를 찾을 수 없습니다. 누구든지 이것이 어떻게 할 수 있는지 알고 있습니까?

참고 : 내가 설정 android:debuggable="true"매니페스트에 내 전화에 디버깅 USB를 사용할 수있다.


현재 무엇을 시도하고 있습니까? Eclipse에서 장치보기를 사용하는 방법을 모르십니까?
Sam Dozor 2015 년

이제 Eclipse에 장치보기가 표시됩니다. 장치 목록에서 내 장치를 볼 수 있습니다. 나는 그것을 클릭하지만 "Debug the selected process"버튼은 전화에서 실행되는 응용 프로그램과 소스 프로젝트가 존재하고 작업 공간에 열려 있음에도 불구하고 비활성화됩니다. 어떤 아이디어?!
Adil Hussain

앱의 패키지 이름을 클릭하고 있습니까?
Sam Dozor 2015 년

예. 답변에서 주석을 참조하십시오. (. BTW 도움을 주셔서 감사합니다 그것을 감사합니다.)
아딜 후세인에게

답변:


77

매니페스트 파일 android:debuggable="true"application태그에 설정되어 있는지 확인한 후 다음을 수행하십시오.

  1. 전화기를 컴퓨터에 연결하고 전화기에서 USB 디버깅을 활성화하십시오.
  2. Eclipse 및 앱 코드가 포함 된 작업 공간을 엽니 다.
  3. Eclipse에서 Window-> Show View-> Devices로 이동하십시오.
  4. 이제 표시되어야하는 장치보기를보십시오. 장치가 나열되어 있어야합니다.
  5. 장치가 목록에 없으면 계속하기 전에 휴대폰의 ADB 드라이버를 추적해야합니다.
  6. 코드를 단계별로 실행하려면 앱 어딘가에 중단 점을 설정하세요.
  7. 휴대 전화에서 앱을 엽니 다.
  8. 장치보기에서 아직 확장되지 않은 경우 휴대폰 항목을 확장하고 앱의 패키지 이름을 찾습니다.
  9. 패키지 이름을 클릭하면 장치보기의 오른쪽 상단에 여러 다른 작은 버튼과 함께 녹색 버그가 표시됩니다. 녹색 버그를 클릭하십시오.
  10. 이제 앱을 연결 / 디버깅해야합니다.

8 단계까지 올라가지 만 어떤 이유로 서명 / 출시 APK를 실행할 때 내 앱의 패키지 이름이 표시되지 않습니다. (. 이상하게도 그것은 내가 응용 프로그램 (디버그 APK를 실행할 때 이클립스에서 바로 내 전화) 쇼를 않습니다) 혼란
아딜 후세인

2
알았다! 매니페스트 내의 태그 대신 태그에 android:debuggable="true"속성을 넣었습니다 !! . 내 나쁜 :( 감사 Sam_D 지금까지 너무 많은 당신의 지침겠습니까 당신 없이는 불가능했을, 또는 최고의 긴 시간의 지옥을 촬영 한 것입니다!manifestapplication
아딜 후세인

내가 build.gradle에서 디버깅 키워드를 추가하고 플레이 스토어에 게시 할 때이 오류 표시You uploaded a debuggable APK. For security reasons you need to disable debugging before it can be published in Google Play.
hasnain_ahmad

1
이 대답은 오래되었습니다. 대신 androidManifest.xml업데이트해야합니다 build.gradle. 다른 답변을 참조하십시오.
Antimonit

@hasnain_ahmad 이것에 대한 해결책을 찾을 수 있었습니까?
Shashank Saxena

126

나는 이것이 오래된 질문이라는 것을 알고 있지만 향후 참조. Gradle을 사용하는 Android Studio에서 :

buildTypes {
    release {
        debuggable true
        runProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

그 선 debuggable true은 저에게 속임수였습니다.

최신 정보:

gradle 1.0 이후로 minifyEnabledrunProguard. 여기 좀 봐


5
Gradle을 1.0로이 있다고 주 minifyEnabled 대신 runProguard은 - 볼 tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
m02ph3u5

이 현재 답변에 대한 메모로, 저는 디버깅 가능한 릴리스를 Google Play 스토어에 보내는 것을 피할 것이며 이전의 오래된 답변에서 hasnain_ahmad의 경우처럼 허용하지 않을 수 있습니다. 인앱 구매 코드 추적과 같은 스토어에서 다운로드 된 릴리스 문제를 테스트하기 위해 일시적으로 수행하는 것은 위험이 적습니다. 베타 트랙으로 작업을 시도하거나 (이가 hasnian과 동일한 오류를 제공 할 수 있는지 모르겠습니다) 보안 문제를 피하기 위해 릴리스 빌드 APK를 컴퓨터에서 휴대 전화로 전송 해 볼 수도 있습니다 (번들 처리가 더 복잡 해짐). ).
Androidcoder

40

Manuel의 방식 외에도 Manifest를 계속 사용할 수 있습니다.

Android Studio stable에서는 파일 application에 다음 두 줄을 추가 해야 AndroidManifest합니다.

    android:debuggable="true"
    tools:ignore="HardcodedDebugMode"

첫 번째는 서명 된 APK의 디버깅을 활성화하고 두 번째는 컴파일 시간 오류를 방지합니다.

그런 다음 "Attach debugger to Android process"버튼을 통해 프로세스에 연결할 수 있습니다.


@jaibatrik 그것은 당신의 apk 여야하고 소스로부터 디버거를 연결해야합니다. 두 가지를 모두 수행했지만 여전히 작동하지 않는 경우 더 많은 정보를 공유하면 도움이 될 수 있습니다
sandalone

2
"[치명적인 오류] : 7 : 203 :"application "요소 유형과 관련된"tools : ignore "속성의 접두사"tools "가 바인딩되지 않았습니다." tools : ignore = "HardcodedDebugMode"가 합법적 인 구성입니까?
JD

1
내가 추가 한 lintOptions { abortOnError false }내 애플 리케이션 / build.grade에 대신하여 tools:ignore:과 같이 android { lintOptions: { abortOnError false } }
YoshiJaeger

나는 얻었다 The prefix "tools" for attribute "tools:ignore" associated with an element type "application" is not bound.!
Oliver D

9

나는 다음과 같이 시도했고 효과가 있었다.

release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

이 답변은 이미 Manuel Lopera에 의해이 스레드에서 제공되었습니다 ... 3 년 전! 여기를 참조하십시오 : stackoverflow.com/a/27181562/1071320
아딜 후세인

@AdilHussain 그러나 나는 그것이 나를 위해 일하지 않은 대답을 시도했습니다. `minifyEnabled false`에서 내 대답에 차이가 runProguard true있으며 그의 경우입니다. 변경 사항을 참조하십시오
Shylendra Madda

큰 문제는 아니지만 그의 답변에는이 효과에 대한 업데이트가 포함되어 있습니다. 어쨌든. 큰 문제는 아닙니다. 답변 해주셔서 감사합니다.
Adil Hussain

9

앱 build.gradle에 다음을 추가하고 지정된 릴리스 빌드 변형을 선택하고 실행합니다.

signingConfigs {
        config {
            keyAlias 'keyalias'
            keyPassword 'keypwd'
            storeFile file('<<KEYSTORE-PATH>>.keystore')
            storePassword 'pwd'
        }
    }
    buildTypes {
      release {
          debuggable true
          signingConfig signingConfigs.config
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

5

당신의 경우 디버그를 결정 하여 디버깅로 이미 시장에서가 아니라 할당입니다 APK를하고 다시 게시하지 않습니다. 따라서 아래 단계를 따르십시오.

  1. 함께 APK 디 컴파일 ApkTool (예. apktool d <APK_PATH>)
  2. 디 컴파일 된 파일에서 AndroidManifest.xml을 엽니 다.
  3. 설정 android:debuggable="true"에서 application태그
  4. ApkTool와 수정 된 소스 컴파일 (예를. apktool b <MODIFIED_PATH>)
  5. 디버그 가능한 APK 준비 (서명되지 않음은 스토어를 게시 할 수 없음을 의미 함). 원하는대로 디버깅 할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.