【发布时间】:2016-05-12 15:52:33
【问题描述】:
在编译我使用的所有库时,我遇到了 Dalvik 中的 64k 方法限制 溢出的问题。我在导入支持库时开始遇到这个问题,因为有些已经包含在其他库中,最终超出了限制。
有没有办法验证一个库是否在当前项目中未使用或已经通过另一个库依赖项导入?
目前,我排除了我确定认识的人,但必须手动执行此操作似乎很奇怪。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:multidex:1.0.1'
compile "com.android.support:percent:${supportLibVersion}"
compile("com.android.support:design:${supportLibVersion}") {
exclude module: 'support-v4'
}
compile("com.android.support:cardview-v7:${supportLibVersion}") {
exclude module: 'support-v4'
}
compile('com.github.nkzawa:socket.io-client:0.4.1') {
exclude group: 'org.json', module: 'json'
}
compile('com.astuetz:pagerslidingtabstrip:1.0.1') {
exclude module: 'support-v4'
}
//...
}
目前的解决方案:
- 使用 Gradle 插件 - 前段时间我们编写了一个非常易于使用的 Gradle 插件,它按包列出了方法的数量以及总数。您可以在此处找到有关它的更多信息。
- www.methodscount.com – 想知道特定库将向您的应用程序添加多少方法?只需在这个网站上输入“编译”语句,它就会告诉你它的方法数、依赖项、JAR 大小和 DEX 大小。
- Android Studio 插件 - 这个出色的插件显示了 Android Studio 中每个依赖项的方法数。
- 使用 MultiDex 支持库 如果您使用的是 Android Studio,则该过程非常简单。如果您不是,我强烈建议您迁移,因为 Google 可能很快就会放弃对 Eclipse ADT 插件和旧的基于 Ant 的构建系统的支持。
第 1 步
在 build.gradle 中添加 MultiDex 支持库的依赖项
dependencies {
...
compile 'com.android.support:multidex:'
...
}
第 2 步
通过在 gradle 配置的 buildType 或 productFlavor 部分中设置 multiDexEnabled 标志来启用多索引。
defaultConfig {
...
multiDexEnabled true
...
}
现在根据您的项目,您有 3 个选项:
如果您还没有创建自己的应用程序类,只需在AndroidManifest.xml 中将android.support.multidex.MultiDexApplication 声明为您的应用程序类
....
android:name="android.support.multidex.MultiDexApplication"
...
如果您已经有自己的 Application 类,请将其扩展为 android.support.multidex.MultiDexApplication 而不是 android.app.Application
如果您的 Application 类正在扩展某个其他类并且您不想或无法更改它,请覆盖 attachBaseContext(),如下所示:
public class MyApplication extends FooApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
【问题讨论】:
-
您可以使用methodscount.com。它列出了每个库的依赖项并显示每个依赖项的方法计数。还有一个gradle插件。
-
那个网站太神奇了!谢谢男人
-
@Jaythaking 你检查我的答案了吗?
标签: android gradle android-support-library android-appcompat android-multidex