gradle多渠道打包apk小贴士
来源:互联网 发布:经济学常用微观数据库 编辑:程序博客网 时间:2024/05/22 03:35
使用as+gradle 到现在,多多少少也用到了一些gradle的打包技巧,现在总结一下,备忘。。。
首先看一下一般的gradle文件
apply plugin: 'com.android.application'//定义一个获取时间的方法,下面用到def releaseTime() { return new Date().format("yyyy_MM_dd", TimeZone.getTimeZone("UTC"))}//定义一个获取名字的方法,下面用到def appName(){ return "contra"}android { compileSdkVersion 22 buildToolsVersion "22.0.1" //指定程序签名 signingConfigs { release { storeFile file("../app/special.jks") storePassword "storePassword " keyAlias "app" keyPassword "keyPassword " } debug { storeFile file("../app/special.jks") storePassword "storePassword " keyAlias "app" keyPassword "keyPassword " } } //缺省配置,gradle找不到符合的资源之后就在使用缺省的配置 defaultConfig { applicationId "com.jadyn.chan" minSdkVersion 14 targetSdkVersion 22 versionCode 2 versionName "1.0.2" //BuildConfig类的常量值 buildConfigField 'boolean', 'HAS_SPLASH', 'Boolean.parseBoolean("false")' buildConfigField 'String', 'GAME_URL', '"file:///android_asset/index.html"' //TODO 配置友盟app_key manifestPlaceholders = [UMENG_CHANNEL_VALUE: '55d6c92fe0f55a473b0ccccc'] } //执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。 lintOptions { abortOnError false } buildTypes { release { //不显示Log buildConfigField "boolean", "LOG_DEBUG", "false" //不混淆 minifyEnabled false //zipalign优化 zipAlignEnabled true //移除无用的resource文件 shrinkResources false //使用该目录下的混淆文件proguard-rules.pro' proguardFiles 'proguard-rules.pro' //应用上面写的签名 signingConfig signingConfigs.release } debug { //显示Log buildConfigField("boolean", "LOG_DEBUG", "true") //不混淆 minifyEnabled false //zipalign优化 zipAlignEnabled true //移除无用的resource文件 shrinkResources false //使用系统默认的android程序混淆文件,该文件已经包含基本的混淆声明 proguardFiles 'proguard-rules.pro' //应用上面写的签名 signingConfig signingConfigs.debug } } //渠道Flavors ,配置不同渠道的app productFlavors { //百度,针对该渠道的apk设置特定的值 baidu{ manifestPlaceholders = [CLIENT_ID: "ccxzc"] applicationId 'com.ss' versionCode 1 versionName '1' } //小米,没有针对apk设置特定的值,故使用defaultConfig 里面的声明值 xiaomi{} } //批量配置,这里的意思是为productFlavors 的所有渠道包设置meta_umeng_channel, //name为渠道包名字(上面的baidu,xiaomi),UMENG_CHANNEL_VALUE在AndroidManifest.xml文件声明了,见下文 productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } //打包后应用名称,这里实现对打包出来的apk重命名 //appName(),releaseTime()已经在上面声明了 applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { //命名根据applicationId def fileName = "${appName()}_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk" output.outputFile = new File(outputFile.parent, fileName) } } }}dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:22.2.0' compile project(':x_Project2')}
下面解释下几个主要的参数
buildConfigField
当你声明了之后,gradle build之后会生成一个BuildConfig类,大概如下
public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String GAME_URL = "file:///android_asset/index.html"; public static final boolean HAS_SPLASH = Boolean.parseBoolean("false");}
可以在defaultConfig声明通用常量或者在productFlavors针对某个特定的渠道声明一个常量
productFlavors { //阿里巴巴 ali{ buildConfigField 'boolean', 'HAS_SPLASH', 'Boolean.parseBoolean("true")' }}
然后在实现类中调用
insertSplashView(BuildConfig.HAS_SPLASH);private void insertSplashView(boolean hasSplash) { ...}
就可以实现针对不同渠道配置不同参数
productFlavors
在里面声明多个渠道,打包的时候生成多个apk
productFlavors { baidu { manifestPlaceholders = [ UMENG_CHANNEL_VALUE: "百度", UMENG_APPKEY_VALUE: "dasd", GAME_URL: "file:///android_asset/index.html", GAME_ORIENTATION: "0"] applicationId 'com.baidu.chan' versionCode 1 versionName '1' } xiaomi { manifestPlaceholders = [ UMENG_CHANNEL_VALUE: "xiaomi", UMENG_APPKEY_VALUE: "dasd", GAME_URL: "file:///android_asset/index.html", GAME_ORIENTATION: "0"] applicationId 'com.xiaomi.chan' versionCode 1 versionName '1' } }
manifestPlaceholders 里面的声明的值是在AndroidManifest.xml定义的
<meta-data android:name="UMENG_APPKEY" android:value="${UMENG_APPKEY_VALUE}" /> <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> <meta-data android:name="GAME_URL" android:value="${GAME_URL}" /> <meta-data android:name="GAME_ORIENTATION" android:value="${GAME_ORIENTATION}" />
通过这种方法实现多渠道配置。
某些时候每个渠道都要一些不同的图片或者代码,比如,小米市场打开的时候要小米的欢迎界面,360要360的欢迎界面。可以在代码src目录下新建想要渠道的文件,注意文件名要与productFlavors 下声明的渠道名相同,这样打包小米的渠道包时,就优先加载这个渠道包的文件
如上,小米需要特定的图片,故只需要重写ic_launch.png图片,就可以简单实现了
0 0
- gradle多渠道打包apk小贴士
- Gradle多渠道打包应用apk
- Gradle学习笔记(基础,打包,多渠道打包,adb安装apk
- Gradle多渠道打包
- Gradle多渠道打包
- eclipse+gradle多渠道打包
- 【Andorid】Gradle多渠道打包
- android Gradle多渠道打包
- eclipse多渠道打包(gradle)
- Gradle多渠道打包 (1)
- Gradle多渠道打包
- gradle多渠道打包
- Gradle多渠道打包
- Gradle 多渠道打包
- 使用gradle多渠道打包
- Gradle多渠道打包
- Gradle Android 多渠道打包
- 多渠道打包(Gradle配置)
- WebView的使用总结-js与java之前的相互调用
- 有用的网站
- Java多线程——thread及runnable的基本使用及交替执行
- 【超强干货】蘑菇街App的组件化之路
- js实现前端跨域
- gradle多渠道打包apk小贴士
- Spark编程指南V1.4.0(翻译)
- 判断s所指的字符串是否是回文数
- Android Studio的基本使用
- 通过一个大型项目来学习分布式算法(4)
- 【胖鱼头】配置Maven站点并使用ssh发布到服务器
- linux c语言 select函数用法
- 安装CocoaPods
- 通过一个大型项目来学习分布式算法(5)