您的位置:首页 > 移动开发

APP开发实战114-Android Studio打包介绍

2016-07-20 22:54 429 查看

29 Android Studio使用技巧

29.1打包介绍

使用Android Studio可以很方便的一次编译多个渠道包,步骤如下:

 

1 在AndroidManifest.xml文件中配置CHANNEL字符串:

<meta-data

        android:name="UMENG_CHANNEL"

        android:value="${CHANNEL_VALUE}"

        tools:replace="android:value"/>

 

2 在项目中增加各渠道文件夹各相关文件。如不同渠道包连接的服务器地址不同,可以做如下配置:

每个渠道包的strings.xml文件中包含对应的服务器地址:

<resources>

        <stringname="base_url">http://www.xxx.com</string>

    </resources>

 

3在gradle文件中添加如下代码:

productFlavors{

//编译3个渠道包

        demo3 {

        }

        demo4 {

        }

        demo5 {

        }

 

//设置每个渠道包中的渠道名称

        productFlavors.all { flavor ->

            flavor.manifestPlaceholders =[CHANNEL_VALUE: name]

        }

//把代码的提交次数+渠道名称作为版本号

applicationVariants.all{ variant ->

            if(variant.buildType.name.equals('release')) {

                def gitVersion =gitVersionCode()

               variant.mergedFlavor.versionCode = gitVersion

                variant.mergedFlavor.versionName= gitVersion.toString() +variant.mergedFlavor.manifestPlaceholders.CHANNEL_VALUE

            }

        }

//按APK名+版本号+编译时间+渠道名称的方式修改编译的APK文件名称

applicationVariants.all{ variant ->

            if(variant.buildType.name.equals('release')) {

                variant.outputs.each { output ->

                    def outputFile =output.outputFile

                    if (outputFile !=null &&

outputFile.name.endsWith('release.apk')){

                    def fileName =

"xxx_v${variant.mergedFlavor.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"

                    output.outputFile = newFile(outputFile.parent, fileName)

                    }

//删除xxx-unaligned.apk这类没有字节对齐的APK文件

if(output.zipAlign!= null){

                        output.zipAlign.doLast{

                           output.zipAlign.inputFile.delete()

                        }

                    }

                }

            }

        }

    }

//获取git服务器上的代码提交次数

defgitVersionCode() {

    def cmd = 'git rev-list HEAD --count'

    cmd.execute().text.trim().toInteger()

}

//得到当前时间的字符串,不能用UTC时区,要用上海所在的时区(也就是北京//时间)

defreleaseTime() {

    return newDate().format("yyyyMMddHHmmss",

TimeZone.getTimeZone("Asia/Shanghai"))

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: