gradle

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']
    }
上一篇下一篇

猜你喜欢

热点阅读