gpt4 book ai didi

android - Proguard 可以保存到 multidex 应用程序吗?

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:40 27 4
gpt4 key购买 nike

我有一个带有几个库的应用程序,它达到了 65536 方法计数的红线。

  1. 我成功地将应用设置为 multidex APK。
  2. 为了优化大小,我决定使用 Proguard,因为我只使用了 Guavacommon.java.lang 的一些功能,而这些库带来了它们的整个家族和他们在一起。
  3. 在 Proguard 工作之后,我的应用程序引用了 ~ 45 Kmethods
  4. 我经常读到 multidex 应用程序可能会不时崩溃
  5. 而且由于 second-dex 运行时加载,这需要时间。

4 和 5 是真的吗?

然后我只是尝试不使用 mutidex,因为我的 final方法计数是 < 56Kmethods with prodGuard,但它失败了,好像它有更多!

为此,我只是将 gradle 参数 multiDexEnabled 设置为 false

还有什么要检查/做的吗?

这是我的 Gradle 的一部分:

android {
compileSdkVersion ANDROID_BUILD_SDK_VERSION
buildToolsVersion ANDROID_BUILD_TOOLS_VERSION

defaultConfig {
applicationId "XXXX"
targetSdkVersion ANDROID_BUILD_TARGET_SDK_VERSION
minSdkVersion ANDROID_BUILD_MIN_SDK_VERSION
versionCode ANDROID_BUILD_VERSION_CODE
versionName ANDROID_BUILD_APP_VERSION_NAME
// Enabling multidex support.
multiDexEnabled false
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
debuggable false
ext.enableCrashlytics = true
renderscriptOptimLevel 3
signingConfig android.signingConfigs.release
zipAlignEnabled true
minifyEnabled true
// shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'proguard-rules-new.pro', 'proguard-rules-eventbus.pro', 'proguard-rules-firebase.pro', 'proguard-rules-fabric.pro', 'proguard-rules-leakcanary.pro'
}
debug {
debuggable true
renderscriptOptimLevel 3
applicationIdSuffix ".debug"
versionNameSuffix "debug"
}
}

最佳答案

  1. I often read that multidex app may crash time to time

来自 android 开发人员文档页面 (http://developer.android.com/tools/building/multidex.html#limitations):

Applications using a multidex configuration that make very large memory allocation requests may crash during run time due to a Dalvik linearAlloc limit (Issue 78035). The allocation limit was increased in Android 4.0 (API level 14), but apps may still run into this limit on Android versions prior to Android 5.0 (API level 21)

ART 内置了对 multi-dex apks 的支持,因此 multi-dexing 不会在 lollipop 及更高版本中造成任何问题。您可能会在某些运行 kitkat 及以下版本的设备上看到问题,尽管这种情况应该很少见,除非您有非常高的方法数或内存要求。

  1. And that because of second-dex runtime loading, this take time.

是的,multidex 确实会显着降低应用的首次启动时间。 (当他们超过限制的 20k 方法时,在尖叫的情况下高达 200%)甚至冷启动时间也会增加。

因此,如果可以避免多重索引,强烈建议您这样做。

即使您超出限制,您仍应尽量减少方法计数,因为越来越多的方法会减慢 Lollipop 之前设备上的应用启动时间。

在您的情况下,如果您的构建成功,但如果您看到运行时崩溃(尤其是“No Class def.found”),那么可能是您没有正确配置混淆器,它可能是剥离一些必需的组件。

yelp 的 Timothy Meller 已经对这个问题进行了详细的讨论,其中他还分享了一些 multi-dex 优化和 proguard 配置的重要性:

https://www.youtube.com/watch?v=skmOBriQ28E

如果您想更好地了解 android 上的多 dexing,我建议您观看此视频

关于android - Proguard 可以保存到 multidex 应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36570352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com