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

  • 相关阅读:
    JAVA EE社团管理升级版-项目展示(微信小程序)
    JAVA EE社团管理升级版-微信WEB管理端说明文档
    python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定!
    python爬虫20 | 小帅b教你如何使用python识别图片验证码
    python爬虫16 | 你,快去试试用多进程的方式重新去爬取豆瓣上的电影
    python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部
    python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会
    python爬虫15 | 害羞,用多线程秒爬那些万恶的妹纸们,纸巾呢?
    python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的
    python爬虫14 | 就这么说吧,如果你不懂python多线程和线程池,那就去河边摸鱼!
  • 原文地址:https://www.cnblogs.com/bluestorm/p/6744330.html
Copyright © 2011-2022 走看看