【发布时间】:2016-01-26 01:22:31
【问题描述】:
我在一个公开发布的 android 库上工作。而且,对于外部发布,我需要使用以下选项运行 proguard:
-keep public class com.example.package_one.* {
public protected *;
}
-keep public class com.example.package_one.subpackage_one.* {
public protected *;
}
-keep public class com.example.package_one.subpackage_two.* {
public protected *;
}
-keep public class com.example.package_one.subpackage_three.* {
public protected *;
}
-keep public class com.example.package_one.subpackage_four.* {
public protected *;
}
-keep public class com.example.package_one.subpackage_four.sub_subpackage_one.* {
public protected *;
}
-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}
但是,该库的发布版本也是在内部使用未保护的,所以我需要三种类型的构建:调试、发布和保护发布。
为此,我的库目前有以下 build.gradle 文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.1'
}
}
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 17
targetSdkVersion 23
}
sourceSets {
main {}
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
buildTypes {
debug {}
release {}
proguarded{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
}
但是,当我尝试创建 proguarded 构建时,我说要保留的所有包都被保留了,但我所有扩展 Parcelable 的类,除了我说要保留的包中的那些,都被混淆了。
我尝试在我的计算机上的 proguard-android.txt 文件中添加一个错误,并且构建没有崩溃,所以我知道该文件实际上并没有被读取。但是我不知道该怎么做才能使我所有扩展 Parcelable 的类都不会被混淆,除了明确告诉 proguard 不要混淆每个类。
这个相同的 proguard 文件曾经与我的旧 Ant 构建一起使用,所以我的猜测是我以某种方式弄乱了我的 gradle 构建脚本。谁能告诉我怎么做?
【问题讨论】:
标签: android gradle android-gradle-plugin proguard android-proguard