AndroidStudio生成自定义的混淆jar包(同时将assets目录打入jar包)(二)(by 星空武哥)
2016-11-10 00:42
555 查看
转载请标注原文地址:http://blog.csdn.net/lsyz0021/article/details/53107595
在以前曾经写过两篇文章,关于是生成jar包和引用jar的文章,建议先看这两篇文章。
《Android Studio生成自定义的jar包》:http://blog.csdn.net/lsyz0021/article/details/52162414
《Android Studio如何引用so、arr、jar包》:http://blog.csdn.net/lsyz0021/article/details/52976439
Android Studio生成自定义jar包(同时将assets目录打入jar包)(一)
Android Studio生成自定义混淆jar包(同时将assets目录打入jar包)(二)
今天我就给大家交给大家studio如何生成带混淆的jar包,其实和上一篇文章差不多,只不过是多了一些混淆文件。首先我们先新建一个module(我把它新建成了一个library)。在用AndroidStudio生成混淆jar的时候也百度过很多文章,但是大多都没有用。
为了一会给大家演示混淆后的效果,这里创建了几个文件 MainActivity、UserBean、LogUtil详细见demo
然后再在module的gradle中配置如下
上面的配置具体我就不讲解他们是什么意思了。
因为我们是自己手动混淆了,所以要指定混淆规则,然后打开module的proguard-rules.pro文件,将AndroidStudio默认的混淆文件复制、粘贴到proguard-rules.pro中。
我的proguard-rules.pro文件
全部proguard-rules.pro配置如下
最后的我是禁止混淆LogUtil工具类,以便形成对比。根据混淆配置是AndroidStudio默认不混淆MainActivity,我们在也不混淆LogUtil。
然后你就在Terminal中输入
或者是双击 makeJar
我们将生成的jar包解压可以看到MainActivity和LogUtil没有被混淆,这就说明成功了。
注意:有可能你在执行命令的时候遇到下面类似的错误提示classes.jar is specified twice,说我们的classes.jar 指定了两次
解决方式:在proguard-rules.pro中将其注释掉即可
想及时获取更多的文章,请关注我的微信订阅号
在以前曾经写过两篇文章,关于是生成jar包和引用jar的文章,建议先看这两篇文章。
《Android Studio生成自定义的jar包》:http://blog.csdn.net/lsyz0021/article/details/52162414
《Android Studio如何引用so、arr、jar包》:http://blog.csdn.net/lsyz0021/article/details/52976439
Android Studio生成自定义jar包(同时将assets目录打入jar包)(一)
Android Studio生成自定义混淆jar包(同时将assets目录打入jar包)(二)
今天我就给大家交给大家studio如何生成带混淆的jar包,其实和上一篇文章差不多,只不过是多了一些混淆文件。首先我们先新建一个module(我把它新建成了一个library)。在用AndroidStudio生成混淆jar的时候也百度过很多文章,但是大多都没有用。
为了一会给大家演示混淆后的效果,这里创建了几个文件 MainActivity、UserBean、LogUtil详细见demo
然后再在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中。
我的proguard-rules.pro文件
全部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 <methods>; } # 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 <fields>; } # 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 <methods>; } -keepclasseswithmembers class * { @android.support.annotation.Keep <fields>; } -keepclasseswithmembers class * { @android.support.annotation.Keep <init>(...); } #################################以下是自己添加的混淆协议################################### #下面代码中的路径配置,你要修改成与你相对应的路径 #引入依赖包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
我们将生成的jar包解压可以看到MainActivity和LogUtil没有被混淆,这就说明成功了。
注意:有可能你在执行命令的时候遇到下面类似的错误提示classes.jar is specified twice,说我们的classes.jar 指定了两次
解决方式:在proguard-rules.pro中将其注释掉即可
想及时获取更多的文章,请关注我的微信订阅号
相关文章推荐
- Android Studio生成自定义jar包(同时将assets目录打入jar包)(一)(by 星空武哥)
- AndroidStudio生成自定义的混淆jar包(同时将assets目录打入jar包)(二)(by 星空武哥)
- [置顶] Android Studio生成自定义jar包(同时将assets目录打入jar包)(一)(by 星空武哥)
- Android Studio生成自定义jar包(同时将assets目录打入jar包)
- android studio module 如何生成jar包并进行混淆
- Android Studio生成混淆jar包
- AndroidStudio安全管理签名文件keystroe和签名密码(by 星空武哥)
- android studio生成arr包或 jar包及混淆
- Android Studio生成包含assets的Jar
- Jenkins持续化构建Android项目(二)-构建Android项目生成apk(by 星空武哥)
- android studio创建assets目录并且利用webView加载其html(by 星空武哥)
- ubuntu下搭建android开发环境(三)ubuntu安装搜狗输入法(by 星空武哥)
- Android Studio & ADT 快捷键配置文件所在目录,自定义后可导入导出。for mac
- android studio的assets目录下存放ttf字体格式的问题
- Android WebView使用详解包括js互调(by 星空武哥)
- Android的menu(菜单)按钮的使用(by 星空武哥)
- ubuntu下搭建android开发环境(一)安装ubuntu系统(by 星空武哥)
- 9.14学习笔记 studiojar包生成,android插件,毛玻璃
- android 项目生成jar混淆
- Android有关SDK生成的jar包的加密与混淆