将依赖的第三方库打包进自己的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 }