Android混淆打包

混淆打包腳本

task deleteOldJar(type: Delete) { // 刪除無用的舊包
    delete 'build/outputs/jar/TEST1.jar'
    delete '../autobuild/output/TEST2.jar'
}

task exportJar(type: Jar,dependsOn: [deleteOldJar,build]) { // 打包,此處打的包沒有混淆
    destinationDir = file("/build/outputs/jar/") // 生成的打包文件存儲位置
    //打包目錄下的特定的class文件,使用includes指定要包含的文件,使用excludes指定要排除的文件
        from fileTree(dir: "build/intermediates/javac/$rootProject.buildType/compileReleaseJavaWithJavac/classes",
                includes: ['com/xxxx/**/*.class']
                ,excludes: ['**/R.class', '**/R$*.class'])
//    include('com/xxxx/externalinterface/*.class')
//    from zipTree('libs/xxxxxx.jar')
//    into project.getRootProject().getRootDir().absolutePath + "/autobuild/input"
}

task copyJar(type: Copy,dependsOn: [exportJar]){ // 複製打好的包到指定路徑
    from file('build/outputs/jar/*.jar')
    into project.getRootProject().getRootDir().absolutePath + "/autobuild/input"
}

task makeProguardJar(type: ProGuardTask,dependsOn: [copyJar]){ // 混淆打包
//需要編譯到一個jar包中的所有源數據,包含jar,aar,class目錄等
    injars "../autobuild/input/TEST1.jar"
//    injars 'libs/XXXXX.jar'   // 第三方JAR包,由於已經被混淆過了,所以排除掉不需要混淆

    outjars '../autobuild/output/TEST.jar'
    configuration 'proguard-rules.pro'
}

常用混淆proguard-rules.pro

-optimizationpasses 5  #指定代碼的迭代優化次數
-dontusemixedcaseclassnames  #不使用大小寫名稱的類名
-dontskipnonpubliclibraryclasses   #指定不忽略非公共類庫
-dontpreverify      #混淆時不做預校驗
-verbose            #混淆時是否記錄日誌
-optimizations !code/simplification/arthmetic,!field/*,!class/merging/*     #優化
-ignorewarnings

-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 no.nordicsemi.android.dfu.DfuBaseService

-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

-keepclasseswithmembers class * {
    public <init>(android.content.Context,android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context,android.util.AttributeSet,int);
}

-keepclassmembers class * extends android.app.Activity {
    public void *(android.view.View);
}

-keep class * extends android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}


-keepclassmembers class * {
    public int getSlotList(**);
}


#Keep - Library. Keep all public and protected classes, fields, and methods.
#-keep public class * {
#    public <fields>;
#    public <methods>;
#}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章