2014-10-21 23 views
20

Tôi gặp sự cố khi Proguard loại bỏ các phương thức gỡ lỗi của tôi (tôi cần chạy chương trình bảo vệ khi gỡ lỗi vì giới hạn tệp dex), ngay cả khi chúng được sử dụng trong gói Kiểm tra. Ví dụ. tôi sử dụng phương pháp addProeprty GSON trong bài kiểm tra Đơn vị, nhưng không sử dụng trong Gói ứng dụng. Phương pháp này bị tước đi và làm cho thử nghiệm thất bại. Nhưng tôi không muốn cấu hình proguard để giữ tất cả GSOn vì giới hạn tập tin dex, nhưng cũng không muốn liệt kê tất cả các phương thức một cách riêng biệt. Có cách nào để nói với rpguard để xem xét các bài kiểm tra đơn vị như là điểm nhập mã nguồn?Thử nghiệm đơn vị Android với proguard được bật

Trả lời

1

Tôi đã giải quyết vấn đề này trong bản dựng của mình bằng cách thêm "dev" buildType nơi tôi bật trình bảo vệ, nhưng định cấu hình để giữ tất cả mã trong gói của riêng tôi và một số lớp thư viện cụ thể xảy ra chỉ kiểm tra. Tôi cũng vô hiệu hóa obfuscation trong dev buildType để nó có thể được gỡ rối từ một IDE.

Để gỡ lỗi và phát hành các bản dựng, tôi sử dụng các cài đặt bảo vệ "thực" của tôi, bao gồm cả làm xáo trộn và tối ưu hóa.

+0

bạn có thể chia sẻ tệp bảo vệ tương tự không? –

+0

Cảm ơn bạn, điều đó sẽ hoạt động. Tuy nhiên, chúng tôi có một số hương vị và mô-đun và có một loại xây dựng cho tất cả chúng là một loại lộn xộn. Các quy tắc bảo vệ tùy chỉnh từ câu trả lời khác đã giúp. – Gaket

3

Kiểm tra thiết bị đo đạc (và các thiết bị khác?) Không sử dụng cùng một tệp bảo vệ như là gói gỡ lỗi/phát hành của bạn. Bạn có thể thử đặt tùy chọn testProguardFile bên trong khối gỡ lỗi và phát hành. Tệp proguard cụ thể kiểm tra này có thể rất dễ chấp nhận vì nó không được sử dụng cho các gói gỡ lỗi/phát hành.

25

Đây là những gì tôi đã làm.

Thêm tệp quy tắc bảo vệ tùy chỉnh.

/project/app/proguard-test-rules.pro

# Proguard rules that are applied to your test apk/code. 
-ignorewarnings 

-keepattributes *Annotation* 

-dontnote junit.framework.** 
-dontnote junit.runner.** 

-dontwarn android.test.** 
-dontwarn android.support.test.** 
-dontwarn org.junit.** 
-dontwarn org.hamcrest.** 
-dontwarn com.squareup.javawriter.JavaWriter 
# Uncomment this if you use Mockito 
#-dontwarn org.mockito.** 

Các thêm dòng sau vào build.gradle của bạn cho ứng dụng của bạn. Để sử dụng tệp proguard khi thử nghiệm.

/project/app/build.gradle

android { 
    debug { 
     minifyEnabled true 
     testProguardFile 'proguard-test-rules.pro' 
    } 
} 
+3

bạn thưa bạn, thật tuyệt vời! – spy

+2

Tôi đã bỏ lỡ "test" trong testProguardFile lần đầu tiên tôi thử giải pháp này, cảm ơn! –

+0

này phải là câu trả lời được chấp nhận – Gaket

5

Không ai trong số các câu trả lời ở trên đã làm các trick cho tôi. Tôi có hai vấn đề: Tôi cũng cần sử dụng tệp proguard mặc định để thử nghiệm và tệp proguard mặc định của tôi sai.

  1. Để sử dụng các tập tin Proguard mặc định, ngoài việc riêng của bạn:

    android { 
        debug { 
         minifyEnabled true 
         testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project-test.pro' 
        } 
    } 
    
  2. File Proguard mặc định (và tất cả các thư mục tools/proguard) là rõ ràng not replaced by default khi bạn cập nhật các công cụ SDK qua Android studio. Máy của tôi đang sử dụng tệp cấu hình lỗi thời, đã gây ra sự cố proguard lạ. Để cập nhật cấu hình mặc định của trình bảo vệ, hãy thay thế ~/Library/Android/Sdk/tools/proguard/proguard-android.txt bằng this.

+0

Chỉ cần đi qua giải quyết vấn đề thứ hai. Tôi nghĩ rằng nó đáng nói đến như là phiên bản 2.2.0 của plugin android cho gradle, 'proguard-android.txt' không còn được sử dụng và thay vào đó các quy tắc mặc định được tạo tại thời gian xây dựng. Nguồn: [Plugin Android cho Gradle, bản sửa đổi 2.2.0] (https://developer.android.com/studio/releases/gradle-plugin.html) – aProperFox

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