当我没有缩小我的应用程序时,我达到最大方法计数并且构建dex文件失败.这可以通过启用避免minify在build.gradle.然而,缺点是现在代码被混淆了.这对于Release版本是可以的,但是对于Debug构建来说这是有问题的.
有没有办法告诉gradle缩小Debug构建但不混淆它?
Tom*_*mik 27
是的,您可以使用ProGuard来缩小调试版本.
关键是-dontobfuscate在ProGuard配置中使用选项进行调试构建.
使用此设置build.gradle:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro',
'proguard-rules-debug.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
将您的发布ProGuard配置写入proguard-rules.pro.
使用相同的配置进行发布和调试.这样您就可以确保不会删除任何必要的代码.调试缩小不会破坏构建.
proguard-rules-debug.pro为调试版本添加额外的ProGuard配置文件.它应该包含仅用于调试的规则.在这种情况下只添加:
-dontobfuscate
Run Code Online (Sandbox Code Playgroud)
And*_*Sun 16
minifyEnabled true
Run Code Online (Sandbox Code Playgroud)
只是以下方面的捷径:
postprocessing {
removeUnusedCode true
obfuscate true
optimizeCode true
}
Run Code Online (Sandbox Code Playgroud)
因此,如果要缩小而不混淆,请替换minifyEnabled true为:
postprocessing {
removeUnusedCode true
obfuscate false // <--
optimizeCode true
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您有,编译器也会抱怨shrinkResources true。等效的后处理字段为removeUnusedResources true,即:
postprocessing {
removeUnusedCode true
removeUnusedResources true // <--
obfuscate false
optimizeCode true
}
Run Code Online (Sandbox Code Playgroud)
与其他答案相反,useProguard false 不禁用混淆;它将混淆引擎从ProGuard更改为R8。
一个简单的解决方案是在构建配置中添加minifyEnabled true和。useProguard false但不建议对官方文档的调试构建进行代码收缩。请注意,代码收缩会减慢构建时间,因此如果可能,应避免在调试构建中使用它。
参考https://developer.android.com/studio/build/shrink-code.html
Tomik 的答案在技术上是正确的,但它不支持在构建中使用Instant Run 。正如关于代码收缩的官方指南中指出的:
\n\n\n\n\n通过 Instant Run 启用代码收缩 如果在增量构建应用程序时代码收缩对您很重要,请尝试内置于 Gradle 的 Android 插件中的实验性代码收缩器。与 ProGuard 不同,此收缩器支持 Instant Run。
\n\n您可以使用与 ProGuard 相同的配置文件来配置 Android 插件收缩器。但是,Android 插件收缩器\n 不会混淆或优化您的代码\xe2\x80\x94,它只会删除未使用的代码。\n 因此,您应该仅将它用于调试版本,并为您的发布版本启用 ProGuard\n,以便您的发布 APK 的代码已被混淆并\n 优化。
\n
因此,正确的解决方案是像这样设置调试版本:
\n\nandroid {\n buildTypes {\n debug {\n minifyEnabled true\n useProguard false\n proguardFiles getDefaultProguardFile(\'proguard-android.txt\'),\n \'proguard-rules.pro\'\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这样,调试版本中的代码不会得到优化或混淆,但会缩小。这也适用于使用Instant Run时。
\n| 归档时间: |
|
| 查看次数: |
6120 次 |
| 最近记录: |