AndroidStudio与Eclipse+ADT一样,同样使用proguard进行代码混淆,但是二者在实际使用中仍有区别,本文旨在记录自己在使用中遇到的问题。
一、proguard使用步骤
1. 配置proguard-rule.pro
假设我们的主工程叫MyApplication,那么我们在MyApplication目录下的build.gradle中,编写代码如下:
apply plugin: 'com.android.application'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':ImageLoader')
compile project(':UploadFileManager')
compile project(':numberpicker_library')
compile project(':PhoneDialer')
compile project(':GlowPadView')
compile project(':MulThreadDownloader')
compile project(':library')
}
android {
compileSdkVersion 15
buildToolsVersion "22.0.1"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
instrumentTest.setRoot('tests')
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
buildTypes {
release {
//我们在buildTypes[release]配置中执行混淆
minifyEnabled true //开启混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-project.txt'//指定proguard的混淆配置文件
}
}
}
上述代码中,getDefaultProguardFile(‘proguard-android.txt’)是获取SDK包中默认的proguard-android.txt路径,这里指定了两个配置文件,两个文件会在实际执行过程中整合在一起。而后面的‘proguard-project.txt’其实按照官方的说法,应该叫‘proguard-rule.pro’,但是其内容格式是和ADT上的配置是一模一样。
值得一提的是,在AndroidStudio中,‘proguard-project.txt’配置得到了简化,不再需要编写#-libraryjars libs/xxx.jar这样的代码行,工具会自动帮我们引入所有库。
2. Build->Generate Signed APK
点击“Build->Generate Signed APK”菜单项,一步一步填写签名相关信息直到最后一样,选择buildTypes[release](我们上面就是针对release去配置),最终等待构建APK
二、问题记录:
1.IOException Duplicate Zip Entry
这个是因为在编译过程中,主工程与库工程有共同的引用包xxx.jar,移除主工程中重复引用的包,然后执行“Build->Rebuild”,在进行签名打包即可!