转载请标注原文地址: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中配置如下

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中将其注释掉即可

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

AndroidStudio生成自定义的混淆jar包(同时将assets目录打入jar包)(二)(by 星空武哥)相关推荐

  1. AndroidStudio Gradle第三依赖统一管理(by 星空武哥)

    转载请标注原创地址:http://blog.csdn.net/lsyz0021/article/details/54377150 AndroidStudio由于使用了gradle的进行项目构建,使我们 ...

  2. android 签名密码,AndroidStudio安全管理签名文件keystroe和签名密码(星空武哥)

    AndroidStudio由于使用了gradle的进行项目构建,使我们开发app方便很多,今天我就给大家列出几点是用gradle的方便之处. 我们在使用AndroidStudio进行release版的 ...

  3. idea将指定目录打成jar包

    文章目录 idea将指定目录打成jar包 idea将指定目录打成jar包 首先,idea没有标记源码目录, 直接将源码打包成jar包的方法,需要找到编译后的class目录进行绑定. 其次,说一下本次的 ...

  4. android生成aar无效,android studio生成aar包并在其他工程引用aar包的方法

    1.aar包是android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 ...

  5. 一个android工程生成两个aar,android studio生成aar包并在其他工程引用aar包(示例代码)...

    1.aar包是android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 ...

  6. 程序员的乐趣,生成自定义二维码,5 行 Python 代码就搞定

    选自 | towardsdatascience 作者 | Arindom Bhattacharjee 转自 | 机器之心 参与 | 杜伟.小舟 随处可见的二维码是怎么生成的?自己做一个试试吧. 随着互 ...

  7. lib目录和maven dependency目录的jar包冲突

    用eclipse时新建项目时,会在lib目录下自动生成一些jar包,然后又在pom.xml文件中添加了依赖,导致lib下的jar包和maven dependency目录下的jar包产生了冲突.刚开始r ...

  8. android支持第三方jar包,以及Eclipse如何导入jar包

    2019独角兽企业重金招聘Python工程师标准>>> 通常我们进行android开发的时候运用到了两种格式的jar包文件. 1.在eclipse环境下,引入第三方jar包,指的是通 ...

  9. java扫描包下类_实现获取扫描指定包路径下的jar文件或class文件JarPojoHandler类示例代码...

    通过JarPojoHandler类实现了扫描指定路径下如何获取所有的JAR包或class文件,可以对特定class对象文件筛选过滤等,具体代码如下所示import java.io.File;@b@im ...

最新文章

  1. 造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:
  2. js遍历树节点下的所有子节点_【数据结构与算法】(3)——树和二叉树
  3. 【MySQL】 批量修改数据表和数据表中所有字段的字符集
  4. 纯Python模块发布setup脚本编写示例
  5. Neo4j【付诸实践 01】SpringBoot集成报错org.neo4j.driver.exceptions.ClientException:服务器不支持此驱动程序支持的任何协议版本(解决+源代码)
  6. linux开发板显示横向彩虹,给 Linux 终端的输出添加彩虹特效的命令
  7. php无法连接mysql_php无法连接数据库
  8. 通过www服务器提供的起始网页就能访问,2010春2题目.doc
  9. PHP血清蛋白的功效,血清蛋白美容液的作用是什么
  10. qt 提升 全局包含_研讨引思想碰撞,学习促共同提升 | 粤渝两地幼教同行深度交流...
  11. cocos 层级渲染与管理
  12. 苹果手机又刷屏啦!!它是如何做到的?
  13. 蓝桥杯 T32大臣的旅费
  14. 【uni-app】uni-app 封装 uni.request 携带请求头
  15. 软件设计师提纲+复习资料整理(上午题)
  16. hlgoj 1766 Cubing
  17. 要成为游戏开发人员需要有以下书籍(二)
  18. 搭建基于XDEBUG的调试环境
  19. 超详细Redis入门教程——Redis概述
  20. 携程-出行产品未来14个月销量预测-第七名代码解读

热门文章

  1. 技术培训 | Git,你真的会用么?
  2. 后台管理系统之商品规格管理
  3. 地平线 旭日X3 SDB开发板 (一) 环境及案例运行记录
  4. java生成个性化二维码
  5. 对Java新员工培训练习的评价:玩具
  6. 利用CSS和jquery 实现圆环统计图
  7. Redis 对象的数据结构原理 - SDS、Inset、Dict、ZipList、QuickList、SkipList、RedisObject
  8. 新闻稿写作的具体要求是什么?
  9. Idea配置类和方法的注释, for循环快捷键
  10. 打开计算机窗口抖动是什么原因,Win7电脑屏幕一直抖动的解决方法