Làm thế nào để gỡ lỗi apk đã ký để phát hành?


114

Tôi có một gói ứng dụng mà tôi đã ký và tải lên Android Market cũng như cài đặt trên điện thoại của mình. Tôi muốn gỡ lỗi apk phát hành này (bằng Eclipse) trong khi nó đang chạy trên điện thoại của tôi. Tôi đã làm điều này trước đây (và nhớ nó là với một trong những công cụ phát triển Android; có lẽ là Dalvik Debug Monitor) nhưng tiếc là không thể nhớ cách thực hiện và không thể tìm thấy bất kỳ bài viết nào trực tuyến. Có ai biết làm thế nào để có thể xong không?

Lưu ý: Tôi đã đặt android:debuggable="true"trong tệp kê khai và đã bật Gỡ lỗi USB trên điện thoại của mình.


bạn đang cố gắng gì Bạn không biết cách sử dụng Dạng xem Thiết bị trong Eclipse?
Sam Dozor,

Bây giờ tôi có chế độ xem Thiết bị hiển thị trong Eclipse. Tôi có thể thấy thiết bị của mình trong danh sách Thiết bị. Tôi nhấp vào nó nhưng nút "Gỡ lỗi quy trình đã chọn" bị vô hiệu hóa mặc dù ứng dụng đang chạy trên điện thoại và dự án nguồn có mặt và được mở trong không gian làm việc. Có ý kiến ​​gì không ?!
Adil Hussain

Bạn có đang nhấp vào tên gói cho ứng dụng của mình không?
Sam Dozor,

Đúng. Xem bình luận trong câu trả lời của bạn. (. Thanks for the help btw Đánh giá cao nó.)
Adil Hussain

Câu trả lời:


77

Đảm bảo điều đó android:debuggable="true"được đặt trong applicationthẻ của tệp kê khai của bạn, sau đó:

  1. Cắm điện thoại của bạn vào máy tính và bật gỡ lỗi USB trên điện thoại
  2. Mở nhật thực và không gian làm việc chứa mã cho ứng dụng của bạn
  3. Trong Eclipse, đi tới Window-> Show View-> Devices
  4. Nhìn vào chế độ xem Thiết bị bây giờ sẽ hiển thị, bạn sẽ thấy thiết bị của mình được liệt kê
  5. Nếu thiết bị của bạn không được liệt kê, bạn sẽ phải theo dõi trình điều khiển ADB cho điện thoại của mình trước khi tiếp tục
  6. Nếu bạn muốn chuyển qua mã, hãy đặt điểm ngắt ở đâu đó trong ứng dụng của bạn
  7. Mở ứng dụng trên điện thoại của bạn
  8. Trong chế độ xem Thiết bị, hãy mở rộng mục nhập cho điện thoại của bạn nếu nó chưa được mở rộng và tìm tên gói ứng dụng của bạn.
  9. Nhấp vào tên gói và ở trên cùng bên phải của giao diện Thiết bị, bạn sẽ thấy một lỗi màu xanh lá cây cùng với một số nút nhỏ khác. Nhấp vào lỗi màu xanh lá cây.
  10. Bây giờ bạn sẽ được đính kèm / gỡ lỗi ứng dụng của mình.

Tôi thực hiện đến bước 8 nhưng vì một số lý do mà tên gói ứng dụng của tôi không hiển thị khi tôi đang chạy apk đã ký / phát hành. (Kì lạ thay nó hiển thị khi tôi chạy ứng dụng (debug apk) trên điện thoại của tôi ngay từ Eclipse.) Confused ...
Adil Hussain

2
Hiểu rồi! Tôi đã đặt android:debuggable="true"thuộc tính trong manifestthẻ thay vì applicationthẻ trong tệp kê khai !! . My xấu :( Cảm ơn Sam_D bao giờ quá nhiều để được hướng dẫn của bạn sẽ không làm điều đó mà không bạn, hoặc ít nhất đã có thể lấy một heck của một thời gian dài!
Adil Hussain

Khi tôi thêm từ khóa debuggable trong build.gradle và muốn xuất bản trong cửa hàng chơi nó cho thấy lỗi nàyYou uploaded a debuggable APK. For security reasons you need to disable debugging before it can be published in Google Play.
hasnain_ahmad

1
Câu trả lời này đã lỗi thời. Thay vì androidManifest.xmlbạn nên cập nhật build.gradle. Xem các câu trả lời khác.
Antimonit

@hasnain_ahmad Bạn có thể tìm ra giải pháp cho vấn đề này không?
Shashank Saxena

126

Tôi biết đây là câu hỏi cũ, nhưng tài liệu tham khảo trong tương lai. Trong Android Studio với Gradle:

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

Đường dây debuggable truelà mẹo đối với tôi.

Cập nhật:

Kể từ gradle 1.0, nó minifyEnabledthay vì runProguard. Nhìn vào đây


5
Lưu ý rằng kể từ gradle 1.0, nó là minifyEnabled thay vì runProguard - xem tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
m02ph3u5

Như một lưu ý cho câu trả lời hiện tại này, bản thân tôi sẽ tránh gửi một bản phát hành có thể gỡ lỗi đến cửa hàng Google Play và nó có thể không cho phép bạn như trong trường hợp của hasnain_ahmad trong câu trả lời lỗi thời trước đó. Chỉ làm điều đó tạm thời để kiểm tra sự cố do bản phát hành tải xuống từ cửa hàng, như theo dõi mã mua hàng inapp, sẽ ít rủi ro hơn. Bạn cũng có thể thử làm việc với phiên bản beta (tôi không biết liệu điều này có thể gây ra lỗi tương tự như hasnian mắc phải hay không) hoặc chuyển apk phiên bản phát hành sang điện thoại của bạn từ máy tính của bạn để tránh các vấn đề bảo mật (xử lý gói phức tạp hơn ).
Androidcoder

40

Ngoài cách của Manuel, bạn vẫn có thể sử dụng Manifest.

Trong Android Studio ổn định, bạn phải thêm 2 dòng sau applicationvào AndroidManifesttệp:

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

Cái đầu tiên sẽ cho phép gỡ lỗi APK đã ký và cái thứ hai sẽ ngăn lỗi thời gian biên dịch.

Sau đó, bạn có thể đính kèm vào quy trình thông qua nút "Đính kèm trình gỡ lỗi vào quy trình Android".


@jaibatrik nó phải là apk của bạn và bạn phải đính kèm trình gỡ lỗi từ các nguồn. nếu bạn đang làm cả hai và nó vẫn không làm việc, chia sẻ thêm thông tin và tôi có thể cố gắng giúp đỡ
sandalone

2
Tôi nhận được "[Lỗi nghiêm trọng]: 7: 203: Tiền tố" tools "cho thuộc tính" tools: ignore "được liên kết với loại phần tử" ứng dụng "không bị ràng buộc." Công cụ: ignore = "HardcodedDebugMode" có phải là cấu hình hợp pháp ở đây không?
JD

1
Tôi phải thêm lintOptions { abortOnError false }vào ứng dụng của tôi / build.grade thay vì sử dụng tools:ignorenhư sau: android { lintOptions: { abortOnError false } }
YoshiJaeger

tôi có The prefix "tools" for attribute "tools:ignore" associated with an element type "application" is not bound.!
Oliver D

9

Tôi đã thử những cách sau và nó hoạt động:

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

Câu trả lời này đã được đưa ra trong chủ đề này bởi Manuel Lopera ... ba năm trước! Xem ở đây: stackoverflow.com/a/27181562/1071320
Adil Hussain

@AdilHussain Nhưng tôi đã thử thì câu trả lời đó không phù hợp với tôi. Hãy xem có sự khác biệt trong câu trả lời của tôi tại `minifyEnabled false` và nó nằm runProguard truetrong trường hợp của anh ấy. Vui lòng xem những thay đổi
Shylendra Madda 14/09/17

Không phải là vấn đề lớn nhưng câu trả lời của anh ấy có cập nhật về hiệu ứng này. Dù sao. Không phải là một thỏa thuận lớn. Cảm ơn vì câu trả lời.
Adil Hussain

9

Thêm phần sau vào app build.gradle của bạn và chọn biến thể bản dựng phát hành đã chỉ định và chạy

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

Trong trường hợp bạn quyết định gỡ lỗi apk của bạn đã có trên thị trường nhưng không được chỉ định là có thể gỡ lỗi và bạn không muốn xuất bản lại. Vì vậy, hãy làm theo các bước dưới đây;

  1. Giải mã Apk với ApkTool (ví dụ apktool d <APK_PATH>:)
  2. Mở AndroidManifest.xml từ các tệp dịch ngược
  3. Đặt android:debuggable="true"trong applicationthẻ
  4. Biên dịch nguồn đã sửa đổi với ApkTool (ví dụ apktool b <MODIFIED_PATH>:)
  5. Apk có thể gỡ lỗi đã sẵn sàng (mà không có dấu có nghĩa là không thể xuất bản cửa hàng). Bạn có thể gỡ lỗi như bạn muốn.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.