Android_Proguard code obfuscator, androidproguard

Source: Internet
Author: User
Tags xml attribute

Android_Proguard code obfuscator, androidproguard

1. obfuscators Overview

Is an important protection method.

Obfuscators are integrated into android build systems, so you do not have to call them manually. At the same time, obfuscators run only when building applications in release mode, so you do not have to deal with obfuscation code when building a program in debug mode. This document describes how to enable and configure obfuscators, and decode the stack trace information (stack traces) by using the trace (retrace) tool.


2. Enable obfuscators

After you create an Android project, a proguard. cfg file is automatically created under the root directory of the project. This file defines how obfuscators optimize and confuse your code, so it is very important to know how to customize according to your needs. The default configuration file only covers the general situation, so you may need to edit it as needed. The following content is about how to configure the obfuscator by customizing the obfuscator configuration file.

To enable the obfuscator as part of the Ant or Eclipse build process, you can set the proguard. config attribute in the <project_root>/default. properties file. The path can be an absolute path or a relative path of the Project root directory.

If you want the proguard. cfg file to be in the default location (the root directory of the project), you can specify the location as follows: proguard. config = proguard. cfg,Invalid obfuscation in debug mode, Which is valid through export.


3. Meanings of files generated after obfuscators

(1).dump.txt

The internal structure of all class files in the pai.apk package.

(22.16.mapping.txt

Lists the mappings between source code and obfuscated classes, methods, and attribute names. This file is useful for bug reports after construction, because it translates obfuscated stack trace information into classes, methods, and member names in the source code. For more information, view the decoded stack trace information.

(32.16.seeds.txt

List unobfuscated classes and members.

(42.16.usage.txt

Extract the code from .apk.

Note: These files will be overwritten by the latest files each time they are built in release mode. Therefore, each time you release a program, you must save a copy of these files to prevent obfuscation of bug reports generated during build. You need to save the generated Proguard files.


4. obfuscated code stack trace information

When code is obfuscated and a stack debugging information is output, these methods are confused. Although debugging can be performed, debugging becomes difficult. Fortunately, every time the obfuscator runs, it will be output to the <project_root>/bin/proguard/mapping.txt file, which contains the original class, the method and attribute name are mapped to the name after obfuscation. You should save the file every time you package it. Use <sdk_root>/tools/proguard/RetraceThe. sh script command can convert the stack debugging information after obfuscation to the stack debugging information before obfuscation.

Retrace. bat | retrace. sh [-verbose] mapping.txt [<stacktrace_file = stack information file generated by a program bug>]

$sh /Applications/ADT/sdk/tools/proguard/bin/retrace.sh  -verbose /Users/zf/Documents/workspace/GridTest/proguard/mapping.txt /Users/zf/Desktop/bug.txt

5. Common obfuscation code
(1). Android engineering Obfuscation

# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html# Optimizations: If you don't want to optimize, use the# proguard-android.txt configuration file instead of this one, which# turns off the optimization flags.  Adding optimization introduces# certain risks, since for example not all optimizations performed by# ProGuard works on all versions of Dalvik.  The following flags turn# off various optimizations known to have issues, but the list may not# be complete or up to date. (The "arithmetic" optimization can be# used if you are only targeting Android 2.0 or later.)  Make sure you# test thoroughly if you go this route.-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*-optimizationpasses 5-allowaccessmodification-dontpreverify# The remainder of this file is identical to the non-optimized version# of the Proguard configuration file (except that the other file has# flags to turn off optimization).-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-verbose-keepattributes *Annotation*-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native-keepclasseswithmembernames class * {    native <methods>;}# 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 {  public static final android.os.Parcelable$Creator *;}-keepclassmembers class **.R$* {    public static <fields>;}

(2) introduce the Gson package
##---------------Begin: proguard configuration for Gson  ----------  # Gson uses generic type information stored in a class file when working with fields. Proguard  # removes such information by default, so configure it to keep all of it.  -keepattributes Signature    # Gson specific classes  -keep class sun.misc.Unsafe { *; }  -keep class com.google.gson.stream.** { *; }  -keep class com.google.gson.examples.android.model.** { *; }   -keep class com.google.gson.** { *;}    ##---------------End: proguard configuration for Gson  ---------- 

Who will use the Java code obfuscator ProGuard48

Obfuscators are responsible for converting a software into something that is hard to understand.
The premise is that the original software is correct.
When it finds that the software contains abnormal writing,
It is required to be modified before obfuscation.
If the '-ignorewarnings' option is mandatory, obfuscation can be performed directly,
However, the results may be incorrect.

Teach a Java obfuscator: the obfuscation quality of ProGuard

Obfuscation can only be the name of the other method, and the variable name can be obfuscated. Internal code can only be obfuscation of strings, compression, and so on.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.