eclipse下使用MultiDex解决65536限制

采用Android dex分包方案解决,步骤如下:

一、安装gradle :

1.1、下载gradle-2.2.1-bin.zip (也可以使用最新的gradle版本)

(https://services.gradle.org/distributions/gradle-2.2.1-bin.zip)

1.2、解压到安装目录

如:D:\WorkInstall\gradle-2.2.1

1.3、配置环境变量

GRADLE_HOME和path

1.4、验证环境变量

打开 cmd, 输入 gardle -v,如下环境配置成功

二、配置Android SDK

2.1、生成 build.gradle 配置文件:

打开eclipse,选择主工程,右键 -->Ecport --> Generate Gradle build files ,选择主工程    以及相关的工程,Finish。

2.2、配置 build-tools:

打开 build.gradle,查看属性 buildToolsVersion,进入 sdk/build-tools/,选择对应的版本。

进入sdk/extras/android/support/,把 multidex 文件夹复制到 sdk/build-tools/21.1.2/目录下。

2.3、配置子工程 build.gradle 文件

1、 workspace配置:

打开 workspace,里面会有build.gradle 和 settings.gradle. 配置如下

build.gradle:

注意:gradle 版本对应的Android配置(2.2.1-----对应 0.14+,具体的对应可以查看google     文档)。

//Top-level build file where you can add configuration options common to all     sub-projects/modules.

buildscript{

repositories {

mavenCentral()

}

dependencies {

classpath‘com.android.tools.build:gradle:0.14.+‘

}

}

settings.gradle:【主要是工程配置】

include‘:google-play-services_lib‘

include‘:easy3d-myshare-core-magic‘

include‘:magic-finger-china‘

include‘:pulltorefresh-library‘

include‘:android-support-v7-recyclerview‘

include‘:ImageViewTextEdit-library‘

include‘:ImageViewZoom-library‘

2、每个子工程 build.gradle 配置:

首先,给每个子工程添加 local.properties 文件,文件内容:(sdk.dir=Android SDK路径)

sdk.dir=D\:\\WorkInstall\\sdk

build.gradle:(子工程的 build.gradle配置都一样)

applyplugin: ‘android-library‘

dependencies{

compile fileTree(dir: ‘libs‘, include:‘*.jar‘)

}

android{

compileSdkVersion 22

buildToolsVersion"21.1.2"

enforceUniquePackageName=false

defaultConfig {

minSdkVersion14

targetSdkVersion19

//Enabling multidex support.

multiDexEnabledtrue

}

dexOptions {

preDexLibraries= false

}

lintOptions {

abortOnErrorfalse

}

sourceSets {

main{

manifest.srcFile ‘AndroidManifest.xml‘

java.srcDirs = [‘src‘]

resources.srcDirs = [‘src‘]

aidl.srcDirs = [‘src‘]

renderscript.srcDirs = [‘src‘]

res.srcDirs = [‘res‘]

assets.srcDirs = [‘assets‘]

}

//Move the tests to tests/java, tests/res, etc...

instrumentTest.setRoot(‘tests‘)

//Move the build types to build-types/<type>

//For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml,...

//This moves them out of them default location under src/<type>/... whichwould

//conflict with src/ being used by the main source set.

//Adding new build types or product flavors should be accompanied

//by a similar customization.

debug.setRoot(‘build-types/debug‘)

release.setRoot(‘build-types/release‘)

}

}

2.4、配置主工程 build.gradle 文件

applyplugin: ‘android‘

dependencies{

compile fileTree(dir: ‘libs‘, include:‘*.jar‘)

compileproject(‘:android-support-v7-recyclerview‘)

compile project(‘:easy3d-myshare-core-magic‘)

compile project(‘:google-play-services_lib‘)

compile project(‘:pulltorefresh-library‘)

compile project(‘:ImageViewTextEdit-library‘)

compile‘com.android.support:support-v4:23.1.0‘

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

compile(project(‘:android-support-v7-recyclerview‘)){

excludemodule: ‘support-v4‘

}

}

android{

compileSdkVersion 22

buildToolsVersion "21.1.2"

packagingOptions {

exclude ‘META-INF/DEPENDENCIES.txt‘

exclude ‘META-INF/LICENSE.txt‘

exclude ‘META-INF/NOTICE.txt‘

exclude ‘META-INF/NOTICE‘

exclude ‘META-INF/LICENSE‘

exclude ‘META-INF/DEPENDENCIES‘

exclude ‘META-INF/notice.txt‘

exclude ‘META-INF/MANIFEST.MF‘

exclude ‘META-INF/license.txt‘

exclude ‘META-INF/dependencies.txt‘

}

configurations {

all*.exclude module: ‘support-v4‘

}

dexOptions {

preDexLibraries= false

}

lintOptions {

abortOnErrorfalse

}

compileOptions {

sourceCompatibilityJavaVersion.VERSION_1_7

targetCompatibilityJavaVersion.VERSION_1_7

}

defaultConfig {

minSdkVersion14

targetSdkVersion19

//Enabling multidex support.

multiDexEnabledtrue

}

// 打包的签名信息(storeFile, 签名文件的路径)

signingConfigs {

myrelease {

keyAlias‘magic_finger.keystore‘

keyPassword‘magic_finger_20150724‘

storeFilefile(‘magic_finger.keystore‘)

storePassword‘magic_finger_20150724‘

}

}

buildTypes {

release{

//混淆

minifyEnabledtrue

//Zipalign优化

//zipAlignEnabledtrue

//移除无用的resource文件

//shrinkResourcestrue

//proguardFile getDefaultProguardFile(‘proguard-android.txt‘)

//加载默认混淆配置文件 progudard-android.txt在sdk目录里面,                                     //proguard.cfg是我们自己配的混淆文件

proguardFilesgetDefaultProguardFile(‘proguard-android.txt‘), ‘proguard.cfg‘

signingConfigsigningConfigs.myrelease

}

}

sourceSets {

main {

manifest.srcFile‘AndroidManifest.xml‘

java.srcDirs = [‘src‘]

resources.srcDirs = [‘src‘]

aidl.srcDirs = [‘src‘]

renderscript.srcDirs = [‘src‘]

res.srcDirs = [‘res‘]

assets.srcDirs = [‘assets‘]

jniLibs.srcDirs= [‘libs‘]

}

// Move the tests to tests/java,tests/res, etc...

instrumentTest.setRoot(‘tests‘)

// Move the build types tobuild-types/<type>

// For instance,build-types/debug/java, build-types/debug/AndroidManifest.xml, ...

// This moves them out of them defaultlocation under src/<type>/... which would

// conflict with src/ being used by themain source set.

// Adding new build types or productflavors should be accompanied

// by a similar customization.

debug.setRoot(‘build-types/debug‘)

release.setRoot(‘build-types/release‘)

}

afterEvaluate{

tasks.matching{

it.name.startsWith(‘dex‘)

}.each{ dx ->

if(dx.additionalParameters == null) {

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

}else{

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

}

}

}

}

2.4、添加 android-support-multidex.jar

将android-support-multidex.jar(sdk\extras\android\support\multidex\library\libs)引入到   工程中。

(注:最好放在referenced libraies中,而不是放在libs下,这样避免build时jar包重复)

同样,以相同的方式把 android-support-v4.jar 添加进去(PS:这里出现了 duplicate entry: com/nineoldandroids/animation/Animator$AnimatorListener.class)

2.5 配置MultiDexApplication:

然后在Application中覆盖方法attachBaseContext。

注:这里有三种方式: (android.support.multidex.MultiDexApplication)

a.在AndroidManifest.xml的application中声明MultiDexApplication;

b.如果你已经有自己的Application类,让其继承MultiDexApplication;

c.如果你的Application类已经继承自其它类,那么可以重写attachBaseContext()方法:

根据自身情况选择一种方式。

三、打包apk

完成之后,可以开始打包了。

cmd,进入工程所在的目录,输入:gradle build --stacktrace,最终Build successful为止。

打开apk包,可以看见.dex被分成了多。

五、常见问题:

以上步骤会出现一些问题,目前的解决方案如下:

5.1、SDK location not found. Define location with sdk.dir in thelocal.properties file or with an ANDROID_HOME environment variable.

请检查所有工程里面是否包含了 local.properties,且 sdk.dir 是否配置正确

5.2、java.util.zip.ZipException: duplicate entry:xxxx.class。

一定是jar冲突了,可能是多个project中都引入了相同的jar,需要剔除掉重复的jar

5.3、Execution failed for task ‘:magic-finger-china:packageRelease‘.

这个是签名文件不对,请检查

5.4、Failed to shrink resources: java.util.zip.ZipException: invalidentry compressed

size(expected 4017 but got 4081 bytes); ignoring

去掉混淆文件里面 zippalignEnable true.

5.5、Error:Execution failed for task ‘:app:proguardDemoRelease‘.

> java.io.IOException: The same input jar xxxx is specified twice.

是 proguard.cfg 文件,打开,并去掉所有的 -libraryjars libs/xxxx;

时间: 2024-08-28 08:33:21

eclipse下使用MultiDex解决65536限制的相关文章

eclipse下修改项目名导致tomcat内发布名不一致的解决方法

这几天做了一个项目,后来因为一点原因需要修改Javaweb项目的名称,点击项目的名称->右键Refactor->Rename...  输入要修改的项目名称,保存后,部署到tomcat,突然发现eclipse下修改项目名导致tomcat内发布名不一致了 ,郁闷了,开始在网上找到解决办法,我是看 http://blog.chinaunix.net/uid-25820084-id-3531608.html 这个网站的kimutaku001的ChinaUnix博客位朋友的博客,解决了这个问题,我吧他说

eclipse下启动tomcat出现Setting property &#39;source&#39; to &#39;org.eclipse.jst.jee.server: &#39;错误的解决办法

在eclipse中启动tomcat时出现Setting property 'source' to 'org.eclipse.jst.jee.server:你的站点名'   did not find a matching property错误 解决办法: 1.在server控制台内,在服务器上点右键--属性 2.general选项卡中点switch location 这时,location变为:/servers/tomcat6.0 server at localhost.server 3.在pro

Eclipse For Mac下中文乱码解决

在Mac os 版本的eclipse下引入java项目或是源代码,经常会碰到其中中文部分都是乱码.对于这一问题,经过小试,可以解决. 1.打开eclipse 偏好设置 2.General ——>Content Types——>Text——>Java SourceFile 3.将编码设置为GBK,暂时没有发现问题. 4.update 这样就搞定了,遇到此问题的朋友值得一试哦.

Eclipse下BASE64Decoder提示错误的解决办法

解决方案1(推荐): 只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了 解决方案2: Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> Deprecated and trstricted API -> Forbidden reference (access rules): ->

eclipse下执行wordcount报错 java.lang.ClassNotFoundException 解决办法

eclipse下执行wordcount报错 java.lang.ClassNotFoundException 17/08/29 07:52:54 INFO Configuration.deprecation: fs.default.name is deprecated. Instead, use fs.defaultFS 17/08/29 07:52:54 WARN util.NativeCodeLoader: Unable to load native-hadoop library for y

Eclipse下Maven新建Web项目index.jsp报错完美解决(war包)

Eclipse下Maven新建Web项目步骤 1. 2. 3. 4. 5. 问题描述 最近用eclipse新建了一个maven项目,结果刚新建完成index.jsp页面就报错了,先把错误信息贴出来看看! 解决方法 第一种:直接在pom.xml文件中添加jar包支持 <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <

Ubuntu64位下使用eclipse闪退的解决

打开eclipse将鼠标放在代码上等待代码提示的时候,直接闪退 错误如下: A fatal error has been detected by the Java Runtime Environment: SIGSEGV (0xb) at pc=0x00007f25d0b922a1, pid=3459, tid=139803099674368 JRE version: Java? SE Runtime Environment (7.0_60-b19) (build 1.7.0_60-b19) J

Eclipse下ADB报错:Android ADB server didn&#39;t ACK,解决办法

转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9401981 ADB server didn't ACK 这个问题会困恼很多的新手朋友,我以前刚开始做Android的时候也遇到过这个问题,不过自己百度,google啥的,也不知道怎么就给解决了,看到群里很多新手朋友都会问这个问题,说实话我也没有一个解决这个问题的终极方法(百试百灵的那种,哈哈),自己没遇到也没有认真的去对待他,今天,就是在今天,我打开Eclipse连上手机,准备调试程

Eclipse下导出java程序可执行的jar包图片无法显示问题的一种解决方法

说明:在eclipse中运行java程序的时候一切正常,可是当把jar包导出的时候却发现图片没法显示,这估计是java程序的各种配置和路径问题所导致,后来找到一种解决方法,供遇到这方面问题的学习java程序的鞋同参考: Java项目下的目录结构如下: 其中class类放在包:package accpedu; (即实际是在如上bin/accpedu文件夹下面) 通过下面的方法来引用图片时,在eclipse里面执行是可以正常显示图片的: ImageIcon image1 = new ImageIco