android studio gradle 打jar 包 (混淆+第三方库包)

android studio gradle 打jar 包 (混淆+第三方库包)

将依赖的第三方库打包进自己的jar包

1、先将第三方的库包拿到,然后添加jar包到项目的libs。

2、项目的build.gradle脚本添加下面的task:

 1 task buildJar(dependsOn: ['compileReleaseJavaWithJavac'], type: Jar) {
 2     appendix = "sample"
 3     baseName = "demo"
 4     version = "1.0.0"
 5     classifier = "release"
 6 //后缀名
 7     extension = "jar"
 8 //最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
 9 //    archiveName = "AndroidDemo.jar"
10 //需打包的资源所在的路径集
11     def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];
12 //初始化资源路径集
13     from srcClassDir
14     from (project.zipTree("libs/第三方库包.jar"))
15     destinationDir = file("build/libs")
16     //去除路径集下部分的资源19     exclude "**/**/BuildConfig.class"
20     exclude "**/**/BuildConfig$*.class"
21     exclude "**/R.class"
22     exclude "**/R$*.class"
23     //只导入资源路径集下的部分资源
24     include "**/*.class"
25     include "第三方库的包名/**/*/class"27 }

3、添加好第三方包,以及包名。

4、执行task。

jar 包 混淆:

1、打非混淆的jar包:

 1 task buildJar(dependsOn: ['compileReleaseJavaWithJavac'], type: Jar) {
 2     appendix = "sample"
 3     baseName = "demo"
 4     version = "1.0.0"
 5     classifier = "release"
 6 //后缀名
 7     extension = "jar"
 8 //最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
 9 //    archiveName = "AndroidDemo.jar"
10 //需打包的资源所在的路径集
11     def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];
12 //初始化资源路径集
13     from srcClassDir
14 //去除路径集下部分的资源
15  exclude "**/**/BuildConfig.class"
16  exclude "**/**/BuildConfig$*.class"
17  exclude "**/R.class"
18  exclude "**/R$*.class"
19 //只导入资源路径集下的部分资源
20     include "**/*.class"
21 }

2、混淆的jar 包:

(1)修改混淆文件:proguard-rules.pro

(2)执行如下task:

 1 task proguardJar(dependsOn: ['buildJar'], type: ProGuardTask) {
 2 //Android 默认的 proguard 文件
 3     configuration android.getDefaultProguardFile('proguard-android.txt')
 4 //manifest 注册的组件对应的 proguard 文件
 5     configuration project.buildDir.absolutePath + "/intermediates/proguard-rules/release/aapt_rules.txt"
 6     configuration 'proguard-rules.pro'
 7     String inJar = buildJar.archivePath.getAbsolutePath()
 8 //输入 jar
 9     injars inJar
10 //输出 jar
11     outjars inJar.substring(0, inJar.lastIndexOf('/')) + "/proguard-${buildJar.archiveName}"
12 //设置不删除未引用的资源(类,方法等)
13     dontshrink
14     Plugin plugin = getPlugins().hasPlugin(AppPlugin) ?
15             getPlugins().findPlugin(AppPlugin) :
16             getPlugins().findPlugin(LibraryPlugin)
17     if (plugin != null) {
18         List<String> runtimeJarList
19         if (plugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {
20             runtimeJarList = plugin.getRuntimeJarList()
21         }
22         else if(android.getMetaClass().getMetaMethod("getBootClasspath")) {
23             runtimeJarList = android.getBootClasspath()
24         } else {
25             runtimeJarList = plugin.getBootClasspath()
26         }
27         for (String runtimeJar : runtimeJarList) {
28 //给 proguard 添加 runtime
29             libraryjars(runtimeJar)
30         }
31     }
32 }