2010-10-12 25 views
65

Khi tôi một cái gì đó như thế nàyLàm thế nào để gỡ lỗi với các ứng dụng bị xáo trộn (với ProGuard) trên Android?

ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException 
ERROR/AndroidRuntime(18677):  at com.companyname.a.a.a(Unknown Source) 

Làm thế nào tôi có thể biết nơi mà vấn đề là gì và gỡ lỗi vấn đề này? Tôi chỉ nhận được đầu ra ánh xạ từ ProGuard và không biết số dòng. Cảm ơn.

Trả lời

109

Thêm các dòng sau vào cấu hình bảo vệ của bạn.

-renamesourcefileattribute SourceFile  
-keepattributes SourceFile,LineNumberTable 

Bây giờ, dấu vết ngăn xếp sẽ bao gồm số dòng và bằng cách sử dụng công cụ truy xuất đi kèm với proguard (được bao gồm trong SDK Android), bạn có thể gỡ lỗi như bình thường.

Lưu ý rằng ngay cả khi bạn không sử dụng hai tùy chọn cấu hình này, truy xuất vẫn có thể xuất thông tin hữu ích miễn là bạn có tệp ánh xạ, mặc dù không hoàn toàn rõ ràng.

Lưu ý: các tập tin với các ánh xạ được sản xuất bởi các tùy chọn cấu hình Proguard:

-printmapping outputfile.txt 

Trong tập tin kiến ​​xuất xưởng với Android SDK, nó được thiết lập để mapping.txt.

Chúc may mắn.

15

Để sử dụng bất kỳ dấu vết ngăn xếp nào từ tài khoản Android Market, bạn có thể sử dụng tệp bản đồ, được tạo bằng tùy chọn -printmapping trong cấu hình ProGuard, với công cụ đồng hành ReTrace (ProGuard) để giải mã dấu vết ngăn xếp. Bạn cũng có thể giải mã bằng tay bằng cách sử dụng nội dung của tập tin bản đồ, nhưng điều này là tẻ nhạt.

Trong sách hướng dẫn sử dụng ProGuard theo các ví dụ, có một phần về việc tạo ra các dấu vết ngăn xếp có chứa obfuscated bao gồm cách giữ số dòng.

Thật không may nếu bạn không đặt ProGuard để giữ số dòng, khi đó bạn sẽ chỉ có thể xác định phương thức ném ngoại lệ.

+4

Quá trình này cũng được giải thích tại http://developer.android.com/guide/developing/tools/proguard.html #decoding –

+0

Sắp có trong ADT 17 (hiện tại là bản phát hành Xem trước) là những thay đổi khác về cách PorGuard được định cấu hình cho Androi d. http://tools.android.com/recent/proguardimprovements Nó không thay đổi cách gỡ lỗi bằng cách sử dụng ánh xạ in, nhưng nó sẽ thay đổi cách bạn cấu hình ProGuard ban đầu. – cistearns

+0

@cistearns tôi đã thử cùng một nhưng ra là giống như giá trị mã hóa: (bất kỳ sự giúp đỡ? –

4

Dán stack trace của bạn trong stack_trace.txt

Chạy lệnh sau: java -jar retrace.jar stack_trace.txt classes-processed.map

retrace.jar là sdk \ tools \ Proguard \ lib \ retrace.jar classes-processed.map là tệp đầu ra được tạo bởi proguard khi bạn làm obfuscation

Các vấn đề liên quan