在开发中使用minifyEnabled = true并不可行;]

时间:2019-08-23 17:23:28

标签: android android-studio

我刚刚将Android Studio更新为3.5。

BTW更新了Gradle版本和几个库。

令我惊讶的是,该应用程序无法放入单个DEX中(使用了超过73,500种方法,据我所知,以前使用的是调试版本)〜p>

我做了哪些更改:

Kotlin 1.3.41 -> 1.3.50
classpath 'com.android.tools.build:gradle:3.5.0' from 3.4.2
classpath 'com.google.gms:google-services:4.3.1' from 4.3.0

implementation 'com.google.android.gms:play-services-ads:18.1.1' from 18.1.0
implementation 'com.google.firebase:firebase-core:17.1.0' from 17.0.1

新发布的APK的方法(60760种)(26760)少于前一种。

我遇到的其他问题: NDK分辨率结果:项目设置:Gradle模型版本= 5.4.1,NDK版本为未知错误

使用AndroidX的应用。

应用正在编译并且可以正常工作

 debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

我从旧版Android Studio导入了设置。也许这是问题所在? 还是没有问题,我必须调和并使用multiDEX(用于开发),并在发布apk时删除multiDEX?对于调试版本,multidex会比minifyEnabled更好吗?

已更改:

debug {
           // minifyEnabled true
           // proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            multiDexEnabled true
        }

当我使用APK> = 21运行模拟器时,并且正在使用multiDex。 之前的21 API将仅使用发行版APK进行测试。

BTW APK分析我的调试版本显示: classes.dex 54806方法 classes2.dex 1107方法 classes3.dex 6725方法

总计:62638。

当我禁用multiDex时。 无法将请求的类放入单个dex文件中(#方法:73883> 65536);))

有些不对劲;)

1 个答案:

答案 0 :(得分:1)

全局设置multiDexEnabled true或为两种构建类型设置multiDexEnabled true,否则发行版本将超过单个DEX文件的64k限制。调试和发布版本的方法数量可能不同,因为这是两个合并的源集-并且未使用的类也可能会被剥离(minifyEnabled true还添加了它自己的库)。尽管# Create some data import numpy as np x, y = np.mgrid[-10:10:200j, -10:10:200j] z = 100 * np.sin(x * y) / (x * y) # Visualize it with mlab.surf from mayavi import mlab mlab.figure(bgcolor=(1, 1, 1)) surf = mlab.surf(z, colormap='cool') # Retrieve the LUT of the surf object. lut = surf.module_manager.scalar_lut_manager.lut.table.to_array() # The lut is a 255x4 array, with the columns representing RGBA # (red, green, blue, alpha) coded with integers going from 0 to 255. # We modify the alpha channel to add a transparency gradient lut[:] = 255/2 # all grey # red lut[-1,0] = 255 lut[-1,1] = 0 lut[-1,2] = 0 lut[:, -1] = 255 # 100% translucency # and finally we put this LUT back in the surface object. We could have # added any 255*4 array rather than modifying an existing LUT. surf.module_manager.scalar_lut_manager.lut.table = lut # We need to force update of the figure now that we have changed the LUT. mlab.draw() mlab.view(40, 85) 用于调试版本是没有用的……而且我真的不明白为什么有人打算这样做。当APK中的非公开类/方法名称与IDE中的那些类名称不匹配时,可能会发现调试起来很困难,因为断点将无法捕获。就像是朝腿开枪一样。

如果单个库更新引入了新的依赖关系,则可能会添加许多类和方法。