gradle使用技巧

1.一个应用可能需要基于多个标准来创建多个版本

例如:一个应用不同省份版本不同,“js”,"zj"

这个功能的实现就是使用 Flavor Dimensions 。每一个 Dimensions 代表一个维度,并且 flavor 都被分配到一个指定的 Dimensions 中

flavorDimensions("province", "product")
productFlavors {
    js {//江苏
        dimension "province"
    }
    zj {//浙江
        dimension "province"
    }
    ahaschool {
        dimension "product"
        applicationIdSuffix ".ahaschool"
    }这样就能生成 jsAhaschool zjAhaschool
每一个 Variant 版本的配置由几个 Product Flavor 对象决定:
  • android.defaultConfig
  • 一个来自 province 组中的对象
  • 一个来自 product 组中的对象

   android.flavorDimensions 中定义的 Dimensions 排序非常重要(Variant 命名和优先级等)

flavorDimensions 中的排序决定了哪一个 flavor 覆盖哪一个,这对于资源来说非常重要,因为一个 flavor 中的值会替换定义在低优先级的 flavor 中的值。

flavorDimensions 使用最高的优先级定义,因此在上面例子中的优先级为:

province>product>defaultconfig

flavorDimensions 项目同样拥有额外的 sourceSet ,类似于 Variant 的 sourceSet ,只是少了 Build Type:

允许在 flavor-combination 的层次上进行定制。它们拥有过比基础的 flavor sourceSet 更高的优先级,但是优先级低于 Build Type 的 sourceSet 。

2.当默认的项目结构不适用的时候

重新为Java项目配置sourceSets可以使用以下方法:

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
        resources {
            srcDir 'src/resources'
        }
    }
}

以下是一个示例,它使用了旧项目结构中的main源码,并且将androidTest sourceSet组件重新映射到tests文件夹。

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        androidTest.setRoot('tests')
    }
}

3.开发App时经常遇到Release版和Debug版共存问题

有两种方法可以避免这种情况:1. 使用同一个签名;2. 使用不同包名

// 方法1 (签名配置方法可以Google)
android {
   buildTypes {
       debug {signingConfig signingConfigs.xxxConfig}
       release {signingConfig signingConfigs.xxxConfig}
   }
}
// 方法2 
android {
   buildTypes {
       debug {packageNameSuffix ".debug"}
   }
}

4.Release版打包的apk文件名

通过下面的代码可以自动为生成的apk文件附加上版本和build日期,这里可以根据你的需求添加各种信息上去。

android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            def today = new Date()
            if (variant.buildType.getName().equals("release")) {
                println "Change output apk name"
                variant.outputs.each { output ->
                    output.outputFile = new File(
                            output.outputFile.parent,
                            output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName + "-" + today.format('yyyyMMdd') + ".apk"))
                }
            }
        }
    }
}

General Tasks(通用任务)

  • assemble 这个task将会组合项目的所有输出。

  • check 这个task将会执行所有检查。

  • build 这个task将会执行assemble和check两个task的所有工作

  • clean 这个task将会清空项目的输出。

signing configurations(签名配置)

对一个应用程序签名需要以下:

  • 一个Keystory
  • 一个keystory密码
  • 一个key的别名
  • 一个key的密码
  • 存储类型

默认情况下,debug被配置成使用一个debug keystory。 debug keystory使用了默认的密码和默认key及默认的key密码。 debug keystory的位置在$HOME/.android/debug.keystroe,如果对应位置不存在这个文件将会自动创建一个。

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }

        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }

Running Proguard(运行 Proguard)

android {
    buildTypes {
        release {
            runProguard true
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }

    productFlavors {
        flavor1 {
        }
        flavor2 {
            proguardFile 'some-other-rules.txt'
        }
    }
}

配置一个外部库的jar包依赖

dependencies {
    compile files('libs/foo.jar')
}

这个compile配置将被用于编译main application。它里面的所有东西都被会被添加到编译的classpath中,同时也会被打包进最终的APK。 以下是添加依赖时可能用到的其它一些配置选项:

  • compile main application(主module)。
  • androidTestCompile test application(测试module)。
  • debugCompile debug Build Type(debug类型的编译)。
  • releaseCompile release Build Type(发布类型的编译)。

因为没有可能去构建一个没有关联任何Build Type(构建类型)的APK,APK默认配置了两个或两个以上的编译配置:compile和< buildtype >Compile. 创建一个新的Build Type将会自动创建一个基于它名字的新配置。

远程:

repositories {
    mavenCentral()
}


dependencies {
    compile 'com.google.guava:guava:11.0.2'
}

Java Compilation options(Java编译选项)

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

 

 

 

 

 

 

参考资料:

https://avatarqing.github.io/Gradle-Plugin-User-Guide-Chinese-Verision/build_variants/multi-flavor_variants.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值