在android studio先面创建一个library的module,将要打成jar包的代码写好后就要开始打jar包了,分为两步操作,第一步打出没有混淆的jar。

在library的gradle中,与android标签外配置如下:

//生成jar的命令是Gradle-other-makeJartask makeJar(type: Jar, dependsOn: ['compileReleaseJavaWithJavac']) {    appendix = 'library'    baseName = 'LogSDK'    version = '1.0.0'    classifier = 'release'    //后缀名    extension = 'jar'    //最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]    //archiveName = 'Demo.jar'    //需打包的资源所在的路径集    def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"]    //初始化资源路径集    from srcClassDir    //去除路径集下部分的资源    exclude 'com/scott/jardemo/BuildConfig.class'    exclude '**/R.class'    exclude '**/R\$*.class'    //只导入资源路径集下的部分资源    include 'com/creditease/android/*.class'}

   配置完成后,点击IDE右边框上的gradle界面进入到other列表下,找到makeJar命令,双击即可,在build-libs下面找到生成的jar包,这个jar包的代码并没有混淆。如果要混淆则,在此基础上,需要更多的配置,配置如下:

首先在gradle中引入混淆需要的类:

import com.android.build.gradle.AppPluginimport com.android.build.gradle.LibraryPluginimport proguard.gradle.ProGuardTask

其次配置混淆命令:

//生成混淆jar的命令是Gradle-other-proguardJartask proguardJar(dependsOn: ['makeJar'], type: proguard.gradle.ProGuardTask) {    //Android 默认的 proguard 文件    configuration android.getDefaultProguardFile('proguard-android.txt')    //manifest 注册的组件对应的 proguard 文件    configuration 'proguard-rules.pro'    String inJar = makeJar.archivePath.getAbsolutePath()    //输入 jar    injars inJar    //输出 jar    outjars inJar.substring(0, inJar.lastIndexOf(File.separator)) + "/proguard-${makeJar.archiveName}"    //设置不删除未引用的资源(类,方法等)    dontshrink    Plugin plugin = getPlugins().hasPlugin("AppPlugin") ?            getPlugins().findPlugin("AppPlugin") :            getPlugins().findPlugin("LibraryPlugin")    if (plugin != null) {        List runtimeJarList        if (plugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {            runtimeJarList = plugin.getRuntimeJarList()        } else if (android.getMetaClass().getMetaMethod("getBootClasspath")) {            runtimeJarList = android.getBootClasspath()        } else {            runtimeJarList = plugin.getBootClasspath()        }        for (String runtimeJar : runtimeJarList) {            //给 proguard 添加 runtime            libraryjars(runtimeJar)        }    }}
   

重点是在proguard-rules.pro中配置以下两行:

#这两个是必须的,否则混淆后的jar包无法使用-libraryjars '/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/rt.jar'-libraryjars '/Users/admin/Library/Android/sdk/platforms/android-27/android.jar'//根据你使用编译版本设定

如果没有这两行,总是会报出错误,can't find java.lang.String等错误,导致打出的包无法使用。


然后在做具体的混淆即可。

配置完成后,Gragle-other-proguardJar命令即可在build-libs下面看到生成的混淆过的jar包



以上就是全部内容

更多相关文章

  1. 关于Android的问号?和@符号的用法
  2. Android之进度条控件和常用资源分类总结
  3. mono for android 的ADB
  4. Android(安卓)自动编译、打包生成apk文件 1 - 命令行方式
  5. Android与JNI(一)
  6. Android支持的资源
  7. 关于Android的keystore生成和查看keystore
  8. 命令行开发、编译、打包Android应用程序
  9. android 命令介绍

随机推荐

  1. java中sql查询条件为中文时,rs.next为fals
  2. 没有必要去指定SqlSessionFactory或SqlSe
  3. sqlserver 存储过程 递归查询分组+hier
  4. 我的MSSQL2000数据库自从我的系统从XPHOM
  5. 如何从多表中不存在的表中获取不同的值
  6. Oracle 常用sql语句
  7. my sql 只展示 前10条数据的写法
  8. jsp+Mysql实现简单用户登陆
  9. 如何编写一个查询,在多组行中聚合具有最新
  10. MySQL储存过程的步骤