Публичная версия библиотеки Android не работает правильно
Я работаю над публично выпущенной библиотекой 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 {
}
Но когда я пытаюсь создать защищенную сборку, все пакеты, которые я говорю сохранить, сохраняются, но все мои классы, которые расширяют Parcelable, кроме тех, которые содержатся в пакетах, которые я говорю сохранить, запутываются.
Я попытался поместить ошибку в файл proguard-android.txt на моем компьютере, и сборка не завершилась, поэтому я знаю, что этот файл на самом деле не читается. Но я не знаю, что делать, чтобы все мои классы, расширяющие Parcelable, не были запутаны, кроме как явно сказать proguard, чтобы не запутывать всех без исключения.
Этот же файл proguard использовался для моих старых сборок Ant, поэтому я думаю, что я каким-то образом испортил свой скрипт сборки gradle. Может кто-нибудь сказать, как?
1 ответ
-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}
Этот фрагмент из ваших правил ProGuard хранит членов класса только от типов Parcelable - если вы хотите сохранить имена классов / членов, вам нужно добавить правило, подобное:
-keepnames class * implements android.os.Parcelable
Есть ли причина, по которой вы не хотите, чтобы эти типы были запутаны?