Eclipse中使用multidex解决分包

       之前也处理过android方法数超出65536的问题,不过当时着急,没有采用分包的解决方式,直接在需要使用到jar包的时候,动态加载,原理主要是DexClassLoader。这次这个问题又报出来了,没办法,正好时间充裕,就研究研究这个分包。

        android官方有分包的方案,即android-support-multidex.jar,本文,主要讲的是怎么在Eclipse上面使用这个jar。

        网上有太多文章了,可是,我看了绝大多数的,都并没有让我的Eclipse成功产生一个包。整个过程分为下面几步:

1,安装Gradle

2,Eclipse安装Gradle插件

3,Eclipse导出Gradle项目(会生成build.gradle等文件)

4,Config项目(Eclipse右击,如果已经是gradle项目,就没有这个Config)

5,配置gradle

6,配置multidex

7,遇到的问题

详细内容如下:

1,安装Gradle

        我本来以为安装软件嘛,肯定得新的,新的肯定解决了旧版本不少bug,所以兴冲冲的下载了3.4,结果,maven里面还没到这个版本,导致,后面的Config步骤走不通。最终,我在下载了五个版本的gradle后,发现2.14.1版本,能够解决问题(选择版本很重要,安装过程很无脑)

2,Eclipse安装插件

         我记得我下载的地址是:http://download.eclipse.org/buildship/updates/e46/releases/1.0

Eclipse里面->Help->Install New SoftWare,输入这个地址,就可以下载啦(插件不难,需要翻墙)

3,Eclipse导出Gradle项目

         安装完插件后,我们重启下eclipse就可以看到,原先的项目,右击,Export,里面会多一个选项:Generate Gradle build files.然后一直继续,有一个地方,需要你Force overriding of existing files。然后你的项目里面,就多出来一些文件build.gradle等文件(零要点)

4,Config项目


Configure

如果这个时候直接config(上图就是我说的config),eclipse会去下载一些gradle-all的包比如:


Eclipse正在下载

eclipse里面下载的速度,不知道为啥,特别慢,而且这个包的版本,和我们的也不是很符合,需要我们先把项目里面的gradle文件夹下面的wrapper文件夹下面的gradle-wrapper.properties里面的distributionUrl修改下改成2.14.1-all。然后config,会很慢,或者你现在可以去我们的Gradle安装目录下面E:\gradle-2.14.1\wrapper\dists

可以看到eclipse正在下载这个版本的内容,我的eclipse速度慢,我就直接把这个all.zip在浏览器中下载,然后直接拷贝到这个文件夹(E:\gradle-2.14.1\wrapper\dists\gradle-2.14.1-all\9ossqmv60fyibylheubs4isy9)里面去,然后解压。再去config,就不需要下载了。

这个时候,我这边会出现一个问题,提示版本不匹配,原因是,我的项目里面的build.gradle里面的classpath'com.android.tools.build:gradle:0.12.+'或者比这个大

我改成classpath'com.android.tools.build:gradle:2.1.+'就好了。修改完后,重新config会在E:\gradle-2.14.1\caches目录下,创建一个modules-2文件夹,里面会下载很多东西,这个过程很漫长。(小插曲)

这样完了以后,我们的项目就变成gradle项目了,经过我的尝试,这个时候,如果报,这个项目不是主项目错误,那么就把目前的项目都关闭掉,然后重新import 项目(gradle项目),我在这个时候,出现了原先的项目全部变成了java项目这样的问题,别着急,关闭项目,再import一次android 项目,就全部正常了。(这儿的问题又多又烦)

5,我曾经天真的以为,这样以后,就可以直接run项目了,我的分包问题就解决了。。。图样!

你这个是使用eclipse的run as Android Application和我们没有安装插件,是一样的。

得使用另外一种run的方式,在你的Eclipse->Window找到GradleTasks里面找到你的项目

右击你的项目Open Gradle run Configurations


会进入一个配置页面


Gradle Task里面输入一个命令:clean (或者再加一个assemble)然后点击ok就可以了

然后在你的eclipse的项目里面右击项目 Run as->run configurations,


找到我们的项目(上图中,clean(清理) 后面可以接一个assemble(打包)),直接run。如果一切正常,那么,就会在我们项目目录下面产生一个build文件夹,build\outputs\apk这个路径下面,会多三个包xxx-debug.apk就是我们运行的包。

当然,我是遇到了问题的,run后,报这个错误:

Could not find tools.jar. Please check that C:\Program Files\Java\jre1.8.0_45 contains a valid JDK installation.

这个时候就需要我们在run之前做一个配置,上图中,的JAVA HOME


我改成这样,再运行就成功了。

如果我们大家的项目能这么简单的搞定,就没有必要写这个文章了。(有司机,这段路不崎岖)

6,配置分包

关于这个配置,网上太多了,我也拷贝了一份,如果你已经配置好,就直接跳过吧

(1)我们自定义的Application需要继承MultiDexApplication,或者在oncreate里面调用MultiDex.install(this)。

(2)需要添加的内容如下:

dependencies {

        compile 'com.android.support:multidex:1.0.0'

}

android {

        compileSdkVersion 20

        buildToolsVersion "23.0.1"//这个地方如果是20.0.0,就会报下面的错误


        configurations{

               all*.exclude group: 'com.android.support', module: 'multidex'

         }

        defaultConfig {

                  minSdkVersion 9

                  targetSdkVersion 19

                  multiDexEnabled true

        }

       dexOptions {

               preDexLibraries = false

               javaMaxHeapSize "2g"//(后面会解释这行的意义)注释1

        }

        lintOptions {

               checkReleaseBuilds false

              abortOnError false//(后面会解释这行的意义)注释2

          }

         afterEvaluate{

             tasks.matching{

                       it.name.startsWith('dex')

             }.each{dx->

                       if(dx.additionalParameters == null) {

                            dx.additionalParameters= ['--multi-dex']

                       }else{

                             dx.additionalParameters+= '--multi-dex'

                        }

             }

      }

}(网上一堆堆)

注释1:如果不加,大一点的项目,assemble的时候,会内存溢出,你看到的现象是,项目在不停的反复的没完的Launching delegate,最终导致内存溢出(加大为2g后。。。不会报错了而已)


Launching delegate

注释2:assemble项目过程中,遇到的一些lint错误,就会中断打包,加上这个,就可以了,直到打包完成


其实到这里,项目使用Android Studio打开,已经可以run了,可是,Eclipse不行,他有他的任性。

7,遇到的问题

我们来讲讲Eclipse的support-v4,太烦人

我们的项目,会引用一些开源框架,比如说silding_menu_library,这个开源项目里面,就包含了support-v4的jar包,然后我们主项目,也有这样的jar包,或者,还有别的需要引用的,也包含这个jar。那么问题来了。当我们assemble的时候,会报包冲突。部分截图如下


意思就是,你那么多项目,都有这个jar包,我打包的时候,冲突了重复了。

然后,我就去百度,发现好多人啊,好多人遇到这个问题。解决方案缺很单一,无非是exclude例如all*.exclude group: 'com.android.support', module: 'support-v4'

我没有去Android Studio上面去测试了,我只是在Eclipse上面测试,发现,并没有什么用。

该冲突还是冲突。最终(真累,好几次想要放弃,毕竟Android Studio已经可以运行了),解决方案是,改用provided,如下:

silding_menu_library里面的build.gradle这样配置dependencies

compile fileTree(dir: 'libs', exclude: ['android-support*.jar'], include: '*.jar')

provided files("libs/android-support-v4.jar")

含义就是编译的时候,编译support-v4包,但是打包的时候,不要support-v4。

至此,我的大一点的项目,也可以assemble了。从安装gradle到最终assemble,花了3天。(这一段,是重点)

补充:1,failed to find Build Tools revision 21.0.0 修改buildToolsVersion "21.0.0"

2,cannot resolve external dependency com.android.support:mutidex,将extra里面下载一下(保证sdk\extras\android\support\multidex\library\libs目录下,有android-support-multidex.jar包).

以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,361评论 25 707
  • Android Studio正式版早已经发布了,默认使用Gradle构建,GitHub上80%的Android项目...
    流哲羽阅读 2,849评论 1 13
  • 时间不紧不慢的流逝,你到这个世界已经21天了。 每天都会给我们带新的惊喜。 你逐渐的适应着这小小的房子,小小的床。...
    mao眼阅读 197评论 0 2
  • 一起当过兵的叫战友,一起跳舞的叫舞友,一起打麻将的当然叫麻友啰! 因为平时工作之余喜欢搓二把,所以我的麻友还真不少...
    梅胜雪阅读 902评论 16 11
  • 人生本是一场修行,旅行是修行之路的眼,让你看到世界的另一面,有人说:当你去过的地方越多,怀着虔诚之心去看,你就发现...
    一月木水阅读 807评论 0 0