微信号:jszj2014215

介绍:主要分享移动互联网的相关产品和资讯,关注你将学习到更多,在互联网的当下你会赚更多的钱...

Android分包的最简单方式

2016-12-07 08:09 点这里

前言

  • 世上本来没有分包,写的代码多了,便有了分包。

  • 相信你肯定在项目中遇到过下面的问题:point_down:

    Conversion to Dalvik format failed:Unable to execute dex: method
    ID not in [0, 0xffff]: 65536
  • 或者这样:point_down:

    trouble writing output:Too many field references: 131000; max is   
    65536.You may try using --multi-dex option.
  • 这两种问题出现的原因都是因为你的项目中的方法数超过65536。前者出现在低版本的手机中,后者出现在较高的版本之中。这里的版本以5.0来区分。

如何解决

  • 开源的Android引发了一股技术狂潮,各种开源项目层出不穷,在分包的实现上也是拥有多个框架,其中不乏一些大公司提供的。但是,我们还是使用google官方提供的方式比较方便。

  • 如果你的minSdkVersion设置成21及更高,你只需要在build.gradle设置multiDexEnabled为true就可以了:

    android {    
      defaultConfig {      
        ...        
        minSdkVersion 21        
        targetSdkVersion 25        
        **multiDexEnabled true**   
      }
      ...
    }
  • 如果你的minSdkVersion设置成20及以下,除了上述步骤外你还需要添加依赖库并进行相关配置:

    • 先在manifest中设置MultiDexApplication为启动的MultiDexApplication

      <?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 { ... }
    • 引入依赖库

      android {    
        defaultConfig {        
        ...         
        minSdkVersion 15         
        targetSdkVersion 25        
        **multiDexEnabled true**    
        }    
        ...
      }
      dependencies {  
        **compile 'com.android.support:multidex:1.0.1'**
      }
    • 配置方式一

    • 配置方式二

      public class MyApplication extends SomeOtherApplication {      
        @Override  
        protected void attachBaseContext(Context base) {                
          super.attachBaseContext(context);     
          Multidex.install(this);  
      }}
  • 上述配置方式一和配置方式二任选其一就可以了,这里还有个小细节,区分分包方式的是minSdkVersion而不是targetSdkVersion,博主刚开始的时候以为是targetSdkVersion,等到出现问题的时候,一直觉得google实在欺骗我的感情,后来查看官方文档才发现原来是自己没搞清。

结尾

  • 做完上述配置后,就可以愉快的分包了,是不是很简单吖!!

  • 最后贴出google官方关于分包的介绍,当然了,你需要科学上网。

  • Configure Apps with Over 64K Methods

 

来自:http://www.jianshu.com/p/74445c9d52d1


 
Android技术之家 更多文章 Android6.0M权限管理实战,完美轻量级封装 Android工程师谈Android性能优化案例研究 配置Freeline,一秒编译android程序 构建&nbsp;Android&nbsp;应用程序一定要绕过的&nbsp;30&nbsp;个坑 面向开发者的最佳&nbsp;Android&nbsp;库列表
猜您喜欢 Linux高级技巧:集群的搭建(一) 百里金戈铁马,只愿君安天下! "DevOps"是如何扼杀开发者的! Druid-基本概念 百度贴吧王伟冰:跳出历史技术栈,谨慎寻找最佳优化思路