我在公开发布的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;
}
但是,该库的发布版本也在内部使用了unproguarded,因此我需要三种类型的构建:debug,release和proguarded release。
为此,我目前为我的库提供了以下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构建脚本。谁能告诉你怎么样?
答案 0 :(得分:0)
-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}
ProGuard规则中的此片段仅保留类成员的Parcelable类型 - 如果要保留类/成员的命名,则需要添加类似于以下内容的规则:
-keepnames class * implements android.os.Parcelable
您是否有理由不希望这些类型被混淆?