Android使用Gradle自动化打包

转载请注明出处: http://blog.csdn.net/a992036795/article/details/52095036

假如我们使用了友盟sdk或者别的sdk,我们需要在androidMainifest 填写一个渠道号,来帮助我们统计。也就说app发布之后需要每个应用市场对应着唯一的渠道号。如果我们不使用自动化打包的话,就非常的麻烦,需要自己去改Mainifest.xml中的渠道号。还好,我们可以使用gradle来帮我们完成这个过程。
我目前的一个项目使用了友盟统计,我需要在AndroidMainifest.xml中写入渠道号

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

我使用${UMENG_CHANNEL_VALUE} 来代替渠道号,最终中使用gradle会将它替换成真正的渠道号。
我们在app 的build.gradle文件中android{}中,这样写:

  productFlavors {
        wandoujia {
        }
        qihu360 {
        }
        baidu {
        }
        productFlavors.all {
            flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
    }

这样在打包之后他就会使用 wandoujia ,qihu360,baidu来替换UMENG_CHANNEL_VALUE 完成渠道号的填写
然后我们在命令行输入 gradle assemble 来完成打包。
如果不出问题,它将会在app/build/outputs/apk 文件夹下生成打包好的文件 类似 app-wandoujia-realease.apk 这种apk文件。

当然如果我们希望在 apk文件命中加入 版本信息,和时间信息的话,我们可以更改这个apk的文件名,我们只需在 android{} 中加入:

android.applicationVariants.all { variant ->
        def file = variant.outputs[0].outputFile
        variant.outputs[0].outputFile = new File(file.parent,
                file.name.replace(".apk", "-" + defaultConfig.versionName +"-"+releaseTime()+ ".apk"))

    }

其中releaseTime()是自己定义的一个函数:

def releaseTime(){
    return new Date().format("yyyy-MM-dd")
}

这样我们继续运行打包命令,就会在build/outputs/apk/得到 如 app-wandoujia-debug-1.0.0-2016-08-02.apk这样的文件。
如果不使用命令行,也可以使用android studio 右边的快捷方式
这里写图片描述
根据需要单机即可,如果想只打包release版,就点击 assembleRelease

最终会根据不同的渠道生成渠道包:
这里写图片描述

这样就完成了自动化打包。

接下来我们说话一下 签名的配置,以及一些打包的选项。
我们配置签名的话,可以在android{ signingConfigs{} } 中进行配置,例如:

android {
    signingConfigs {
        release {
            keyAlias 'xxxx'
            keyPassword 'xxxx'
            storeFile file('/xxxx.jks')
            storePassword 'xxx'
        }
        debug {
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storeFile file('/debug.keystore')
            storePassword 'android'
        }
    }

然后在android{ buildTypes{}} 中写:

 release {
            minifyEnabled false
            buildConfigField("boolean", "LOG_DEBUG", "false")
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig = signingConfigs.release
        }
        debug {
            buildConfigField("boolean", "LOG_DEBUG", "true")
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig = signingConfigs.debug
        }

他们分别用来打包release版和debug版
其中有一些选项可以设置:
minifyEnabled 这个选项决定是否混淆
proguardFiles 这个指定了混淆的配置文件路径,默认是app目录下的 proguard-rules.pro
shrinkResources 可以移除无用资源
….

buildConfigField 这个属性可以在 java代码包名地下的 BuildConfig中加入字段
这句代码 buildConfigField(“boolean”, “LOG_DEBUG”, “true”)作用是在BuildConfig
中加入了一个域 public static final boolean LOG_DEBUG = true;
这样我们就可以在 java代码中判断,是否为debug版本了。
这里写图片描述

最后我附上我的配置:

apply plugin: 'com.android.application'
apply plugin: 'android-apt'
android {
    signingConfigs {
        release {
            keyAlias 'xxx'
            keyPassword 'xxxxxx'
            storeFile file('/xxx.jks')
            storePassword 'xxxxx'
        }
        debug {
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storeFile file('/debug.keystore')
            storePassword 'android'
        }
    }
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "xxxxxx"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            buildConfigField("boolean", "LOG_DEBUG", "false")
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig = signingConfigs.release
        }
        debug {
            buildConfigField("boolean", "LOG_DEBUG", "true")
            minifyEnabled false

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig = signingConfigs.debug
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
            java.srcDirs = ['src/main/java', 'src/main/java-gen']
        }
    }
    productFlavors {
        wandoujia {
        }
        qihu360 {
        }
        baidu {
        }
        productFlavors.all {
            flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
    }
    android.applicationVariants.all { variant ->
        def file = variant.outputs[0].outputFile
        variant.outputs[0].outputFile = new File(file.parent,
                file.name.replace(".apk", "-" + defaultConfig.versionName +"-"+releaseTime()+ ".apk"))

    }
}
def releaseTime(){
    return new Date().format("yyyy-MM-dd")
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    }
Android ant 自动打包脚本:自动替换友盟渠道、版本号、包名,而不影响代码(修改的是临时目录中的代码)。 如何集成到我的项目里 前提:了解android官方文档,在项目目录中执行官方命令能打包,比如常见的打包步骤: android update project -p . -s -t "android-21" ant debug 如果是用Linux系统,则不用记上面这么长的命令,下载本项目中的Makefile,放到项目目录中,然后执行: make ant debug 如果ant debug打包能通过,则可以使用下面的自动打包。 下载custom_rules.xml,放到项目目录中,然后执行: ant auto-debug -Dversion=time 即可自动打包,生成的包在./bin/中。 如果想打release包,下载ant.properties,修改其中的密码等配置,然后执行: ant auto-release -DUMENG_CHANNEL=googlePlayStore -Dpackage=com.example.ant.beta 即可。 打包时自动更换友盟渠道 确认AndroidManifest.xml中已添加了友盟节点: <meta-data android:name="UMENG_CHANNEL" android:value="debug" /> 然后执行: ant auto-release -DUMENG_CHANNEL=googlePlayStore 即会把AndroidManifest.xml中的友盟渠道替换成googlePlayStore,然后打包。而执行: ant auto-release -DUMENG_CHANNEL=smartisanAppStore 即会打出锤子应用商店的包。 打包时自动更换包名 ant auto-release -Dpackage=com.example.ant.beta 即会把包名自动改成com.example.ant.beta。 打包使用时间作为版本号 ant auto-debug -Dversion=time 把版本号改成时间,然后打包,效果: versionCode是时间戳,比如1390969254 versionName是日期,比如14.1.29.1220 多个参数任意组合 ant auto-release -DUMENG_CHANNEL=googlePlayStore -Dpackage=com.example.ant.beta -Dversion=time 即打出google play的beta包,使用时间作为版本号 debug与release签名 ant auto-debug 即使用debug签名打包(路径~/.android/debug.keystore),请参考http://developer.android.com/tools/publishing/app-signing.html#debugmode ant auto-release使用release签名打包,请下载本项目中的ant.properties,修改其中的路径、密码等等,参考http://developer.android.com/tools/building/building-cmdline.html#ReleaseMode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值