提问人:Stoberdo 提问时间:3/15/2022 最后编辑:Stoberdo 更新时间:5/3/2022 访问量:3745
当所有配置选项都被禁用时,“minifyEnabled=true”有什么作用?
What does 'minifyEnabled=true' do when all configuration options are disabled?
问:
我有一个复杂的 android 应用程序构建设置,它基本上由一个普通的 android 应用程序和一个 Xamarin/Mono 项目融合在一起,以包含一个重要的 C# 库(如下所示:https://github.com/royd/KotlinAppWithXamarinDependency)
一切正常,除非我通过应用程序在我的应用程序中启用缩小,否则启动时会立即崩溃,因为 Mono-runtime 找不到肯定包含在 apk 中的本机程序集。app/build.gradle
minifyEnabled true
这是我在 Logcat 中得到的消息:
A/monodroid: No assemblies found in '(null)' or '<unavailable>'. Assuming this is part of Fast Deployment. Exiting...
一切正常,所以我尝试禁用我的所有配置选项:minifyEnabled false
proguard-rules.pro
-dontobfuscate
-dontoptimize
-dontshrink
我还将以下行添加到我的app/build.gradle
packagingOptions {
doNotStrip "*/armeabi/*.so"
doNotStrip "*/armeabi-v7a/*.so"
doNotStrip "*/x86/*.so"
}
不幸的是,这一切都无济于事。
我还反编译了一个工作和一个损坏的apk来比较字节码。它似乎完全相同,除了一些无关紧要的优化。dex2jar
enum
根据 Logcat 中的错误消息,该错误似乎是从原生库抛出的。libmonodroid.so
所以我的问题:当所有这些配置选项都被禁用时,标志会做什么?minifyenabled
编辑: 我发现当我使用 Android Gradle 插件 4.0.1 版(从 2020 年 7 月开始)时,缩小会按预期工作。将版本升级到 4.1.0(2020 年 8 月)会破坏我的应用程序。现在的问题是这两个版本之间有什么变化?
答:
当您将 设置为 true.r8 将选择配置文件,但不仅会选择 和 来缩小、混淆和优化您的应用程序。minifyenabled
proguard-rules.pro
app/build.gradle
还有一些其他文件,例如 and 等等。因此,此错误可能是由于将设置设置为 true 时本机库丢失所致。AAR libraries: <library-dir>/proguard.txt
JAR libraries: <library-dir>/META-INF/proguard/
minifyenabled
如需更多信息,请查看官方文档:https://developer.android.com/studio/build/shrink-code#enable
此外,您可以检查“proguard-android-optimize.txt”,当您添加 to 可能会导致冲突。-dontoptimize
proguard-rules.pro
评论
我发现,在 Android Gradle 插件版本 3.6.0 到 4.1.0 中,他们切换到了一个性能更高的工具来构建名为 .
可以通过将此行添加到我的 :zipflinger
gradle.properties
android.useNewApkCreator=false
在构建 apk 时,zipflinger 将外部 .NET 程序集存储为 zip 条目,而不是 Zip 条目,这就是 monodroid 无法读取它们的原因。DEFLATED
STORED
参考资料:
https://github.com/xamarin/xamarin-android/issues/6838#issuecomment-1110816027 https://copyfuture.com/blogs-details/20210119115509664T
评论