有这样一个场景:一个项目正在开发,后来领导说有另外一个项目跟当前项目很像,只要在上面改些东西就可以了,然后你一听立刻把代码复制一份在上面改,改完以后领导又说要加一些功能,两个项目都要加,累死累活做完以后领导又说,后面可能还会有第三个项目,只需要在上面改点东西就可以了, 并且后面加功能这三个项目都要,是不是很崩溃?这该怎么办?有没有一种简单的方法只需要配置一下就可以了? 答案是有的,请看:
一、gradle配置要求
ownCompile project(path: '':carddesk_module'', configuration: ''ownRelease'')
voresCompile project(path: '':carddesk_module'', configuration: ''voresRelease'')
当我们使用compile来引用包,或者如上使用它的变种来引用包的时候,gradle会有一些版本限制,否则就会报错:
(1)首先找到gradle/wrapper/gradle-wrapper.properties,双击打开,替换gradle版本为: distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
(2)打开根目录下的build.gradle文件,把没有翻墙的话把google()注释掉,否则会报错,把classpath的3.2.0版本换成2.3.3版本 如下:
buildscript {
repositories {
// google()
jcenter()
}
dependencies {
// classpath ''com.android.tools.build:gradle:3.2.0''
classpath ''com.android.tools.build:gradle:2.3.3''
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
// google()
jcenter()
}
}
(3)gradle高版本创建的工程不需要显示的指定buildToolsVersion "25.0.3",现在我们把它降低了, 所以要手动把它加上,否则会报没有指定buildToolsVersion的错误。
二、配置工程签名文件
1、创建签名文件,然后把签名文件放到工程中的app目录下:
2、然后在android {}下面添加如下代码,注意顺序,脚本代码从上至下执行,如果signingConfigs和buildTypes写反了则buildTypes里面debug中的sigingConfigs.release中的release就找不到了,添加好以后同步gradle
signingConfigs {
release {
keyAlias ''dongjie'' // key别名
keyPassword ''dongjie'' // 别名密码
storeFile file(''proj_aos_key.jks'') // 签名文件路径
storePassword ''dongjie'' // 签名文件密码
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro''
debuggable true
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.release
}
}
如下图在工程中Signing里面就可以看见配置信息了
3、上面实现以后,我们就可以来回切换debug和release了
如果工程中有分享微信的功能,那这时候运行安装的就是签名过得,不必刻意去签名来测试分享微信功能。
但是注意一个问题,debug和release来回切的时候有可能release会报错,这样设置一下就好了:
三、multiDexEnable true 和 平台支持
1、随着公司业务不断的变多, 工程中的代码会越来越多,到一定程度的时候运行代码直接崩溃, 查原因发现是某个类找不到。在android5.0之前,每一个android应用中只会含有一个dex文件,但是因为Android系统本身的BUG,使得这个dex的方法数量被限制在65535之内,这就是著名的”64K(641024)事件。 如何解决呢? 请看下图,只需要加一行代码就可以了突破64k限制了, 由于篇幅原因,这里只给解决方案
2、经常会碰到这样一种情况,我们每次引用的第三方库里面的so包含很多个平台,armeabi、x86、mips、armeabi-v7a等,这样打包后发现体积特别大,有没有一种办法能让包小一点呢? 请看上图, 有一种方式可以设置我们支持的平台,其他的会直接被忽略, 这样就减小了包的体积,大多数手机现在是arm架构,模拟器是x86架构,所以只需要支持这两个就可以了。
四、一些设置
1、lintOptions
lintOptions {
checkReleaseBuilds false // true 如果有崩溃停止构建, false不停止
abortOnError false // true错误发生停止gradle构建, false错误发生不停止gradle构建
}
将上面两个选项设置为false, 这两个选项作用是在打包的时候不会因为一些莫名其妙的问题中断gradle,导致包打不出来。
如果想查看更多的lintOptions配置,请看:https://blog.csdn.net/berber78/article/details/60766091
2、dex方法超过64k限制和gradle编译oom问题解决:
dexOptions {
javaMaxHeapSize "4g"
jumboMode = true
}
3、引用aar文件
android {
repositories {
flatDir { // 指定aar路径
dirs ''libs''
}
}
}
dependencies {
compile(name: ''lyx-library-1.0.3'', ext: ''aar'')
}