问题描述
proguard 中的否定符(感叹号)应该允许我保留 apache 库之外的其他内容:
The negator (exclamation mark) in proguard should allow me to keep anthing but the apache libraries:
-keep class !org.apache.**
根据这些答案.这就是要走的路:
According to those answers. That's the way to go:
- 如何使用 Proguard 否定类名
- 启用大型Android应用程序中只有两个包的Proguard
- Android proguard 忽略除一个以外的所有类
- Proguard Android 不会混淆除少数类之外的任何内容
- Proguard:如何保留除特定条件外的所有内容?
- 我们可以缩小吗所有类,但只用混淆器混淆了一些?
然而,它混淆了我 APK 中的所有类.
However, it obfuscates all classes in my APK.
这是我 build.gradle 的一部分(我有 Android Studio 3.5.3)
That's part of my build.gradle (I have 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
规则-保持类 !org.apache.**
After I added -printconfiguration
to my proguard-rules.pro
file I saw there are numerous -keep
rules following my -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>(...); }
以西结巴尼亚加建议的这种方法也没有奏效.相反,它保留了包括 apache 包在内的所有内容:
That approach suggested by Ezekiel Baniaga also didn't work. Instead it keeps everything including the apache packages:
proguard-rules.pro
-printconfiguration
-dontshrink
-dontoptimize
-dontobfuscate
-keep,allowshrinking,allowoptimization,allowobfuscation class org.apache.**
推荐答案
我必须添加 ,**
才能让它工作.谢谢 T.奈德哈特!
I had to add ,**
to get it working. Thanks T. Neidhart!
-keep class !org.apache.**,**
前面的例子保留了类名,但仍然混淆了成员.所以我不得不添加 { *;}
:
The previous example preserved class names but still obfuscated members. So I had to add { *; }
:
-keep class !org.apache.**,** { *; }
这就是我如何混淆多个包(我必须在一个保留规则中使用它们!)
That's how I obfuscate multiple packages (I have to use them all in one keep rule!)
-keep class !org.apache.**, !org.zeroturnaround.**, !com.drew.**, ** { *; }
要找出我的问题是什么 -dontshrink -dontoptimize -dontobfuscate -keep,allowshrinking,allowoptimization,allowobfuscation class org.apache.**
我可以添加 -whyareyoukeeping
根据 https://www.guardsquare.com/en/products/proguard/手册/使用
To find out what my problem is with -dontshrink -dontoptimize -dontobfuscate -keep,allowshrinking,allowoptimization,allowobfuscation class org.apache.**
I could add -whyareyoukeeping
according to https://www.guardsquare.com/en/products/proguard/manual/usage
这篇关于Proguard (R8) 否定操作员不保留某些包以外的任何东西的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!