multidex分包续:将指定的类打包到主dex中

Android-记一次bugfix-主dex包数超过65535 问题产生和解决过程 问题描述 打包的时候总是提示: com.android.dex.DexException:Too many classes in --main-dex-list, main dex capacity exceeded 问题原因 因为主dex包中的方法数超过65535,导致生成包失败。 追溯问题: if (args.mainDexListFile != null) { //... 阅读详情

一、为什么有将指定的类放入主dex中的需求

我们分包的时候会遇到一个问题,因为加载和初始化的问题,如果某个类不在主dex中,那么程序就会报错,Java.lang.NoClassDefFoundError

例如:自定义主dex所包含类的过程中,有9个类必须在主dex中

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">android/support/multidex/<span class="hljs-constant" style="box-sizing: border-box;">MultiDex</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>
android/support/multidex/<span class="hljs-constant" style="box-sizing: border-box;">MultiDexApplication</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>
android/support/multidex/<span class="hljs-constant" style="box-sizing: border-box;">MultiDexExtractor</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>
android/support/multidex/<span class="hljs-constant" style="box-sizing: border-box;">MultiDexExtractor</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$1</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>
android/support/multidex/<span class="hljs-constant" style="box-sizing: border-box;">MultiDex</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$4</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>
android/support/multidex/<span class="hljs-constant" style="box-sizing: border-box;">MultiDex</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$14</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>
android/support/multidex/<span class="hljs-constant" style="box-sizing: border-box;">MultiDex</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$19</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>
android/support/multidex/<span class="hljs-constant" style="box-sizing: border-box;">ZipUtil</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>
android/support/multidex/<span class="hljs-constant" style="box-sizing: border-box;">ZipUtil</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$CentralDirectory</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

这9个类必须在主dex中,否则就会出现异常,就是上面说的找不到类。在attachBaseContext方法中有个MultiDex.install(this),用来加载其他的dex文件,如果MultiDex的相关类不在主dex中,那么这些无法加载,就会报错。

注意:并不是只有这9个类是必须的,我在maindexlist.txt(这个文件做什么后面介绍)中只加入了这9个类和一个MainActivity.class,报出了找不到Android/support/multidex/MultiDex$14.class的异常,明明加入了。后来我复制了一个文件,里面有很多类,同时也有这9个类,然后就没有出异常,所以我猜测,这九个类应该还需要其他的一些类。至于复制的什么文件,下面会有介绍。

那么我们为了解决这个找不到类的问题,就必须将这样的类放入主dex中。那么如何将一个类放入主dex中呢?

二、Gradle中的配置

我们需要通过修改build.gradle文件,增加afterEvaluate区域。下面给出完整的build.gradle配置,其中1,3两项配置在dex分包方案概述与multidex包的配置使用中已经介绍过,配置如下:

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">apply plugin: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.application'</span>

android {
    compileSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">23</span>
    buildToolsVersion <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"22.0.1"</span>

    defaultConfig {
        applicationId <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.example.gao.delete"</span>
        minSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">17</span>
        targetSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">23</span>
        versionCode <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>
        versionName <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1.0"</span>
       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //1</span>
        multiDexEnabled <span class="hljs-constant" style="box-sizing: border-box;">true</span>
    }
    buildTypes {
        release {
            minifyEnabled <span class="hljs-constant" style="box-sizing: border-box;">false</span>
            proguardFiles getDefaultProguardFile(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'proguard-android.txt'</span>), <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'proguard-rules.pro'</span>
        }
    }
}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">
//2</span>
afterEvaluate {
    tasks.matching {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span>.name.startsWith(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'dex'</span>)
    }.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">each</span> { dx ->
       def listFile = project.rootDir.absolutePath+<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'/app/maindexlist.txt'</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (dx.additionalParameters == <span class="hljs-constant" style="box-sizing: border-box;">null</span>) {
            dx.additionalParameters = []
        }
       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //表示当方法数越界时则生成多个dex文件(我的没有越界,貌似也生成了两个)</span>
        dx.additionalParameters += <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'--multi-dex'</span>
       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //这个指定了listFile中的类(即maindexlist.txt中的类)会打包到主dex中,不过注意下一条。</span>
        dx.additionalParameters += <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'--main-dex-list='</span> +listFile
       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //表明只有-main-dex-list所指定的类(在我的配置中,就是app目录下的maindexlist.txt中包含的类)才能打包到主dex中,如果没有这个选项,上个选项就会失效</span>
       dx.additionalParameters += <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'--minimal-main-dex'</span>
    }
}

dependencies {
    compile fileTree(dir: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'libs'</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">include</span>: [<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'*.jar'</span>])
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.support:appcompat-v7:24.0.0-alpha1'</span>
   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //3</span>
    compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.support:multidex:1.0.0'</span>
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li></ul>

三、创建主dex包含类的列表

为了方便,Demo下只有三个类:

这里写图片描述

根据上面builde.gradle中的配置,我们在app目录下创建一个maindexlist.txt,我们在这个txt里将我们想要放在主dex中的类写进去,自己写还是相当麻烦的,可是自己又不会脚本自动生成,没办法。不过注意一点,由于上述的配置,只有这个txt下的类才会放到主dex中,所以这个文本不能乱写,要不然各种错误,切身体会。。。

  • 我是取巧,在\app\build\intermediates\multi-dex\debug目录下找到了一个maindexlist.txt,注意,这个你改了没用,一运行又恢复了,将这个复制到app目录下,就是配置中listFile指定的路径,然后这个里面默认有很多的类,包括MainActivity,但不包括我们的Fifth.class和Sixth.class,运行,解压apk中的主dex文件,反编译,结果如下:

    这里写图片描述

  • 下面我们在app目录下的maindexlist.txt中增加一行 
    com/example/gao/delete/Sixth.class 
    ,然后重新运行,找到apk,解压,发现分了两个dex文件,我们将主dex文件反编译,主dex反编译结果如下:

    这里写图片描述

    我们可以看到,Sixth.class已经成功加入到主dex中了。

注意:

在\app\build\intermediates\multi-dex\debug目录下的maindexlist.txt复制到app目录下,不更改就只有MainActivity和一些其他类,不包括我们的Fifth.class和Sixth.class。如果我们要增加Sixth.class,如下,我们在第一行增加Sixth.class: 
这里写图片描述

如果改变并保存这个txt,这个txt就会变得很乱(不知道为什么),然后运行就失败,我是一个个回车调整成如图的格式.

pytorch图像分类篇: 花分类数据集下载和AlexNet网络搭建训练 一、花分类数据集下载 data_setdata_set该文件夹是用来存放训练数据的目录 使用步骤如下: (1)在data_set文件夹下创建新文件夹"flower_data" (2)点击链接下载花分类数据集 (3)解压数据集到flower_data文件夹下 (4)执行"flower_data.py"脚本自动将数据集划分成训练集train和验证集val ├── flower_data ├── flower_photos(解压的数据集文件夹,3670个样本) ... 阅读详情

相关推荐

别再死记硬背Modbus报文了!用Python+Modbus Poll手把手教你调试工业设备

本文详细介绍了如何利用Python和Modbus Poll工具高效调试工业设备通信。通过实战案例和代码示例,帮助读者快速掌握Modbus通信协议的核心配置、数据监控技巧及Python自动化脚本编写,解决工业设备调试中的常见问题,提升工作效率。

weixin_42520780的博客 344

手动打包android项目,android 手动分包,将指定class打包到主dex中

插件化开发时,想要使app启动很快,需要将主dex中只是包含首页以及基础模块的功能,其他的功能放到从dex文件中,这样就可以加快app的启动速度。那如何将核心首页以及基础模块的class文件打包到主dex文件中呢?下面来实现这个过程。1.首先要是项目支持multidex,要是项目支持multidex,需要完成下面两个步骤a.需要在module级别的build.gradle文件中配置android ...

weixin_32205867的博客 1294

3款 433MHz 收发模块对比:SYN480R vs RXB6 vs DL-TX19,实测卷帘门遥控距离

本文深度评测了3款433MHz收发模块SYN480R、RXB6与DL-TX19在卷帘门遥控距离、穿透性能和抗干扰能力等方面的表现。通过实测数据对比,分析了超外差、超再生和PLL锁相环技术的优劣,为智能家居和工业控制领域的无线遥控方案选型提供专业参考。

weixin_30700977的博客 395

Multidex分包:将指定的类打包到主dex中

当项目运行在4.3的手机上时,报错 java.lang.ExceptionInInitializerError,检查后发现,因使用360RePulginin,初始化时没有把RePulginHostConfig类放在主dex中。这是分包的时候会遇到的一个问题,因为加载和初始化的问题,如果某个类不在主dex中,那么程序就会报错, Error:java.lang.NoClassDefFoundError...

Q 的博客 4534

语言 拉丁超立方抽样_医学统计与R语言:间断时间序列分析(Interrupted time series regression)...

微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发Interrupted time series (ITS) analysis is a valuable study design for evaluating the effectiveness of population-level health interventions that have been implemented...

weixin_29300805的博客 3706

【乐企】开票控制服务

例子:企业信息初始化。

九七的博客 455

命令行指定的类打入单独的DEX

需求       Android有的时候有分DEX的需求,当方法数超过了66535这个数,我们就需要开启MultiDex,还有的时候我们有的部分需求是一直不会改变,那这个时候我们可以将对应的代码单独打包成DEX,可以预先放置到Assert目录下, 在需要的时候进行加载       热更新也有这样的需求,将出问题的代码单独打入一个path dex中,我们知道在加载dex到内存中时,如果不存在odex文

freeCode 1391

20、机器人硬件改造与Geomagic Touch设备的运动学和动力学模型

本文详细介绍了机器人CRS 465和255的硬件改造过程,包括数字阶段、模拟阶段、功率阶段及软件实现,并深入研究了Geomagic Touch触觉设备的五自由度与三自由度运动学、微分运动学及动力学模型。文章还探讨了其在虚拟手术、装配等场景中的应用,提出了硬件与模型优化方向,如电源管理改进、信号处理优化、参数校准与自适应控制,并展望了多机器人协作、多传感器融合与智能控制算法的发展前景。

e4f5g6h7的博客 122

android 手动分包,将指定class打包到主dex中

插件化开发时,想要使app启动很快,需要将主dex中只是包含首页以及基础模块的功能,其他的功能放到从dex文件中,这样就可以加快app的启动速度。那如何将核心首页以及基础模块的class文件打包到主dex文件中呢?下面来实现这个过程。 1.首先要是项目支持multidex,要是项目支持multidex,需要完成下面两个步骤 a.需要在module级别的build.gradle文件中配置 andro...

hujin2017的博客 6766

ValueError:Using a `device_map`, `tp_plan`, `torch.device` context manager or setting `torch.set解决方案

本文主要介绍了ValueError:Using a `device_map`, `tp_plan`, `torch.device` context manager or setting 'torch.set_default_device(device)` requires `accelerate`解决方案,希望能对使用transformers的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 3万+

6.4 实战项目:基于Agent内核构建Code Review智能体

本文介绍了一个基于Agent内核构建的智能Code Review系统实战项目。系统采用多Agent协作架构,包含代码质量分析、安全漏洞识别、性能优化建议等核心功能模块。文章详细展示了系统架构设计,采用协调器Agent管理多个专业Agent协同工作,并提供了基础Agent框架和协调器Agent的TypeScript实现代码。项目结合了AI Agent核心原理和多Agent协作机制,实现了自动化的代码审查流程,能够生成详细的审查报告,帮助开发者提升代码质量和安全性。

yonggeit的博客 3114

Android热修复三部曲之MultiDex 分包架构

Android热修复三部曲之MultiDex 分包架构 该篇博客主要分为三个部分: - **什么是分包架构** - **分包架构的好处** - **怎么实现分包**

茅屋 6062

openbmc 支持mctp over pcie(三)(支持作为endpoint)

本文介绍了在Intel BHS平台上支持MCTP over PCIe端点开发的调试方法。开发基于CodeConstruct和AspeedTech-BMC的开源项目,将内核驱动改为模块形式以便调试。内容包括DTS配置、驱动模块设置步骤,以及如何将BMC配置为端点设备。调试过程涉及内核模块加载、MCTPD启动、参数设置等关键命令,并展示了路由表、地址和邻居信息的测试结果。该方案仅为实验性工作,需注意停止其他使用/dev/aspeed-mctp0接口的应用。

wit_yuan的专栏 1557

【Android 热修复】热修复原理 ( 多 Dex 打包机制 | 多 Dex 支持 | Dex 分包设置 | 开发和产品风格设置 | 源码资源 )

一、Dex 打包设置、 1、多 Dex 支持、 2、Dex 分包设置、 3、开发和产品风格设置 ( 非必须 )、 二、完整 build.gradle 配置、 1、build.gradle 配置、 2、dex.keep 配置、 二、 源码资源、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1205

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

一文详解 Android multidex 使用方式及实现原理

在Android中一个Dex文件最多存储65536个方法,也就是一个short类型的范围。但随着应用方法数量的不断增加,当Dex文件突破65536方法数量时,打包时就会抛出异常。 为解决该问题,Android5.0时Google推出了官方解决方案:MultiDex。

bjxiaxueliang的CODING小栈 3万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Androdi热修复之路 —— 理解Multidex 分包原理

1、使用 使用配置 在build.gradle中添加支持Multidex defaultConfig{ multiDexEnabled true } 添加Multidex依赖 implementation 'com.android.support:multidex:1.0.3' 在Application中初始化Multidex MultiDex.install(this...

浅谈Android 1115

关于android dex分包的小坑

之前看了一遍关于android apk热修复的文章,感觉好屌,于是乎也想写一个demo来实现android apk热修复,不过在实现第一步就出了问题,android apk怎么实现指定的dex分包(比如将MainActivity和Main2Activity放在一个class.dex文件,其他的放在class2.dex文件中),接下来就疯狂百度,不过在其他的博客里面实现的方法我也重试了,都没有达到预...

qq_31769199的博客 1167

MultiDex原理分析

MultiDex原理分析 一、MultiDex是什么,解决了什么问题 MultiDex 顾名思义就是对分包的Dex文件进行读取加载到ClassLoader的库 android 早期的版本中,Dex文件(android对java中字节码 class文件 进行了调整,把所有的class打包到一的Dex文件中)的方法数量是有上限的65536,当一个app中的方法数量超过这个值,在app安装的时候就会抛出错误,无法安装 为什么Dex的方法数量上限是65536呢? android在安装一个应用的时候其中会有一步工作是

诺~~~ 2761

AndroidStudio中的 multidex 的 Dex分包步骤

AndroidStudio中的 multidex 的 Dex分包步骤

qq_44934581的博客 545

Android Dex分包原理

Android Dex分包原理 为什么要分包? 1、65536问题 导致因素 随着项目apk的庞大以及加入更多的第三方库,app的方法数已经超过了65536,会导致程序根本跑不起来。 原因 在生成.dex文件后由于有很多冗余的资源,所以Android中会对dex文件进行优化,Davlik模式下利用dexopt工具进行优化,而dexopt有两个问题: Dexopt 会把每一个...

zzz2017的博客 1960

multiDexEnabled 进行 dex分包小记

项目引用了多个jar包,导致Dalvik Executable (DEX)文件的总方法数超出65536的限制,按照网上大神们总结的官方方法如下: 第一步: 在 build.gradle中,添加“multiDexEnabled true” defaultConfig { /**添加多 dex分包支持*/ multiDexEnabled true } 在dependencies中填加“api 'com.android.support:multidex:1.0.1'” dependencies { .

梁中林 的专栏 3110

Android MultiDex 分包及加载原理

Problem 日常开发中,一旦项目变的庞大起来,很容易遇到如下的编译错误: trouble writing output: Too many field references: 131000; max is 65536. You may try using --multi-dex option. //低版本编译会遇到类似这种 Conversion to Dalvik format failed...

CatTalk 935

Android 进阶——MultiDex分包与动态加载原理剖析

多dex主要是为了解决什么问题? 多dex是什么时候被加载的,如何加载? 多dex有哪些问题,主要解决方案如何?

xiaok的博客 3503

Multidex实战——指定需要的类到dex包中

Android开发中经常会遇到著名的“65536”问题,这个问题是在大型项目中,比如引用了众多第三方库之后,几乎不可避免的问题。 现如今最常用的解决方案是multidex方案,不再独立生成单一的classes.dex包,而生成多个dex包。 1. Ant方式: Ant方式 Coolper兄已经详解的非常详细了,并分析了maindexclasses脚本原理。 2. Gradle方式: G

荷包煮蛋的随手记 7402

Android中的dex分包

一、为什么要拆包 当 Android 系统安装一个应用的时候,有一步是对 Dex 进行优化,这个过程有一个专门的工具来处理,叫 DexOpt。DexOpt 是在第一次加载 Dex 文件的时候执行的。这个过程会生成一个 ODEX 文件,即 Optimised Dex。执行 ODEX 的效率会比直接执行 Dex 文件的效率要高很多。 但是在早期的 Android 系统中,DexOpt 有两个问题。...

欢迎关注微信公众号:DroidMind 1万+
上一篇: void与void*详解
下一篇: 热修复、热补丁与插件化
阿里安
博客等级 码龄13年 79粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值