标签(空格分隔): MultiDex
gradle安装
到Gradle官网下载最新版本的Gradle,安装;
将bin目录所在位置添加到环境变量的path中;
在Eclipse中安装Gradle插件:
Help–> Install new software;
填入插件地址 http://dist.springsource.com/release/TOOLS/gradle
工程转化
在工程目录右键 –>Export –> Generate Gradle files,Eclipse会自动生成Gradle相关文件;
右键–> Configure –>转化成Gradle工程;
如果工程有依赖的lib,则在根目录中会有setting.gradle文件,如果只有一个主工程,则此文件不是必需;
setting.gradle
include ‘:libs:Volley’
include ‘:libs:Android-PullToRefresh:library’
include ‘:tmp:tmps’
在工程的根目录下,build.gradle 文件内容如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle:1.1.+’
}
}
task wrapper(type: Wrapper) {
gradleVersion = ‘2.0’
} // Top-level build file where you can add configuration options common to all sub-projects/modules.
在工程内部的build.gradle中,需要进行如下配置:
添加
lintOptions{
abortOnError false
}
防止因为lint检查,打包失败;
在主工程的biuld.gradle中,添加
defaultConfig{
multiDexEnabled true
}
开启多个Dex打包模式。 但是这个的前提是,在工程的Application中已经集成了MultiDexApplication;
打包处理脚本
afterEvaluate {
tasks.matching {
it.name.startsWith(‘dex’)
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = [‘–multi-dex’]
} else {
dx.additionalParameters += ‘–multi-dex’
}
// optional
//dx.additionalParameters += ‘–main-dex-list=main-dex-list.txt’.toString()
//dx.additionalParameters += ‘–minimal-main-dex’
dx.additionalParameters += ‘–set-max-idx-number=8000’
}
}
–main-dex 用于指定第一个包中必需包含的类,存放在 main-dex-list.txt中,文件名可自行修改
–minimal-main-dex 最小化主包,与–main-dex-list配合使用,则主包中只含有文件中指定的类
–set-max-idx-number 用于指定每个dex包中最多的函数数量,多余此数量则自动进行分包
添加打包所需的签名
signingConfigs{
myConfig{
storeFile file(“keys”)
storePassword “passwrod”
keyAlias “kayAlins”
keyPassword “password”
}
}
buildTypes{
release {
signingConfig signingConfigs.myConfig
}
}
添加so文件库
//noinspection all
task copyNativeLibs(type: Copy) {
// third party lib so
from(new File(projectDir, ‘libs’)) { include ‘armeabi/*.so’ }
into new File(buildDir, ‘native-libs’)
}
tasks.withType(JavaCompile) {
compileTask ->
//noinspection all
compileTask.dependsOn copyNativeLibs
}
//noinspection all
tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
pkgTask ->
pkgTask.jniFolders = new HashSet()
pkgTask.jniFolders.add(new File(buildDir, ‘native-libs’))
}
关于提示版本不对应问题:gradle version 1.10 is required. current version is 2.4
修改项目根目录下的build.gradle,classpath ‘com.android.tools.build:gradle:1.2.+’将版本号改为更高的版本;
修改项目根目录下Gradle–>Wrapper中的distributionUrl=https://services.gradle.org/distributions/gradle-2.4-all.zip 版本号改为对应的安装版本
到根目录下,运行gradlew build;
.9png导致的编译失败问题
Eclipse中编译运行正常,但是通过Gradle打包,提示.9png 有问题。原因是,部分.9.png制作错误,Eclipse会自动优化为png格式,Gradle不会自动优化,需要手工将.9.png修正
Duplicate异常 duplicate entry: android/support/multidex/Multidex V14.class
原因是项目中重复使用了此类相关的包。
解决办法:
- 工程–>Properties–>Java Build Path–>Order and Export中,不要勾选重复的包即可。
- 在gradle中添加exclude字段compile fileTree(dir: ‘libs’, include: ‘*.jar’, exclude: ‘android-support-multidex.jar’)