项目切换到Android Studio有一段时间了,来聊聊多渠道打包的做法。


1.在productFlavors添加你需要的所有渠道


android {    productFlavors {  //在这里添加你所有需要打包的渠道        dev {}        google {}        myapp {}        xiaomi {}        app360 {}        wandoujia {}    }    //添加如下代码    productFlavors.all { flavors->flavors.manifestPlaceholders=[CHANNEL_VALUE:name]    }}同时修改androidManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    package="cn.op.zdf"    android:versionCode="25"    android:versionName="3.1.2"><application android:name=".myApplication"><-- 在manifest中添加如下代码---><meta-data            android:name="UMENG_CHANNEL"            android:value="${CHANNEL_VALUE}"/></application></manifest>



OK,在命令行运行gradlebuild,大功告成。你可以去喝杯茶了。


2.如何给apk重命名

恩,发布产品的时候我们需要如下的命名规则

release版本的命名规则如下:

产品名称-版本号-渠道号-sign-42.apk


在build.gradle中添加如下代码

//获取时间戳def getDate() {    def date = new Date()    def formattedDate = date.format('yyyyMMddHHmm')    return formattedDate}//从androidManifest.xml中获取版本号def getVersionNameFromManifest(){    def manifestParser = new com.android.builder.core.DefaultManifestParser()    return manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile)}android{    //修改生成的apk名字    applicationVariants.all{ variant->        variant.outputs.each { output->            def oldFile = output.outputFile            def newName = '';            if(variant.buildType.name.equals('release')){//                println(variant.productFlavors[0].name)                def releaseApkName = 'yjf-android-v' + getVersionNameFromManifest() + '-' + variant.productFlavors[0].name + '-sign-42.apk'                output.outputFile = new File(oldFile.parent, releaseApkName)            }            if(variant.buildType.name.equals('beta')){                newName = oldFile.name.replace(".apk", "-v" + getVersionNameFromManifest() + "-build" + getDate() + ".apk")                output.outputFile = new File(oldFile.parent, newName)            }            if(variant.buildType.name.equals('debug')){            }        }    }}


哦,怎么取得版本号?怎么取得渠道号?怎么判断是不是release版本?上面的代码里面都有。

我的项目是从eclipse中迁移过来的,所以我是从manifest文件中读取的版本号,就是上面的那个函数getVersionNameFromManifest()

如果你的版本号定义在build.gradle中,那defaultConfig.versionName就是你的版本号。

更多相关文章

  1. android开源代码编译方法
  2. 一个二维码实现IOS和android两个平台的下载核心代码
  3. Android 中提高代码安全性-混淆代码
  4. win平台改代码到android 平台需要注意
  5. 优化你的代码结构 --- MVP
  6. Android之动画(Java代码实现)1
  7. 【第一行代码】Android日志工具
  8. Android 本地代码中的LIKELY和UNLIKELY宏
  9. Cocos2dx android 部分代码的理解

随机推荐

  1. 多媒体录制音频/视频之——MediaRecorder
  2. android之View和SurfaceView
  3. Android(安卓)-- Init进程对信号的处理流
  4. 菜鸟学android---ListView和checkBox组合
  5. handler使用
  6. Android(安卓)动态获取控件的宽高,并动态
  7. android流量监测的实现原理
  8. Android中给系统控件添加配置的自定义属
  9. vlc android 编译
  10. Android网络编程之——Android下菜单系统