zoukankan      html  css  js  c++  java
  • Android 65535 问题与 MultiDex分包

     

    Android Multidex 遇到的问题 
    http://blog.csdn.net/wangbaochu/article/details/51178881

    Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚 
    http://blog.csdn.net/t12x3456/article/details/40837287

    apply plugin: 'com.android.application'
     //设置编译android项目的参数
    android {
      compileSdkVersion 22
      buildToolsVersion "22.0.1"
      defaultConfig {
        // 应用的包名
        applicationId "me.storm.niaa"
        minSdkVersion 9
        // maxSdkVersion 23
        targetSdkVersion 22
        //versionCode 229
        //versionName "2.2.9"
        // versionCode rootProject.ext.versionCode
        // versionName rootProject.ext.versionName
        multiDexEnabled true
      }
    
    afterEvaluate {
        tasks.matching {
            it.name.startsWith('dex')
        }.each { dx ->
            if (dx.additionalParameters == null) {
                dx.additionalParameters = []
            }
            dx.additionalParameters += '--multi-dex' // enable multidex
        }
    }
    
    dexOptions {
      javaMaxHeapSize "4g"    //java虚拟机堆内存最大值设为4g,避免oom
      preDexLibraries = false //设置对第三方lib不做preDex处理
      additionalParameters =  //每个dex包方法数限制在4000以内
            ['--multi-dex',
            '--set-max-idx-number=40000']
    }
    

      

    1.配置您的应用进行Dalvik 可执行文件分包


    将您的应用项目设置为使用 Dalvik 可执行文件分包配置需要对您的应用项目进行以下修改,具体取决于应用支持的最低 Android 版本。

    1.1 如果您的 minSdkVersion 设置为 21 或更高值,您只需在模块级 build.gradle 文件中将 multiDexEnabled 设置为 true,如此处所示:

    android {
        defaultConfig {
            ...
            minSdkVersion 21
            targetSdkVersion 25
            multiDexEnabled true
        }
        ...
    }

    但是,如果您的 minSdkVersion 设置为 20 或更低值,则您必须按如下方式使用 Dalvik 可执行文件分包支持库

    • 修改模块级 build.gradle 文件以启用 Dalvik 可执行文件分包,并将 Dalvik 可执行文件分包库添加为依赖项,如此处所示:

      android {
          defaultConfig {
              ...
              minSdkVersion 15
              targetSdkVersion 25
              multiDexEnabled true
          }
          ...
      }

      dependencies {
        compile 'com.android.support:multidex:1.0.1'
      }
    • 1.2 根据是否要替换 Application 类,执行以下操作之一:
      • 如果您没有替换 Application 类,请编辑清单文件,按如下方式设置 <application> 标记中的 android:name

        <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.example.myapp">
            <application
                    android:name="android.support.multidex.MultiDexApplication" >
                ...
            </application>
        </manifest>
      • 如果您替换了 Application 类,请按如下方式对其进行更改以扩展 MultiDexApplication(如果可能):

        public class MyApplication extends MultiDexApplication { ... }
      • 或者,如果您替换了 Application 类,但无法更改基本类,则可以改为替换 attachBaseContext() 方法并调用 MultiDex.install(this) 来启用 Dalvik 可执行文件分包:

        public class MyApplication extends SomeOtherApplication {
          @Override
          protected void attachBaseContext(Context base) {
             super.attachBaseContext(context);
             Multidex.install(this);
          }
        }

    构建应用后,Android 构建工具会根据需要构建主 DEX 文件 (classes.dex) 和辅助 DEX 文件(classes2.dex 和 classes3.dex 等)。然后,构建系统会将所有 DEX 文件打包到您的 APK 中。

    运行时,Dalvik 可执行文件分包 API 使用特殊的类加载器来搜索适用于您的方法的所有 DEX 文件(而不是仅在主 classes.dex 文件中搜索)。

     

    2.测试 Dalvik 可执行文件分包应用


    编写面向 Dalvik 可执行文件分包应用的仪器测试时,无需进行其他配置。AndroidJUnitRunner 直接支持 Dalvik 可执行文件分包,前提是您使用MultiDexApplication 或替换您的自定义 Application 对象中的 attachBaseContext() 方法,并调用 MultiDex.install(this) 以启用 Dalvik 可执行文件分包。

    或者,您可以替换 AndroidJUnitRunner 中的 onCreate() 方法:

    public void onCreate(Bundle arguments) {
        MultiDex.install(getTargetContext());
        super.onCreate(arguments);
        ...
    }

    :目前不支持使用 Dalvik 可执行文件分包来创建测试 APK。

    ref:

    配置方法数超过 64K 的应用 | Android Studio
    https://developer.android.com/studio/build/multidex.html、

    Android 解决65535的限制 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
    http://blog.csdn.net/x_i_a_o_h_a_i/article/details/46544341

  • 相关阅读:
    为什么 执行typeof null时会返回字符串“object”?
    vue init webpack-simple 模板中全局引入Jquery正确使用方法 可保jQuery插件正常使用
    掘金文章图片弹出放大缩小效果
    神奇的CSS3混合模式转载
    随笔
    vue-cli 项目中绝对路径引用的相关资源 npm run build 后 打开页面报404错误
    软件工程期末展示材料——RUC自习助手
    RUC自习助手_用户手册
    【声明】RUC自习助手APP(Android版)已上线,可下载
    RUC自习助手_测试文档
  • 原文地址:https://www.cnblogs.com/bluestorm/p/6744330.html
Copyright © 2011-2022 走看看