proguard 中的否定符(感叹号)应该允许我保留除 apache 库之外的东西:
-keep class !org.apache.**
根据这些答案。这就是要走的路:
- 如何用 Proguard 否定类名
- 为大型 Android 应用程序中的两个包启用 Proguard
- Android proguard 忽略除一个之外的所有类
- Proguard Android 不会混淆除少数类之外的任何内容
- Proguard:如何保留除特定条件之外的所有内容?
- 我们可以缩小所有类,但只用 proguard 混淆一些类吗?
但是,它混淆了我的 APK 中的所有类。
这是我的 build.gradle 的一部分(我有 Android Studio 3.5.3)
compileSdkVersion 29
buildToolsVersion "29.0.2"
//...
buildTypes {
release {
minifyEnabled true
proguardFiles /*getDefaultProguardFile('proguard-android.txt'),*/ 'proguard-rules.pro'
// Enables resource shrinking, which is performed by the
// Android Gradle plugin.
shrinkResources false
}
}
dependencies {
//Utility libs
implementation 'org.apache.commons:commons-collections4:4.1'
implementation 'org.apache.commons:commons-lang3:3.4'
implementation group: 'commons-io', name: 'commons-io', version: '2.5'
}
在我添加-printconfiguration
到我的proguard-rules.pro
文件后,我看到有很多-keep
规则遵循我的 -keep class !org.apache.**
-printconfiguration
-keep class !org.apache.**
# Referenced at ***anonymized***\app\build\intermediates\merged_manifests\release\AndroidManifest.xml:180
-keep class android.support.v4.app.CoreComponentFactory { <init>(); }
# Referenced at ***anonymized***\app\build\intermediates\merged_manifests\release\AndroidManifest.xml:180
-keep class com.mycompany.MyApplication { <init>(); }
# Referenced at C:\Users\***anonymized***\.gradle\caches\transforms-2\files-2.1\7f5f0b3369d8fa8a72a20e2278ec0acc\appcompat-v7-28.0.0\res\layout\abc_action_menu_item_layout.xml:17
-keep class android.support.v7.view.menu.ActionMenuItemView { <init>(...); }
Ezekiel Baniaga建议的这种方法也没有奏效。相反,它保留了包括 apache 包在内的所有内容:
proguard-rules.pro
-printconfiguration
-dontshrink
-dontoptimize
-dontobfuscate
-keep,allowshrinking,allowoptimization,allowobfuscation class org.apache.**