使用Gradle一行命令导出混淆好的jar包,前段时间苦苦需找一种方法把library工程一次性编译成一个混淆好的jar,虽然有proguard工具,但是需要我们到处jar后再使用它来混淆,这就需要两步了,不爽,我们需要一步搞定的,在一些大项目中需要多家公司合作,需要给别的公司开发人员提供自己的jar包又不想暴漏自己的源代码,如果jar包有好几个,使用我相面用到的一行命令到处混淆好的jar那就很翻遍了,如果我们在bamboo平台上部署自动化编译项目那就更加方便了,在bamboo上建立一个task点击运行就可以输出所有的jar包!
现在使用Android Studio开发都是使用Gradle构建编译项目,如果是用Eclipse开发,通过到处Gradle文件也可以使用Gradle构建,如果对Gradle不熟悉的可以参考:用Gradle 构建你的android程序
build.gradle文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.14.+'
}
}
apply plugin: 'com.android.library'
dependencies {
compile 'com.android.support:support-v4:+'
}
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
enforceUniquePackageName=false
lintOptions {
abortOnError false
}
dexOptions {
preDexLibraries = false
}
buildTypes {
release{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-project.txt'
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest.setRoot('tests')
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
/** task makeJar(type: Copy){
*from('build/intermediates/bundles/release')
*into('output/')
*include('classes.jar')
*rename('classes.jar', 'danxingxitest' + '-' + '-release' + '.jar')
*}
*makeJar.dependsOn(build)
**/
build.doLast {
def today = new Date().format('yyyyMMdd');
def name = 'authSdk';
copy{
from('build/intermediates/bundles/release')
into('output/' + today)
include('classes.jar')
rename('classes.jar', name +'-' + today + '-release' + '.jar')
}
}
/**
*从Manifest.xml中读取版本号
def readVersion(){
def manifestParser = new DefaultManifestParser()
return manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile);
}
**/
混淆文件:proguard-project.txt 在Android Studio中混淆文件名字不一样:
#不优化输入的类文件
-dontoptimize
-keep public class com.example.gradlejar.*
-keep public class com.example.gradlejar.*{
<fields>;
<methods>;
}
-keep public class com.danxx.thirdparty.image.*
-keep public class com.danxx.thirdparty.image.*{
<fields>;
<methods>;
}
-keep public class com.danxx.thirdparty.net.*
-keep public class com.danxx.thirdparty.net.*{
<fields>;
<methods>;
}
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
源文件请看我的GitHub:Dawish/GradleProguardJar