用android studio混淆多个模块
我和gradle proguard有问题。。。我有以下模块:用android studio混淆多个模块,android,android-studio,gradle,proguard,obfuscation,Android,Android Studio,Gradle,Proguard,Obfuscation,我和gradle proguard有问题。。。我有以下模块: 应用程序:主应用程序模块。具有依赖性ModuleA和ModuleC 模块a:库模块。具有依赖性模块B和jar依赖性 模块B:库模块 ModuleC:库模块 磨损:磨损应用程序模块 build.gradle文件: -应用程序: 模块a: buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile
- 应用程序:主应用程序模块。具有依赖性ModuleA和ModuleC
- 模块a:库模块。具有依赖性模块B和jar依赖性
- 模块B:库模块
- ModuleC:库模块
- 磨损:磨损应用程序模块
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':ModuleB')
}
模块B:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
ModuleC:与ModuleB相同
佩戴:
**我只写了重要的几行
我的问题是,如果我使用该配置生成签名的APK,当我将其安装到设备上时,它会崩溃,出现以下异常:
Error:Execution failed for task ':ModuleB:proguardRelease'.
java.lang.NoSuchFieldError:Lcom/package/ClassInJar类中没有名称为='peer'签名为='J'的字段
它在模块a的libs文件夹中的jar中包含的类中崩溃
如果我在所有模块中将minifyEnabled设置为false,它不会崩溃,但我更喜欢混淆代码。如果我在库模块中将minifyEnabled设置为true,它将不会编译,并显示以下异常:
Error:Execution failed for task ':ModuleB:proguardRelease'.
java.io.IOException:输出jar为空。您是否指定了正确的“-keep”选项
首先,必须了解proguard扮演两个主要角色:
- 当proguard混淆时,它实际上会占用您的所有类、类成员、方法等,并更改它们的名称,因此会变得乱七八糟。这样一来,人们就很难对你的代码进行反向工程
- 它以某种方式压缩代码,以便在编译时丢弃所有未使用的类、类成员、方法等,从而使apk更精简
尝试为proguard设置规则。可以这样做:
- 找到“app”文件夹中“build.gradle”文件旁边的“proguard rules.pro”文件(下图)
- 接下来,您需要为特定的类/类成员/方法等添加“keep”规则,这样就不会在这些元素上发生混淆。您在文件中注释了一些示例,例如:
-keepclassmembers类fqcn.of.javascript.interface.for.webview{ 公众*; }
这意味着“不要混淆给定类中公共的任何类成员。
但是,keep有许多变体。
有关“保留”变体的更多信息,请在链接中查看此文档和示例(当您单击某个项目时):。
Good luck=)在进行模糊处理时,您看到的崩溃是什么?我更新了我的问题,但它在模块ADo的libs文件夹中的一个jar中崩溃-保留它所抱怨的符号的规则?抱歉,但我无法理解您的quiestionProguard可能正在对需要保留在clear becau中的符号进行模糊处理它们用于反射。你需要建立规则让它保留它们。
Error:Execution failed for task ':ModuleB:proguardRelease'.