Android混淆打包

本文详细介绍了如何使用Gradle进行Android应用的混淆打包过程,包括删除旧包、选择性地打包特定class文件、复制打包文件及使用ProGuard进行代码混淆。通过具体脚本示例,展示了Gradle任务的定义和依赖关系,以及常用的ProGuard规则,帮助开发者优化应用体积并提高安全性。
混淆打包脚本
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>;
#}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值