將依賴的第三方庫打包進本身的jar包android
一、先將第三方的庫包拿到,而後添加jar包到項目的libs。app
二、項目的build.gradle腳本添加下面的task:gradle
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 }
三、添加好第三方包,以及包名。ui
四、執行task。spa
jar 包 混淆:code
一、打非混淆的jar包:blog
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 }
二、混淆的jar 包:ip
(1)修改混淆文件:proguard-rules.pro資源
(2)執行以下task:get
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 }