Android开发使用Gradle导出混淆的jar包

时间:2022-09-21 09:15:43

     使用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