Làm cách nào để sử dụng ProGuard trong Android Studio?


98

Đây là dự án đầu tiên của tôi trong Android Studio và mã của các ứng dụng của tôi không bị xáo trộn. Tôi đang sử dụng cấu hình này trong tệp build.gradle: nhập mô tả hình ảnh ở đây

Tôi đang sử dụng Bản dựng> Tạo APK đã ký ... với Run Proguard được chọn. Và, khi tôi đã thử nghiệm bằng Apk_OneClick.v4.2, mã của tôi hoàn toàn dễ đọc:

nhập mô tả hình ảnh ở đây

Làm ơn giúp tôi. :(


hiển thị các quy tắc proguard của bạn được xác định trong tệp văn bản cho mã obfuscate.
pyus13

Làm thế nào để kiểm tra xem ứng dụng có bị xáo trộn hay không?
VVB

@VVB by reverse engeneering APK-file Tôi đoán: D
hotHead

Câu trả lời:


71

Có thể bạn không thực sự ký vào bản phát hành của APK thông qua trình hướng dẫn ký. Bạn có thể tạo APK phát hành từ dòng lệnh bằng lệnh:

./gradlew assembleRelease

hoặc bạn có thể chọn biến thể phát hành từ chế độ xem Biến thể và xây dựng nó từ GUI:

Cửa sổ chính của IDE hiển thị các Biến thể Xây dựng


Tuyệt quá! Tôi đã thử nghiệm thay đổi gỡ lỗi thành runProguard true và hoạt động hoàn hảo. Bây giờ tôi đọc câu trả lời của bạn, và hoạt động !!!! Người đàn ông tuyệt vời! Cảm ơn bạn.
Felipe Porge Xavier

Rất tiếc, tôi đã vô tình đặt "assemblyDebug" thay vì "assemblyRelease" trong hướng dẫn dòng lệnh của mình. Tôi đã sửa câu trả lời của mình.
Scott Barta

Đường dẫn của tệp .apk được xuất qua dòng lệnh là gì?
Shajeel Afzal

50

Bạn có thể định cấu hình tệp build.gradle của mình để triển khai proguard. Nó có thể ở cấp mô-đun hoặc cấp dự án.

 buildTypes {

    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

    }

}

Cấu hình được hiển thị là dành cho mức gỡ lỗi nhưng bạn có thể viết các phiên bản xây dựng của riêng bạn như hình bên dưới bên trong buildTypes:

    myproductionbuild{
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }

Tốt hơn nên gỡ lỗi của bạn với minifyEnabled falsevà sản xuất và các bản dựng khác như minifyEnabled true.

Sao chép tệp proguard-rules.txt của bạn trong thư mục gốc của mô-đun hoặc thư mục dự án của bạn như

$YOUR_PROJECT_DIR\YoutProject\yourmodule\proguard-rules.txt

Bạn có thể thay đổi tên tệp của mình theo ý muốn. Sau khi cấu hình, sử dụng một trong ba tùy chọn có sẵn để tạo bản dựng của bạn theo buildType

  1. Chuyển đến nhiệm vụ gradle trong bảng điều khiển bên phải và tìm kiếm các assembleRelease/assemble(#your_defined_buildtype)nhiệm vụ trong mô-đun

  2. Đi tới Bản dựng biến thể trong Bảng điều khiển bên trái và chọn bản dựng từ trình đơn thả xuống

  3. Đi tới thư mục gốc của dự án trong File Explorer và mở cmd / terminal và chạy

Linux ./gradlew assembleRelease or assemble(#your_defined_buildtype)

các cửa sổ gradlew assembleRelease or assemble(#your_defined_buildtype)

Bạn có thể tìm thấy apk trong thư mục mô-đun / bản dựng của mình.

Thông tin thêm về cấu hình và vị trí tệp proguard có sẵn tại liên kết

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard


Tôi có thể sử dụng myproductionbuild ở đâu?
Felipe Porge Xavier

ya, bạn đúng :) bạn có thể thấy điều tương tự trong tab Phiên bản xây dựng ở bảng điều khiển bên trái.
pyus13

Nhưng apk không có xáo trộn ... :(
Felipe Porge Xavier

bạn đã viết cấu hình trong proguard-rule.txt, hãy xem một số ví dụ ở đây proguard.sourceforge.net/index.html#manual/examples.html
pyus13

Tôi không tìm thấy phương thức Gradle DSL runProguard ().
SleepNot

41

NB: Bây giờ thay vì

runProguard false

bạn sẽ cần sử dụng

minifyEnabled false

5
đoán nó phải được bộ true
anna_manzhula

1

Hãy thử đổi tên tệp 'proguard-rules.txt' thành 'proguard-android.txt' và xóa tham chiếu đến 'proguard-rules.txt' trong tệp gradle của bạn. Cuộc getDefaultProguardFile(...)gọi tham chiếu đến một tệp proguard mặc định khác, một tệp do Google cung cấp chứ không phải tệp đó trong dự án của bạn. Vì vậy, loại bỏ điều này cũng như để ở đây tệp gradle đọc:

buildTypes {
    release {
        runProguard true
        proguardFile 'proguard-android.txt'
    }
}

Đừng làm việc cho tôi. Tôi đặt proguard-android.txt tùy chỉnh của mình trong cùng một thư mục của proguard-rules.txt, nhưng không có gì thay đổi trong mã của tôi.
Felipe Porge Xavier

0

Các câu trả lời khác ở đây là tài liệu tham khảo tuyệt vời về việc sử dụng proguard. Tuy nhiên, tôi chưa từng thấy một vấn đề được thảo luận mà tôi gặp phải đó là một người suy nghĩ. Sau khi bạn tạo bản phát hành đã ký .apk, nó được đưa vào /releasethư mục trong ứng dụng của bạn nhưng ứng dụng của tôi có apk không có trong /releasethư mục. Do đó, tôi đã dành hàng giờ để dịch ngược apk sai tự hỏi tại sao các thay đổi proguard của tôi không ảnh hưởng. Hy vọng điều này sẽ giúp ai đó!


0

Đây là Một số Quy tắc Proguard Phổ biến nhất mà bạn cần thêm vào tệp proguard-rules.pro trong Android Sutdio.

ButterKnife

 -keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
 -keepclasseswithmembernames class * {
        @butterknife.* <fields>;
  }
 -keepclasseswithmembernames class * {
        @butterknife.* <methods>;
  }

Trang bị thêm

 -dontwarn retrofit.**
 -keep class retrofit.** { *; }
 -keepattributes Signature
 -keepattributes Exceptions

OkHttp3

 -keepattributes Signature
 -keepattributes *Annotation*
 -keep class okhttp3.** { *; }
 -keep interface okhttp3.** { *; }
 -dontwarn okhttp3.** 
 -keep class sun.misc.Unsafe { *; }
 -dontwarn java.nio.file.*
 -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 

Gson

 -keep class sun.misc.Unsafe { *; }
 -keep class com.google.gson.stream.** { *; }

Sự xáo trộn mã

-keepclassmembers class com.yourname.models** { <fields>; }
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.