配置方法数超过 64K 的应用

关于 64K 引用限制

是指单个DEX文件内可引用的方法总数不超过65,536,即64 X 1024,所以称为64K引用限制

可执行文件分包支持

Android5.0(21)后的ART原生支持从 APK 文件加载多个 DEX 文件,所以只要minSdkVersion为21或更高,就不需要 Dalvik 可执行文件分包支持库。5.0之前的系统是需要Dalvik 可执行文件分包支持库的。

规避 64K 限制的方法

  1. 检查您的应用的直接和传递依赖项
    不要仅仅为了使用依赖库的几个方法,就引入依赖库。
  2. 通过 ProGuard 移除未使用的代码
    使用混淆的压缩功能,移除未使用到的代码。

配置Dalvik 可执行文件分包

  1. multiDexEnabled true
  2. compile 'com.android.support:multidex:1.0.1'
  3. Multidex.install(this);

声明主 DEX 文件中需要的类

如果出现 java.lang.NoClassDefFoundError,使用multiDexKeepFilemultiDexKeepProguard把该类添加到主DEX文件。

优化开发构建中的 Dalvik 可执行文件分包

Dalvik 可执行文件分包配置会大幅增加构建处理时间,因为要决定哪些类放在主DEX,哪些类放在铺DEX是非常复杂的,所以非常耗时。
可以利用productFlavors来搞一个开发定制和发布定制,对于开发定制,将minSdkVersion设置为 21,这样开发的时候构造将更快。
以下是配置示例:

android {
    defaultConfig {
        ...
        multiDexEnabled true
    }
    productFlavors {
        dev {
            // Enable pre-dexing to produce an APK that can be tested on
            // Android 5.0+ without the time-consuming DEX build processes.
            minSdkVersion 21
        }
        prod {
            // The actual minSdkVersion for the production version.
            minSdkVersion 14
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                                                 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile 'com.android.support:multidex:1.0.1'
}

您完成此配置变更后,可以为增量式构建使用应用的 devDebug 变体,后者集 dev 产品定制与 debug 构建类型的属性于一身。这将创建已启用 Dalvik 可执行文件分包且禁用 proguard 的可调试应用(因为 minifyEnabled 默认为 false)。这些设置会使适用于 Gradle 的 Android 插件执行以下操作:

  1. 执行 pre-dexing:将每个应用模块和每个依赖项构建为单独的 DEX 文件。
  2. 将每个 DEX 文件加入 APK,并且不做任何修改(不执行代码压缩)。
  3. 最重要的是,模块 DEX 文件不执行合并操作,因此可以避免为确定主 DEX 文件的内容而进行长时间的计算。

这些设置的好处是,可以进行快速的增量式构建,因为只有修改过的模块的 DEX 文件才会在后续构建期间重新计算并重新打包。但是,这些构建的 APK 只能用于在 Android 5.0 设备上进行测试。不过,由于是以定制形式实现配置,您保留了使用与发布相适的最低 API 级别和 ProGuard 代码压缩执行正常构建的能力。

你可能感兴趣的:(配置方法数超过 64K 的应用)