关闭

Gradle-Android 实战应用

113人阅读 评论(0) 收藏 举报

  关于gradle的基础了解,提供一个中文指南,不了解gradle的需要先看指南。

  大多数Android用户使用gradle的初始目的很简单,就是多渠道打包,那么我们就来说说多渠道打包的问题(这里以友盟举例)

  多渠道打包的关键之处在于,定义不同的product flavor,并把 AndoridManifest中的channel渠道编号替换为对应的渠道名,我们在AndroidManifest文件下的application根节点进

行如下配置:

  

        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${CHANNEL_NAME}" />

  然后进入你的build.gradle(注意这里是Module gradle,不是Project gradle,本文中提到的build.gradle都是module的)中的android节点下的productFlavors配置:

android {
    // 你的其他配置代码

    productFlavors {
        yingyongbao {
            manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]
        }
        umeng {
            manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]
        }
        wandoujia {
            manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]
        }

    }
    // 你的其他配置代码
}

mete-data中的value=“${CHANNEL_NAME}”实际上只是个占位符,它在build.gradle中会根据不同的渠道名称替换成不同的值,由此来实现多渠道打包,不需要在原始的清单

文件下写一堆与项目没多大关系的东西,把构建项目集中到build.gradle中。这里manifestPlaceholders可以用来替换AndroidManifest下的占位符号,当然不只是替换渠道包这么单

一的功能,举个例子比方说我们的清单文件中配置的activity,我们也可以用占位符先占着${activity},然后在不同的渠道中配置不同的activity的完整名称,那么在不同的渠道下就会

加载不同的activity。

  下面在介绍一个常用的功能,在每一个gradle构建的项目中都有gradle-wrapper.properties文件,在该文件中配置签名信息:

RELEASE_KEY_PASSWORD=xxxx
RELEASE_KEY_ALIAS=xxx
RELEASE_STORE_PASSWORD=xxx
RELEASE_STORE_FILE=../.keystore/xxx.jks


  然后在build.gradle中直接引用就可以

android {
    signingConfigs {
        release {
            storeFile file(RELEASE_STORE_FILE)
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_KEY_PASSWORD
        }
    }
}


  继续新功能,buildtype定制参数:

android {
        debug {
            manifestPlaceholders = [app_label:"@string/app_name_debug"]
            applicationIdSuffix ".debug" //增加id后缀
            minifyEnabled false  //混淆
            signingConfig signingConfigs.debug //使用签名
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            manifestPlaceholders = [app_label:"@string/app_name"]
            minifyEnabled true
            shrinkResources true  //去除无用资源
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        preview{
            manifestPlaceholders = [app_label:"@string/app_name_preview"]
            applicationIdSuffix ".preview"
            debuggable true // 保留debug信息
            minifyEnabled true
            shrinkResources true
            signingConfig signingConfigs.preview
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}


  自定义导出APK名称:androidstudio默认只会打出debug和release包,当又多个渠道和变种版本时,一下几十个包,打出来都不知道谁是谁了,那么通过名称分类很重要

  

android {
    // rename the apk with the version name
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(
                    output.outputFile.parent,
                    "ganchai-${variant.buildType.name}-${variant.versionName}-${variant.productFlavors[0].name}.apk".toLowerCase())
        }
    }
}

  当然如果只是当作一个工具在用的话,看看指南在看看这个帖子,就到这了。如果你很闲或者你很有兴趣推荐一个gradle博客






0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1758次
    • 积分:163
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条