zoukankan      html  css  js  c++  java
  • Android 打包混淆

    将项目改成Module

    //项目build.gradle的applicationId注释掉
    修改apply plugin: 'com.android.library'

    打包混淆脚本

    //在项目的build.gradle中添加以下脚本
    
    //=======生成jar包脚本 start=============================================
    def SDK_BASENAME = "CIP";
    def SDK_VERSION = "_V1.1.1";
    def sdkDestinationPath = "build";//生成jar存放目录
    
    //打包release目录下的classes.jar(开启混淆后这个jar就是混淆的源码)----注意由于as版本原因有的在default目录
    def releaseJar = file('build/intermediates/packaged-classes/release/classes.jar')
    //打包debug目录下的classes.jar
    def debugJar = file('build/intermediates/packaged-classes/release/classes.jar')
    //将libs目录下的gson打入jar包
    def thirdPartyJar = file('libs/gson-2.8.0.jar')
    
    //打包jar前先删除原先的jar
    task deleteBuild(type: Delete) {
        delete sdkDestinationPath + SDK_BASENAME + SDK_VERSION + ".jar"
    }
    
    task makeJar(type: Jar) {
        from zipTree(releaseJar)//导出混淆的jar
        //from zipTree(debugJar)//导出未混淆的jar
        //from zipTree(thirdPartyJar)将第三方jar包打入jar包
        //from fileTree(dir: 'src/main', includes: ['assets/**'])//将assets目录打入jar包
        exclude('**/BuildConfig.class')//排除不必要的class文件
        baseName = SDK_BASENAME + SDK_VERSION
        destinationDir = file(sdkDestinationPath)
    }
    
    makeJar.dependsOn(deleteBuild, build)

     混淆配置proguard-rules.pro文件

    #############################################
    #
    # 对于一些基本指令的添加
    #
    #############################################
    # 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
    -optimizationpasses 5
    
    # 混合时不使用大小写混合,混合后的类名为小写
    -dontusemixedcaseclassnames
    
    # 指定不去忽略非公共库的类
    -dontskipnonpubliclibraryclasses
    
    # 这句话能够使我们的项目混淆后产生映射文件
    # 包含有类名->混淆后类名的映射关系
    -verbose
    
    # 指定不去忽略非公共库的类成员
    -dontskipnonpubliclibraryclassmembers
    
    # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
    -dontpreverify
    
    # 保留Annotation不混淆
    -keepattributes *Annotation*,InnerClasses
    
    # 避免混淆泛型
    -keepattributes Signature
    
    # 抛出异常时保留代码行号
    -keepattributes SourceFile,LineNumberTable
    
    # 指定混淆是采用的算法,后面的参数是一个过滤器
    # 这个过滤器是谷歌推荐的算法,一般不做更改
    -optimizations !code/simplification/cast,!field/*,!class/merging/*
    
    
    #############################################
    #
    # Android开发中一些需要保留的公共部分
    #
    #############################################
    
    # 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
    # 因为这些子类都有可能被外部调用
    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Appliction
    -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 * extends android.view.View
    -keep public class com.android.vending.licensing.ILicensingService
    
    # 保留实体类
    #-keep class 你的实体类所在的包.** { *; }
    
    # 保留support下的所有类及其内部类
    -keep class android.support.** {*;}
    
    # 保留继承的
    -keep public class * extends android.support.v4.**
    -keep public class * extends android.support.v7.**
    -keep public class * extends android.support.annotation.**
    
    # 保留R下面的资源
    -keep class **.R$* {*;}
    
    # 保留本地native方法不被混淆
    -keepclasseswithmembernames class * {
        native <methods>;
    }
    
    # 保留在Activity中的方法参数是view的方法,
    # 这样以来我们在layout中写的onClick就不会被影响
    -keepclassmembers class * extends android.app.Activity{
        public void *(android.view.View);
    }
    
    # 保留枚举类不被混淆
    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    
    # 保留我们自定义控件(继承自View)不被混淆
    -keep public class * extends android.view.View{
        *** get*();
        void set*(***);
        public <init>(android.content.Context);
        public <init>(android.content.Context, android.util.AttributeSet);
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }
    
    # 保留Parcelable序列化类不被混淆
    -keep class * implements android.os.Parcelable {
        public static final android.os.Parcelable$Creator *;
    }
    
    # 保留Serializable序列化的类不被混淆
    -keepclassmembers class * implements java.io.Serializable {
        static final long serialVersionUID;
        private static final java.io.ObjectStreamField[] serialPersistentFields;
        !static !transient <fields>;
        !private <fields>;
        !private <methods>;
        private void writeObject(java.io.ObjectOutputStream);
        private void readObject(java.io.ObjectInputStream);
        java.lang.Object writeReplace();
        java.lang.Object readResolve();
    }
    
    # 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
    -keepclassmembers class * {
        void *(**On*Event);
        void *(**On*Listener);
    }
    
    # webView处理,项目中没有使用到webView忽略即可
    -keepclassmembers class fqcn.of.javascript.interface.for.webview {
        public *;
    }
    -keepclassmembers class * extends android.webkit.webViewClient {
        public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
        public boolean *(android.webkit.WebView, java.lang.String);
    }
    -keepclassmembers class * extends android.webkit.webViewClient {
        public void *(android.webkit.webView, jav.lang.String);
    }
    
    # 不混淆的第三方包
    -dontwarn com.bit.**
    -keep class com.bit.** {*;}
    -dontwarn com.ftdi.j2xx.**
    -keep class com.ftdi.j2xx.** {*;}
    -dontwarn com.hdos.idCardUartDevice.**
    -keep class com.hdos.idCardUartDevice.** {*;}
    # 不混淆的公开类
    -keep class com.byid.android.ReadPort {*;}
    -keep class android_serialport_api.SerialPortFinder {*;}
    #-keep class com.by100.util.CardProtUtilUtil {*;}
    -keep class com.byid.android.IDCard {*;}

     开始打包

    打开Gradle projects
    
    找到项目名展开
    
    找到other文件夹展开
    
    下拉找到makeJar,双击运行等待打包完成
  • 相关阅读:
    GIS Tools for Hadoop 详细介绍
    凤凰涅槃,浴火重生(2013年总结)
    13年我们依然在路上
    HDU 4022 Bombing (map + multiset)
    ArcGIS 10.2 操作SQLite
    hdu1690 Bus System (dijkstra)
    HDU 4704 Sum
    Dark Side of Cloud Storage —— 数据对像的分块消重
    gdb x查看二进制
    信号 signal sigaction补充
  • 原文地址:https://www.cnblogs.com/94xiyang/p/9429301.html
Copyright © 2011-2022 走看看