Android分包的最简单方式
诚信合作
8年前
<h3>前言</h3> <ul> <li>世上本来没有分包,写的代码多了,便有了分包。</li> <li>相信你肯定在项目中遇到过下面的问题:point_down: <pre> <code class="language-java">Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536</code></pre> </li> <li>或者这样:point_down: <pre> <code class="language-java">trouble writing output:Too many field references: 131000; max is 65536.You may try using --multi-dex option.</code></pre> </li> <li>这两种问题出现的原因都是因为你的项目中的方法数超过65536。前者出现在低版本的手机中,后者出现在较高的版本之中。这里的版本以5.0来区分。</li> </ul> <h3>如何解决</h3> <ul> <li>开源的Android引发了一股技术狂潮,各种开源项目层出不穷,在分包的实现上也是拥有多个框架,其中不乏一些大公司提供的。但是,我们还是使用google官方提供的方式比较方便。</li> <li>如果你的minSdkVersion设置成21及更高,你只需要在build.gradle设置multiDexEnabled为true就可以了: <pre> <code class="language-java">android { defaultConfig { ... minSdkVersion 21 targetSdkVersion 25 **multiDexEnabled true** } ... }</code></pre> </li> <li>如果你的minSdkVersion设置成20及以下,除了上述步骤外你还需要添加依赖库并进行相关配置: <ul> <li>引入依赖库 <pre> <code class="language-java">android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 25 **multiDexEnabled true** } ... } dependencies { **compile 'com.android.support:multidex:1.0.1'** }</code></pre> </li> <li>配置方式一 <ul> <li>先在manifest中设置MultiDexApplication为启动的MultiDexApplication <pre> <code class="language-java"><?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></code></pre> </li> <li>然后将自以的application继承自MultiDexApplication <pre> <code class="language-java">public class MyApplication extends MultiDexApplication { ... }</code></pre> </li> </ul> </li> <li>配置方式二 <pre> <code class="language-java">public class MyApplication extends SomeOtherApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(context); Multidex.install(this); }}</code></pre> </li> </ul> </li> <li>上述配置方式一和配置方式二任选其一就可以了,这里还有个小细节,区分分包方式的是minSdkVersion而不是targetSdkVersion,博主刚开始的时候以为是targetSdkVersion,等到出现问题的时候,一直觉得google实在欺骗我的感情,后来查看官方文档才发现原来是自己没搞清。</li> </ul> <h3>结尾</h3> <ul> <li>做完上述配置后,就可以愉快的分包了,是不是很简单吖!!</li> <li>最后贴出google官方关于分包的介绍,当然了,你需要KX上网。</li> <li>Configure Apps with Over 64K Methods</li> </ul> <p> </p> <p>来自:http://www.jianshu.com/p/74445c9d52d1</p> <p> </p>