android混淆自定义类名,AndroidStudio生成自定义的混淆jar包

在以前曾经写过两篇文章,关于是生成jar包和引用jar的文章,建议先看这两篇文章。

今天我就给大家交给大家studio如何生成带混淆的jar包,其实和上一篇文章差不多,只不过是多了一些混淆文件。首先我们先新建一个module(我把它新建成了一个library)。在用AndroidStudio生成混淆jar的时候也百度过很多文章,但是大多都没有用。

0818b9ca8b590ca3270a3433284dd417.png

为了一会给大家演示混淆后的效果,这里创建了几个文件 MainActivity、UserBean、LogUtil详细见demo

0818b9ca8b590ca3270a3433284dd417.png

然后再在module的gradle中配置如下

def SDK_BASENAME = "mylibs";

def SDK_VERSION = "_v1.0";

def sdkDestinationPath = "build/outputs/jar/";

def zipFile = file('build/intermediates/bundles/release/classes.jar')

task deleteBuild(type: Delete) {

delete sdkDestinationPath + SDK_BASENAME + SDK_VERSION + ".jar"

}

task makeJar(type: Jar) {

from zipTree(zipFile)

from fileTree(dir: 'src/main', includes: ['assets/**']) // 打包assets目录下的所有文件

baseName = SDK_BASENAME + SDK_VERSION

destinationDir = file(sdkDestinationPath)

}

makeJar.dependsOn(deleteBuild, build)

上面的配置具体我就不讲解他们是什么意思了。

因为我们是自己手动混淆了,所以要指定混淆规则,然后打开module的proguard-rules.pro文件,将AndroidStudio默认的混淆文件复制、粘贴到proguard-rules.pro中。

0818b9ca8b590ca3270a3433284dd417.png

我的proguard-rules.pro文件

0818b9ca8b590ca3270a3433284dd417.png

全部proguard-rules.pro配置如下

###########################以下是AndroidStudio自带的混淆配置协议###############################

# 表示混淆时不使用大小写混合类名

-dontusemixedcaseclassnames

# 表示不跳过library中的非public的类

-dontskipnonpubliclibraryclasses

# 打印混淆的详细信息

-verbose

# Optimization is turned off by default. Dex does not like code run

# through the ProGuard optimize and preverify steps (and performs some

# of these optimizations on its own).

-dontoptimize

# 表示不进行校验,这个校验作用 在java平台上的

-dontpreverify

# Note that if you want to enable optimization, you cannot just

# include optimization flags in your own project configuration file;

# instead you will need to point to the

# "proguard-android-optimize.txt" file instead of this one from your

# project.properties file.

#使用注解需要添加

-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

#指定不混淆所有的JNI方法

-keepclasseswithmembernames class * {

native ;

}

# keep setters in Views so that animations can still work.

# see http://proguard.sourceforge.net/manual/examples.html#beans

#所有View的子类及其子类的get、set方法都不进行混淆

-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

# 不混淆Activity中参数类型为View的所有方法

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}

# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations

# 不混淆Enum类型的指定方法

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

# 不混淆Parcelable和它的子类,还有Creator成员变量

-keepclassmembers class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator CREATOR;

}

# 不混淆R类里及其所有内部static类中的所有static变量字段

-keepclassmembers class **.R$* {

public static ;

}

# The support library contains references to newer platform versions.

# Don't warn about those in case this app is linking against an older

# platform version. We know about them, and they are safe.

# 不提示兼容库的错误警告

-dontwarn android.support.**

# Understand the @Keep support annotation.

-keep class android.support.annotation.Keep

-keep @android.support.annotation.Keep class * {*;}

-keepclasseswithmembers class * {

@android.support.annotation.Keep ;

}

-keepclasseswithmembers class * {

@android.support.annotation.Keep ;

}

-keepclasseswithmembers class * {

@android.support.annotation.Keep (...);

}

#################################以下是自己添加的混淆协议###################################

#下面代码中的路径配置,你要修改成与你相对应的路径

#引入依赖包rt.jar(jdk路径)(注意:如在makeJar的时候提示指定了两次,可以将其注释掉)

-libraryjars 'C:\Android_Develop_Tools\Java\jdk1.8.0_101\jre\lib\rt.jar'

#引入依赖包android.jar(android SDK路径)(注意:如在makeJar的时候提示指定了两次,可以将其注释掉)

#-libraryjars 'C:\Android_Develop_Tools\sdk\platforms\android-23\android.jar'

#如果用到Appcompat包,需要引入(注意:如在makeJar的时候提示指定了两次,可以将其注释掉)

#-libraryjars 'D:\AndroidStudioProjects\MyApplication\mylibrary\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.4.0\jars\classes.jar'

#-libraryjars 'D:\AndroidStudioProjects\MyApplication\mylibrary\build\intermediates\exploded-aar\com.android.support\support-v4\23.4.0\jars\classes.jar'

#忽略警告

-ignorewarnings

#保证是独立的jar,没有任何项目引用,如果不写就会认为我们所有的代码是无用的,从而把所有的代码压缩掉,导出一个空的jar

#-dontshrink

#保护泛型

-keepattributes Signature

-keep class com.lcw.mylibrary.LogUtil{

public *;

}

最后的我是禁止混淆LogUtil工具类,以便形成对比。根据混淆配置是AndroidStudio默认不混淆MainActivity,我们在也不混淆LogUtil。

然后你就在Terminal中输入

gradlew makeJar

或者是双击 makeJar

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

我们将生成的jar包解压可以看到MainActivity和LogUtil没有被混淆,这就说明成功了。

0818b9ca8b590ca3270a3433284dd417.png

注意:有可能你在执行命令的时候遇到下面类似的错误提示classes.jar is specified twice,说我们的classes.jar  指定了两次

0818b9ca8b590ca3270a3433284dd417.png

解决方式:在proguard-rules.pro中将其注释掉即可

0818b9ca8b590ca3270a3433284dd417.png

想及时获取更多的文章,请关注我的微信订阅号

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值