Android studioコード混同

6378 ワード

一、紹介:
apktool、dextojarなどのツールは、androidインストールパッケージを逆コンパイルしてソースコードを得ることができることを知っておく必要があります.他人に解読されたり、ソースが漏れたり、プログラムがコードを盗まれたりするのを減らすためだ.コードを混同する必要があります.androidのsdkではProGrardというツールを提供しています.コードを混同することができます(一般的には意味のない名前で名前を変更します)、使用していないコードを除去し、プログラムを最適化し、圧縮することで、あなたの考えを高めることができます.最近私が作ったプロジェクトは、私が配置した混同配置なので、研究してみました.ここで共有します.
在build.gradleでminifyEnabled trueを構成すると、コンパイル時にコードが混同されることを示します.
buildTypes {
        //         
        debug {
            //   Log
            buildConfigField "boolean", "LOG_DEBUG", "true"
            minifyEnabled false
            zipAlignEnabled true
            shrinkResources true
        }
        //       
        release {
            //    Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //  
            minifyEnabled true
            //Zipalign  
            zipAlignEnabled true
            //      resource  
            shrinkResources true
            //        
            //proguard-android.txt        
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

いくつかの一般的なパッケージのProguard構成はproguard-rulesにあります.Proでの構成、以下が基本的な構成
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in E:\SDK\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}
-dontskipnonpubliclibraryclasses #          
-optimizationpasses 5            #          
-dontusemixedcaseclassnames      #          
-dontpreverify                   #          
-verbose                         #          
-keepattributes *Annotation*     #     
-ignorewarning                   #     
-dontoptimize                    #            

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  #          

#         
-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.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class * extends android.app.Fragment
#     v4         
-keep public class * extends android.support.v4.app.Fragment

#      ,gradle build          
-dump class_files.txt            #apk    class     
-printseeds seeds.txt            #        
-printusage unused.txt           #         
-printmapping mapping.txt        #       

-keep public class * extends android.support.** #     v4  v7 ,   
-libraryjars libs/xxx.jar        #     jar ,  xxx jar  
-keep class com.xxx.**{*;}       #            
-dontwarn com.xxx**              #        
-keepattributes Signature        #     
-keepnames class * implements java.io.Serializable #   Serializable

-keepclassmembers class **.R$* { #      
  public static ;
}
-keepclasseswithmembernames class * {  #    native       
    native ;
}
-keepclasseswithmembers class * {      #             
    public (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {      #             
    public (android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity { #             
    public void *(android.view.View);
}
-keepclassmembers enum * {             #      enum      
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {         #    Parcelable     
    public static final android.os.Parcelable$Creator *;
}

ProGuard構成
前述したandroidは、2つのデフォルトのプロファイルを提供しています.その中で、彼のいくつかの構文を見ることができます.このセクションで説明します.
保存オプション(処理しないコンテンツを構成)
  • -keep{Modifier}{class_specification}指定したクラスファイルとクラスのメンバー
  • を保護
  • -keepclassmembers{modifier}{class_specification}指定したクラスのメンバーを保護します.このような保護を受けると、より良い
  • が保護されます.
  • -keepclasseswithmembers{class_specification}指定したクラスとクラスのメンバーを保護しますが、指定したすべてのクラスとクラスメンバーが存在することが条件です.
  • -keepnames{class_specification}指定したクラスとクラスのメンバー名を保護(ステップで削除しない場合)
  • -keepclassmembernames{class_specification}指定したクラスを保護するメンバーの名前(圧縮ステップで削除しない場合)
  • -keepclasseswithmembernames{class_specification}指定したクラスとクラスのメンバーの名前を保護します.指定したすべてのクラスメンバーが出席した場合(圧縮ステップの後)
  • -printseeds{filename}クラスとクラスのメンバー-keepオプションのリストをリストし、標準は所与のファイル
  • に出力する.
    あっしゅく
  • -dontshrink非圧縮入力クラスファイル
  • -printusage {filename}
  • -whyareyoukeeping {class_specification}

  • 最適化
  • -dontoptimize入力されたクラスファイルを最適化しない
  • -assumenosideeffects{class_specification}最適化時に指定されたメソッドを仮定し、副作用
  • はありません.
  • -allowaccessmodification最適化時に修飾子のあるクラスおよびクラスにアクセスおよび変更できるメンバー
  • 紛らわす
  • -dontobfuscate入力されたクラスファイルを混同しない
  • -obfuscationdictionary{filename}混同メソッドの名前として指定されたファイルのキーワードを使用する
  • -overloadaggressively混同時に侵入式重荷
  • を適用
  • -useuniqueclassmembernamesは、混同
  • を増加させるために統一された混同クラスのメンバー名を決定する.
  • -flattenpackagehierarchy{package_name}名前の変更されたすべてのパケットを再パッケージし、所与の単一パケットに
  • 配置する
  • -repackageclass{package_name}名前が変更されたすべてのクラスファイルを再パッケージし、所与の単一パッケージに
  • を配置します.
  • -dontusemixedcaseclassnames混同時に様々なクラス名が生成されない
  • -keepattributes {attribute_name,...} LineNumberTable,LocalVariableTable,SourceFile,Deprescated,Synthetic,Signature,and InnerClassなどの任意の属性を保護する.
  • -renamesourcefileattribute{string}ソースファイルで指定された文字列定数
  • を設定
    後のファイル名、クラス名、またはパッケージ名などはプレースホルダで代用できますか?1つの文字が複数の文字に一致することを示しますが、クラスの場合、前のパッケージ名には一致しません.
  • は、複数の文字を一致させ、前のパケット名を一致させることができます.

  • androidでandroid Manifestファイルのactivity,service,provider,receviterなどを混同することはできません.xmlで構成されているviewの中には混同できないものもあり、androidが提供するデフォルトの構成にはあります.