4
Bo mt- ti ưu Jack Lam Page 1 Hướng dn sdng Proguard 1 Gii thiu vproguard Proguard là mt công cgiúp bn rút ngn, tối ưu và xóa bỏ những đoạn mã, class dư thưa không sử dng. Kết qulà mt file apk vi kích thc nhhơn, điều là khó khăn và mất thi gian đối vi nhng ksư. Cũng như là tạo skhó khăn hơn trong việc dịch ngược li code. Nó rt quan trng cho vic nhng ng dng ca bn cn bo mt, khi bn có nhng ng dụng đăng kí bản quyn. Proguard tích hp bên trong hthng android build System, Proguard chy khi bạn để chế độ phát hành[release]. Bn skhông thực thi được chuyện đó khi bạn để chế độ debug. Phn tiếp theo sgii thiu bn sdụng Proguard như thế nào 2 Sdng proguard Khi bn to mt project Android Application, bn sthy file proguard-project.txt tđộng to ra thư mc root ca project. File này sđịnh nghĩa và cu hình cho vic tối ưu và rút gn code, nó rt quan trng cho vic mà bn hiểu như thế nào cách bn tùy chnh vic tối ưu này. File cu hình chbao phnhững trường hp chung, bn stùy chnh nó nhng phn bn cho là cn thiết. Dưới đây sẽ hướng dn bn cu hình file Bước 1: Trước nht là vào file <project_root>/project.properties Cách 1: Bn có thbcomment #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt và chcần vào bước 2 cu hình file proguard-project.txt Nhưng tôi dùng cách thêm dòng này vào proguard.config=proguard.cfg Trước khi tôi qua bước 2 sgii thiu vvic khi bn build chế độ release thì sxut hin mt sfile output sau :

Pro Guard

  • Upload
    loicuoi

  • View
    120

  • Download
    1

Embed Size (px)

DESCRIPTION

Pro Guard

Citation preview

Page 1: Pro Guard

Bảo mật- tối ưu

Jack Lam Page 1

Hướng dẫn sử dụng Proguard

1 Giới thiệu về proguard Proguard là một công cụ giúp bạn rút ngắn, tối ưu và xóa bỏ những đoạn mã, class dư thưa không sử dụng. Kết quả là một file apk với kích thức nhỏ hơn, điều là khó khăn và mất thời gian đối với những kỹ sư. Cũng như là tạo sự khó khăn hơn trong việc dịch ngược lại code. Nó rất quan trọng cho việc những ứng dụng của bạn cần bảo mật, khi bạn có những ứng dụng đăng kí bản quyền.

Proguard tích hợp bên trong hệ thống android build System, Proguard chạy khi bạn để nó ở chế độ phát hành[release]. Bạn sẽ không thực thi được chuyện đó khi bạn để ở chế độ debug.

Phần tiếp theo sẽ giới thiệu bản sử dụng Proguard như thế nào

2 Sử dụng proguard Khi bạn tạo một project Android Application, bạn sẽ thấy file proguard-project.txt tự động tạo ra ở thư mục root của project.

File này sẽ định nghĩa và cấu hình cho việc tối ưu và rút gọn code, nó rất quan trọng cho việc mà bạn hiểu như thế nào cách bạn tùy chỉnh việc tối ưu này.

File cấu hình chỉ bao phủ những trường hợp chung, bạn sẽ tùy chỉnh nó ở những phần bạn cho là cần thiết. Dưới đây sẽ hướng dẫn bạn cấu hình file

Bước 1:

Trước nhất là vào file <project_root>/project.properties

Cách 1: Bạn có thể bỏ comment

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt và chỉ cần vào bước 2 cấu hình file proguard-project.txt

Nhưng tôi dùng cách thêm dòng này vào proguard.config=proguard.cfg

Trước khi tôi qua bước 2 sẽ giới thiệu về việc khi bạn build ở chế độ release thì sẽ xuất hiện một số file output sau :

Page 2: Pro Guard

Bảo mật- tối ưu

Jack Lam Page 2

Dump.txt: mô tả bên trong cấu trúc của apk Mapping.txt : liệt kê danh sách tên giữa các các thuộc tính, phương thức gốc so với việc sau khi

tối ưu. File này rất quan trọng khi nhận được một lỗi từ việc report sau khi release, và nó sắp xếp lại tên các phương thức và các tham số ban đầu.

Seeds.txt : liệt kê những phần tử không được tối ưu. Usage.txt : Liệt kê những code mà đã bị xóa bỏ không được sử dụng. tham khảo thêm [stack

track] ở đây http://developer.android.com/tools/help/proguard.html#decoding Vị trí của nó sẽ được đặt ở bin/proguard nếu bạn đang sử dụng Ant Và ở <root>/proguard nếu bạn đang sử dụng Eclipse.(Chúng ta đang dùng cái này)

Bước 2: bắt đầu cấu hình ở file Proguard.cfg

Giới thiệu sơ qua một số lệnh:

# phần này sẽ cho biết input các file jars và sẽ tạo ra 1 file jar nào -injars bin/classes -injars libs -outjars bin/classes-processed.jar # sử dụng thư viện -libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar # tối ưu theo năm bước hoặc là 2 -optimizationpasses 5 -dontpreverify # thay thế các class thành a,b, c,d … -repackageclasses '' # chấp nhận quyền sửa đổi khi thay thế -allowaccessmodification -optimizations !code/simplification/arithmetic # giữ lại các comment -keepattributes *Annotation* # những đối tượng Activity, Application,.. sẽ được giữa lại -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(...); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * {

Page 3: Pro Guard

Bảo mật- tối ưu

Jack Lam Page 3

public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class * extends android.content.Context { public void *(android.view.View); public void *(android.view.MenuItem); } -keepclassmembers class * implements android.os.Parcelable { static android.os.Parcelable$Creator CREATOR; } -keepclassmembers class **.R$* { public static <fields>; } # Xóa các log -assumenosideeffects class android.util.Log { public static *** d(...); public static *** v(...); public static *** w(...); public static *** e(...); public static *** i(...); } Một số thư viện bên ngoài để có thể load lên và sử dụng được, ta cần khai báo ví dụ như

-keep class io.vov.utils.** { *; } -keep class io.vov.vitamio.** { *; } # keep setters in Views so that animations can still work. # see http://proguard.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # We want to keep methods in Activity that could be used in the XML attribute onClick -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable {

Page 4: Pro Guard

Bảo mật- tối ưu

Jack Lam Page 4

public static final android.os.Parcelable$Creator *; } -keepclassmembers class **.R$* { public static <fields>; } # The support library contains references to newer platform versions. # Don't warn about those in case this app is linking against an older # platform version. We know about them, and they are safe. -dontwarn android.support.** -dontwarn org.apache.**

3 [Đánh giá gỡ lỗi cho mỗi lần công bố ứng dụng] Lưu file mapping.txt mỗi lần release cái mà sẽ được công bố cho người dùng, bằng cách giữ lại một bản copy mapping.txt bạn có thể đảm bảo rằng mỗi lần chương trình sinh ra lỗi thì user có thể submit stack track. Mỗi lần [release] một bản mới thì file mapping sẽ được ghi đè, vì thế bạn cần quan tâm tới việc lưu trữ các phiên bản cho file mapping để dễ dàng giám sát và bảo trì chương trình.

Vì thế bạn nên đổi tên file mapping này theo tên phiên bản đánh kèm với file APK.

4 Tài liệu tham khảo http://developer.android.com/tools/help/proguard.html http://proguard.sourceforge.net/#manual/examples.html http://aiti-aptech.edu.vn/thu-thuat-bao-ve-code-voi-proguard/ http://developer.android.com/tools/help/proguard.html#decoding