Skip to content

Android Studio使用Gradle打包 #4

Description

@sunflower-zyb

Android Studio使用Gradle打包

标签(空格分隔): Android Studio Gradle


直接上代码

apply plugin: 'com.android.application'
//如果是一个library
//apply plugin: 'com.android.library'

//定义打包时间函数
def releaseTime() {
    return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}


android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

//    defaultConfig是默认配置,如果没有其他的配置覆盖,就会使用这里的
    defaultConfig {
        //代表应用的包名
        applicationId "com.sunflower.mytest"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1 //版本号
        versionName "1.0" //版本名称
        //BuildConfig.java是Android Gradle自动生成的一个java类文件,无法手动编译,但是可以通过Gradle控制
        //buildConfigField 一共有3个参数,第一个是数据类型,就是你定义的常量值是一个什么类型,和Java的类型是对等的,这里是String。
        // 第二个参数是常量名,这里是URL。第三个参数是常量值。如此定义之后,就会在BuildConfig.java中生成一个常量名为URL的常量定义。默认配置的生成是:
        //自定义字段,表示当前的服务器地址,不同版本的服务器地址可能不一致,在Activity中使用BuildConfig.URL获得此值
        buildConfigField "String", "URL", '"http://baidu.com"'
    }
    buildTypes {
        release {
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //混淆
            minifyEnabled true
            //Zipalign优化
            zipAlignEnabled true
            // 移除无用的resource文件
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {
            // 显示Log
            buildConfigField "boolean", "LOG_DEBUG", "true"
            versionNameSuffix "-debug"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false

            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        // 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk
                        def fileName = "测试_v${defaultConfig.versionName}_demo_${releaseTime()}_${variant.productFlavors[0].name}.apk"
//                        def fileName = "我要物流_v${defaultConfig.versionName}_demo_${releaseTime()}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }
        }

        productFlavors {
            //默认使用的是defaultConfig配置。
            // 这里的flavor和defaultConfig是一样的,可以自定义其applicationId、versionCode以及versionName等信息
            jianshu {
                buildConfigField "String", "URL", '"http://www.jianshu.com"'//API Host
            }
            taobao {
                buildConfigField "String", "URL", '"https://www.taobao.com"'//API Host
            }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
}

最后执行assemble这个命令,会结合 Build Type 创建自己的task,如:

gradlew assembleDebug
gradlew assembleRelease

如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:

gradlew assembleWandoujiaRelease

如果我们只打wandoujia渠道版本,则:

gradlew assembleWandoujia

此命令会生成wandoujia渠道的Release和Debug版本
同理我想打全部Release版本:

gradlew assembleRelease

这条命令会把Product Flavor下的所有渠道的Release版本都打出来。


参考以下文档:
美团Android自动化之旅—适配渠道包
使用Gradle管理你的Android Studio工程
Android Studio多渠道打包和代码混淆教程
Android官方技术文档翻译——ApplicationId 与 PackageName

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions