- 浏览: 2195582 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包。
gradle的多渠道打包很简单,因为gradle已经帮我们做好了很多基础功能。
下面以友盟统计为例说明,一般友盟统计在AndroidManifest.xml里面会有这么一段声明:
其中CHANNEL_ID就是友盟的渠道标示,多渠道的实现一般就是通过修改CHANNEL_ID值来实现的。
接下来将一步一步来实现多渠道版本打包。
1.在AndroidManifest.xml里配置PlaceHolder,用与在build.gradle文件中来替换成自己想要设置的值
2.在build.gradle设置productFlavors,修改PlaceHolder的值
或者批量修改
按照上面两步即可编译打多渠道包了,命令是 ./gradlew assembleRelease,可以打包所有的多渠道包。
如果只是想打单渠道包,则执行相应的task即可,如gradle assemblePalyStoreRelease就是打PlayStore渠道的Release版本。
3.如果希望可以对最终的文件名做修改,如需要针对不同的需求生成不同的文件。而修改文件名也很简单,参考以下代码即可实现
此方法有一定局限性,就是渠道包多了之后编译花费的时间会很长,这里推荐美团打包的第三种方法。
完整的gradle脚本
gradle的多渠道打包很简单,因为gradle已经帮我们做好了很多基础功能。
下面以友盟统计为例说明,一般友盟统计在AndroidManifest.xml里面会有这么一段声明:
<meta-data android:name="UMENG_CHANNEL" android:value="CHANNEL_ID" />
其中CHANNEL_ID就是友盟的渠道标示,多渠道的实现一般就是通过修改CHANNEL_ID值来实现的。
接下来将一步一步来实现多渠道版本打包。
1.在AndroidManifest.xml里配置PlaceHolder,用与在build.gradle文件中来替换成自己想要设置的值
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
2.在build.gradle设置productFlavors,修改PlaceHolder的值
productFlavors { playStore { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "playStore"] } miui { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "miui"] } wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } }
或者批量修改
productFlavors { playStore {} miui {} wandoujia {} } //批量处理 productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }
按照上面两步即可编译打多渠道包了,命令是 ./gradlew assembleRelease,可以打包所有的多渠道包。
如果只是想打单渠道包,则执行相应的task即可,如gradle assemblePalyStoreRelease就是打PlayStore渠道的Release版本。
3.如果希望可以对最终的文件名做修改,如需要针对不同的需求生成不同的文件。而修改文件名也很简单,参考以下代码即可实现
def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) } android{ applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { File outputDirectory = new File(outputFile.parent); def fileName if (variant.buildType.name == "release") { fileName = "app_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk" } else { fileName = "app_v${defaultConfig.versionName}_${packageTime()}_debug.apk" } output.outputFile = new File(outputDirectory, fileName) } } } }
此方法有一定局限性,就是渠道包多了之后编译花费的时间会很长,这里推荐美团打包的第三种方法。
完整的gradle脚本
// 声明是Android程序 apply plugin: 'com.android.application' // 定义一个打包时间 def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) } android { // 编译SDK的版本 compileSdkVersion 21 // build tools的版本 buildToolsVersion '21.1.2' defaultConfig { // 应用的包名 applicationId "com.**.*" minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName "1.0" // dex突破65535的限制 multiDexEnabled true // 默认是umeng的渠道 manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"] } // 移除lint检查的error lintOptions { abortOnError false } //签名配置 signingConfigs { debug { // No debug config } release { storeFile file("../yourapp.keystore") storePassword "your password" keyAlias "your alias" keyPassword "your password" } } buildTypes { debug { // buildConfigField 自定义配置默认值 buildConfigField "boolean", "LOG_DEBUG", "true" buildConfigField "String", "API_HOST", "\"http://api.test.com\""//API Hos versionNameSuffix "-debug" minifyEnabled false //是否zip对齐 zipAlignEnabled false shrinkResources false signingConfig signingConfigs.debug } release { // buildConfigField 自定义配置默认值 buildConfigField "boolean", "LOG_DEBUG", "false" buildConfigField "String", "API_HOST", "\"http://api.release.com\""//API Host //// 是否进行混淆 minifyEnabled true zipAlignEnabled true // 移除无用的resource文件 shrinkResources true //混淆规则文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { // 输出apk名称为boohee_v1.0_2015-06-15_wandoujia.apk def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk" output.outputFile = new File(outputFile.parent, fileName) } } } } } // 友盟多渠道打包 productFlavors { wandoujia {} _360 {} baidu {} xiaomi {} tencent {} taobao {} ... } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } } dependencies { // 编译libs目录下的所有jar包 compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v4:21.0.3' compile 'com.jakewharton:butterknife:6.0.0' ... }
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 626本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1099颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 989从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1166Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 1003Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 838前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 924监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 799在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 948最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1326##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1112当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 774setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1506问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 765底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1780点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1369import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2313TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1542一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 864Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 931最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
在IT行业中,多渠道打包工具是开发者们常用于创建针对不同发布渠道的定制化应用包的重要工具。360的多渠道打包工具,正如标题所提及,是360公司提供的一款专门服务于Android应用程序开发者的工具,它允许开发者快速...
在Android应用开发中,多渠道打包是一项至关重要的任务,它允许开发者针对不同的分发渠道(如应用商店、合作伙伴等)创建定制化的apk。Walle,源自美团点评的开源项目,正是一个为解决这一问题而设计的高效多渠道...
在Android应用开发中,多渠道打包是一项非常重要的任务,它允许开发者针对不同的分发渠道(如应用商店、合作伙伴等)创建定制化的apk文件。每个渠道可能有不同的广告ID、统计跟踪码或其他特定设置,因此需要单独的...
在Android应用开发中,尤其是对于大型的互联网公司如美团,多渠道打包是一项至关重要的任务。它允许开发者根据不同渠道(例如AppStore、应用市场、线下推广等)构建定制化的APK,以便追踪不同来源的下载和用户行为。...
在Android应用开发中,多渠道打包是一项非常重要的技术,它允许开发者为不同的分发渠道创建定制的apk,比如Google Play、应用宝、华为应用市场等。这样可以针对每个渠道进行特定的推广策略,如添加不同的广告跟踪...
在Python编程环境中,多渠道打包资源是一个常见的需求,特别是在开发移动应用或游戏时,我们可能需要为不同的分发平台(如Google Play、App Store或其他第三方市场)创建定制化的安装包。这个过程通常涉及到修改配置...
在Android应用开发中,多渠道打包是一个非常重要的过程,它涉及到将同一个APK根据不同的渠道进行定制,以便在不同的分发平台或者合作方之间区分数据和统计效果。本压缩包"安卓快速实现多渠道打包.zip"包含了一些资源...
1. Apk多渠道打包工具 2. 原理见http://blog.csdn.net/liuyanggofurther/article/details/50978407 3. 此处是实现的代码和使用方法 4. 使用方法 java -jar zip-comment.jar app-release.apk markets.txt 5. 其中zip-...
《美团多渠道打包工具详解与应用》 在Android应用开发中,为了满足不同推广渠道的需求,通常需要构建多个带有特定标识的APK,这被称为多渠道打包。美团多渠道打包工具便是为此目的而设计的,它极大地简化了这一过程...
本主题将深入探讨如何使用Android Studio和Gradle进行多渠道打包以及处理外部库依赖。 **一、多渠道打包** 多渠道打包是Android应用发布时的一个常见需求,它允许我们为不同的市场或推广渠道创建定制的应用版本。...
**多渠道打包Walle详解** 在移动应用开发中,尤其是Android应用,经常需要针对不同的渠道进行定制化的打包,比如在发布应用时,我们可能需要在不同的应用市场、广告平台或者合作伙伴处部署不同的版本,每个版本可能...
在Android应用开发中,"友盟多渠道打包 Android Apk" 是一个常见的需求,尤其对于那些需要在多个分发渠道发布应用的开发者来说。友盟(Umeng)是中国领先的移动互联网开放平台,提供了多种服务,包括数据分析、推送...
在Android开发过程中,多渠道打包是一项重要的任务,它允许开发者为不同的应用市场或者推广渠道创建定制的apk,以便追踪每个渠道的效果。这个“多渠道打包方案脚本”可能就是一个优化过的自动化工具,用于提高开发...
本文将深入探讨使用Gradle进行多渠道打包的两种实现方式,并结合提供的两个压缩包文件——"gradle替换资源多渠道打包.rar"和"gradle_manifestPlaceholders实现多渠道打包.rar",详细介绍其具体操作步骤和技术细节。...
【标题】"多渠道打包VasDolly"是腾讯推出的一种高效的移动应用多渠道打包解决方案。这个工具的主要目的是为了帮助开发者快速、便捷地为不同的发行渠道创建定制化的应用包,无需重复编译和修改代码。在移动应用的发布...
在Android开发中,经常需要为不同的市场或者客户创建定制化的应用程序包(APK),这通常被称为多渠道打包。Gradle,作为Android Studio的默认构建工具,提供了强大的灵活性来实现这一需求。本文将深入探讨如何使用...
友盟作为一个提供统计分析、社会化分享等服务的平台,也支持多渠道打包。在这个场景下,我们可以利用Apache Ant,一个开源的自动化构建工具,来实现自动化的多渠道打包流程。下面将详细介绍如何在Android项目中使用...
在Android应用开发过程中,环境切换和多渠道打包是两个重要的环节。`Android-ChangeEnvironment`项目专注于解决这两个问题,提供了一键快速切换开发环境和多渠道打包的功能,大大提升了开发和发布效率。以下是对这些...
Python-瓦力多渠道打包的Python脚本测试工具是一个针对美团瓦力(Walle)的自动化打包解决方案。这个脚本极大地简化了应用的多渠道打包过程,尤其适用于Android应用程序的快速迭代发布。以下是对该工具及其相关知识...