gradle常用配置汇总
2019-11-27 本文已影响0人
匠人plus
阿里云仓库地址
maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
全局应用配置文件,在buildscript中添加
apply from: 'thirdparty-lib/config.gradle'
全局修改所有module的build输出路径,在buildscript中添加
buildDir = new File(rootDir, "gradle-build/${path.replaceAll(':', '/')}")
加载aar
repositories {
flatDir {
dirs 'libs'
}
}
配置支持多dex
在defaultConfig中添加
multiDexEnabled true
在Application的attachBaseContext方法中添加
MultiDex.install(this);
ndk配置
通常可以在defaultConfig中添加
ndk {
abiFilters "armeabi-v7a"
}
修改多版本support包差异导致的冲突,同步为统一版本
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '28+'
}
}
}
}
修改apk输出路径与名称
在android中添加
android.applicationVariants.all { variant ->
//判断是release还是debug版本
def buildType = variant.buildType.name
//获取渠道名称
def channel = variant.productFlavors[0]!=null?variant.productFlavors[0].name:"home";
def fileName//获取当前时间的"YYYY-MM-dd"格式。
def createTime = new Date().format("yyyy_MM_dd_HH_mm", TimeZone.getTimeZone("GMT+08:00"))
//println variant.getPackageApplicationProvider().outputFile
//def output = variant.outputFile()
variant.outputs.each {
variant.getPackageApplicationProvider().get().outputDirectory =
new File(project.rootDir.absolutePath + "/apks/${buildType}/${createTime}")
fileName = "${buildType}_${channel}_v${defaultConfig.versionName}_${createTime}_${buildType}.apk"
//it.outputFile = new File(it.outputFile.parent, fileName)
it.outputFileName = fileName
}
}
混淆相关
minifyEnabled true //表示是否开启混淆,默认为false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
zipAlignEnabled true //是否优化apk文件,将apk文件中未压缩的数据在4个字节边界上对齐
shrinkResources true //是否去除无用资源,任何在编译过程中没有用到的资源或者代码都会被删除,可以有效减小apk体积
'proguard-rules.pro' //混淆配置文件,一般就采用项目中默认的proguard-rules.pro文件。
proguard-rules.pro文件说明
#指定代码的压缩级别
-optimizationpasses 5
#包明不混合大小写
-dontusemixedcaseclassnames
#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
#优化 不优化输入的类文件
-dontoptimize
#预校验
-dontpreverify
#混淆时是否记录日志
-verbose
#保护注解
-keepattributes *Annotation*
# 保持哪些类不被混淆
-keep public class * extends android.app.Fragment
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
#保持 native 方法不被混淆
-keepclasseswithmembernames class * {
native <methods>;
}
#保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
#保持 Serializable 不被混淆
-keepnames class * implements java.io.Serializable
#保持枚举 enum 类不被混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
#忽略警告
-ignorewarning
##记录生成的日志数据,gradle build时在本项目根目录输出##
#apk 包内所有 class 的内部结构
-dump proguard/class_files.txt
#未混淆的类和成员
-printseeds proguard/seeds.txt
#列出从 apk 中删除的代码
-printusage proguard/unused.txt
#混淆前后的映射
-printmapping proguard/mapping.txt
########记录生成的日志数据,gradle build时 在本项目根目录输出-end######
androidx相关
androidx适配需要在 gradle.properties中添加
android.useAndroidX=true //表示当前项目启用 AndroidX
android.enableJetifier=true //表示将依赖包也迁移到AndroidX
gradle中配置
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
迁移操作:
Refactor > Migrate to AndroidX,
注意:在执行该操作时会提醒我们是否将当前项目打包备份。如果你提前已经做好了备份,可以忽略;如果没有备份,则先备份。
接下来可以build 项目,解决部分包名或者路径转化错误的问题,
通常在 AndroidStudio 的 build 选项卡中一次最多只会报 50条错误,所以后面可能还有N个50,要有耐心啊。
dexOptions 配置
dexOptions {
//multiDex的一些相关配置,这样配置可以让你的编译速度更快
preDexLibraries = false //让它不要对Lib做preDexing
javaMaxHeapSize "4g" //增加java堆内存大小
}
aaptOptions
建议使用如下配置
aaptOptions {
cruncherEnabled = false;
useNewCruncher = false;
}
sourceSets
sourceSets.main{
//多资源目录的配置方式
//写法1
res.srcDirs += 'src/main/res'
res.srcDirs += 'src/main/res_aa'
res.srcDirs += 'src/main/res_bb'
//写法2
res.srcDirs=['src/main/res',
'src/main/res-aa',
'src/main/res-bb']
}