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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值